Changeset 248730 in webkit


Ignore:
Timestamp:
Aug 15, 2019 11:01:16 AM (5 years ago)
Author:
sbarati@apple.com
Message:

[WHLSL] Make length, clamp, operator+, operator-, operator*, operator/, operator[], operator[]=, operator.xy, operator.xy=, native
https://bugs.webkit.org/show_bug.cgi?id=200700

Reviewed by Robin Morisset.

Source/WebCore:

This makes us 50% faster in compute_boids.

Tests: webgpu/whlsl/clamp-stdlib.html

webgpu/whlsl/length-stdlib.html
webgpu/whlsl/operator-div.html
webgpu/whlsl/operator-minus.html
webgpu/whlsl/operator-plus.html
webgpu/whlsl/operator-times.html
webgpu/whlsl/operator-vector-assign.html
webgpu/whlsl/operator-vector-load.html
webgpu/whlsl/operator-xy.html

  • Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:

(WebCore::WHLSL::Metal::inlineNativeFunction):

  • Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt:
  • Modules/webgpu/WHLSL/WHLSLStandardLibraryUtilities.cpp:

(WebCore::WHLSL::includeStandardLibrary):

LayoutTests:

  • webgpu/whlsl/clamp-stdlib-expected.txt: Added.
  • webgpu/whlsl/clamp-stdlib.html: Added.
  • webgpu/whlsl/length-stdlib-expected.txt: Added.
  • webgpu/whlsl/length-stdlib.html: Added.
  • webgpu/whlsl/operator-div-expected.txt: Added.
  • webgpu/whlsl/operator-div.html: Added.
  • webgpu/whlsl/operator-minus-expected.txt: Added.
  • webgpu/whlsl/operator-minus.html: Added.
  • webgpu/whlsl/operator-plus-expected.txt: Added.
  • webgpu/whlsl/operator-plus.html: Added.
  • webgpu/whlsl/operator-times-expected.txt: Added.
  • webgpu/whlsl/operator-times.html: Added.
  • webgpu/whlsl/operator-vector-assign-expected.txt: Added.
  • webgpu/whlsl/operator-vector-assign.html: Added.
  • webgpu/whlsl/operator-vector-load-expected.txt: Added.
  • webgpu/whlsl/operator-vector-load.html: Added.
  • webgpu/whlsl/operator-xy-expected.txt: Added.
  • webgpu/whlsl/operator-xy.html: Added.
Location:
trunk
Files:
18 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r248722 r248730  
     12019-08-15  Saam Barati  <sbarati@apple.com>
     2
     3        [WHLSL] Make length, clamp, operator+, operator-, operator*, operator/, operator[], operator[]=, operator.xy, operator.xy=, native
     4        https://bugs.webkit.org/show_bug.cgi?id=200700
     5
     6        Reviewed by Robin Morisset.
     7
     8        * webgpu/whlsl/clamp-stdlib-expected.txt: Added.
     9        * webgpu/whlsl/clamp-stdlib.html: Added.
     10        * webgpu/whlsl/length-stdlib-expected.txt: Added.
     11        * webgpu/whlsl/length-stdlib.html: Added.
     12        * webgpu/whlsl/operator-div-expected.txt: Added.
     13        * webgpu/whlsl/operator-div.html: Added.
     14        * webgpu/whlsl/operator-minus-expected.txt: Added.
     15        * webgpu/whlsl/operator-minus.html: Added.
     16        * webgpu/whlsl/operator-plus-expected.txt: Added.
     17        * webgpu/whlsl/operator-plus.html: Added.
     18        * webgpu/whlsl/operator-times-expected.txt: Added.
     19        * webgpu/whlsl/operator-times.html: Added.
     20        * webgpu/whlsl/operator-vector-assign-expected.txt: Added.
     21        * webgpu/whlsl/operator-vector-assign.html: Added.
     22        * webgpu/whlsl/operator-vector-load-expected.txt: Added.
     23        * webgpu/whlsl/operator-vector-load.html: Added.
     24        * webgpu/whlsl/operator-xy-expected.txt: Added.
     25        * webgpu/whlsl/operator-xy.html: Added.
     26
    1272019-08-15  Antti Koivisto  <antti@apple.com>
    228
  • trunk/Source/WebCore/ChangeLog

    r248729 r248730  
     12019-08-15  Saam Barati  <sbarati@apple.com>
     2
     3        [WHLSL] Make length, clamp, operator+, operator-, operator*, operator/, operator[], operator[]=, operator.xy, operator.xy=, native
     4        https://bugs.webkit.org/show_bug.cgi?id=200700
     5
     6        Reviewed by Robin Morisset.
     7
     8        This makes us 50% faster in compute_boids.
     9
     10        Tests: webgpu/whlsl/clamp-stdlib.html
     11               webgpu/whlsl/length-stdlib.html
     12               webgpu/whlsl/operator-div.html
     13               webgpu/whlsl/operator-minus.html
     14               webgpu/whlsl/operator-plus.html
     15               webgpu/whlsl/operator-times.html
     16               webgpu/whlsl/operator-vector-assign.html
     17               webgpu/whlsl/operator-vector-load.html
     18               webgpu/whlsl/operator-xy.html
     19
     20        * Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:
     21        (WebCore::WHLSL::Metal::inlineNativeFunction):
     22        * Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt:
     23        * Modules/webgpu/WHLSL/WHLSLStandardLibraryUtilities.cpp:
     24        (WebCore::WHLSL::includeStandardLibrary):
     25
    1262019-08-15  Robin Morisset  <rmorisset@apple.com>
    227
  • trunk/Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp

    r248280 r248730  
    250250    }
    251251
     252    auto vectorSize = [&] () -> unsigned {
     253        auto& typeReference = downcast<AST::TypeReference>(*nativeFunctionDeclaration.parameters()[0]->type());
     254        auto& vectorType = downcast<AST::NativeTypeDeclaration>(downcast<AST::TypeReference>(downcast<AST::TypeDefinition>(typeReference.resolvedType()).type()).resolvedType());
     255        ASSERT(vectorType.name() == "vector");
     256        ASSERT(matrixType.typeArguments().size() == 2);
     257        return WTF::get<AST::ConstantExpression>(vectorType.typeArguments()[1]).integerLiteral().value();
     258    };
    252259    auto matrixDimension = [&] (unsigned typeArgumentIndex) -> unsigned {
    253260        auto& typeReference = downcast<AST::TypeReference>(*nativeFunctionDeclaration.parameters()[0]->type());
     
    266273    if (nativeFunctionDeclaration.name() == "operator[]") {
    267274        ASSERT(nativeFunctionDeclaration.parameters().size() == 2);
    268         auto metalReturnName = typeNamer.mangledNameForType(nativeFunctionDeclaration.type());
    269 
    270         unsigned numberOfRows = numberOfMatrixRows();
    271         unsigned numberOfColumns = numberOfMatrixColumns();
    272         stringBuilder.flexibleAppend("do {\n", metalReturnName, " result;\n");
    273 
    274         stringBuilder.flexibleAppend(
    275             "    if (", args[1], " >= ", numberOfRows, ") {", returnName, " = ", metalReturnName, "(0); break;}\n",
    276             "    result[0] = ", args[0], '[', args[1], "];\n",
    277             "    result[1] = ", args[0], '[', args[1], " + ", numberOfRows, "];\n");
    278 
    279         if (numberOfColumns >= 3)
    280             stringBuilder.flexibleAppend("    result[2] = ", args[0], '[', args[1], " + ", numberOfRows * 2, "];\n");
    281         if (numberOfColumns >= 4)
    282             stringBuilder.flexibleAppend("    result[3] = ", args[0], '[', args[1], " + ", numberOfRows * 3, "];\n");
    283 
    284         stringBuilder.flexibleAppend(
    285             "    ", returnName, " = result;\n",
    286             "} while (0);\n");
     275        auto& typeReference = downcast<AST::TypeReference>(*nativeFunctionDeclaration.parameters()[0]->type());
     276        size_t numTypeArguments = downcast<AST::NativeTypeDeclaration>(downcast<AST::TypeReference>(downcast<AST::TypeDefinition>(typeReference.resolvedType()).type()).resolvedType()).typeArguments().size();
     277        if (numTypeArguments == 3) {
     278            auto metalReturnName = typeNamer.mangledNameForType(nativeFunctionDeclaration.type());
     279
     280            unsigned numberOfRows = numberOfMatrixRows();
     281            unsigned numberOfColumns = numberOfMatrixColumns();
     282            stringBuilder.flexibleAppend("do {\n", metalReturnName, " result;\n");
     283
     284            stringBuilder.flexibleAppend(
     285                "    if (", args[1], " >= ", numberOfRows, ") {", returnName, " = ", metalReturnName, "(0); break;}\n",
     286                "    result[0] = ", args[0], '[', args[1], "];\n",
     287                "    result[1] = ", args[0], '[', args[1], " + ", numberOfRows, "];\n");
     288
     289            if (numberOfColumns >= 3)
     290                stringBuilder.flexibleAppend("    result[2] = ", args[0], '[', args[1], " + ", numberOfRows * 2, "];\n");
     291            if (numberOfColumns >= 4)
     292                stringBuilder.flexibleAppend("    result[3] = ", args[0], '[', args[1], " + ", numberOfRows * 3, "];\n");
     293
     294            stringBuilder.flexibleAppend(
     295                "    ", returnName, " = result;\n",
     296                "} while (0);\n");
     297        } else {
     298            RELEASE_ASSERT(numTypeArguments == 2);
     299            unsigned numElements = vectorSize();
     300
     301            auto metalReturnName = typeNamer.mangledNameForType(nativeFunctionDeclaration.type());
     302
     303            stringBuilder.flexibleAppend("do {\n", metalReturnName, " result;\n");
     304
     305            stringBuilder.flexibleAppend(
     306                "    if (", args[1], " >= ", numElements, ") {", returnName, " = ", metalReturnName, "(0); break;}\n",
     307                "    result = ", args[0], "[", args[1], "];\n");
     308            stringBuilder.flexibleAppend(
     309                "    ", returnName, " = result;\n",
     310                "} while (0);\n");
     311        }
    287312
    288313        return;
     
    290315
    291316    if (nativeFunctionDeclaration.name() == "operator[]=") {
    292         ASSERT(nativeFunctionDeclaration.parameters().size() == 3);
    293         auto metalParameter2Name = typeNamer.mangledNameForType(*nativeFunctionDeclaration.parameters()[1]->type());
    294         auto metalReturnName = typeNamer.mangledNameForType(nativeFunctionDeclaration.type());
    295 
    296         unsigned numberOfRows = numberOfMatrixRows();
    297         unsigned numberOfColumns = numberOfMatrixColumns();
    298 
    299         stringBuilder.flexibleAppend("do {\n", metalReturnName, " m = ", args[0], ";\n",
    300             metalParameter2Name, " i = ", args[1], ";\n");
    301 
    302         stringBuilder.flexibleAppend(
    303             "    if (i >= ", numberOfRows, ") {", returnName, " = m;\nbreak;}\n",
    304             "    m[i] = ", args[2], "[0];\n",
    305             "    m[i + ", numberOfRows, "] = ", args[2], "[1];\n");
    306         if (numberOfColumns >= 3)
    307             stringBuilder.flexibleAppend("    m[i + ", numberOfRows * 2, "] = ", args[2], "[2];\n");
    308         if (numberOfColumns >= 4)
    309             stringBuilder.flexibleAppend("    m[i + ", numberOfRows * 3, "] = ", args[2], "[3];\n");
    310         stringBuilder.flexibleAppend(
    311             "    ", returnName, " = m;\n",
    312             "} while(0);\n");
    313         return;
    314     }
     317        auto& typeReference = downcast<AST::TypeReference>(*nativeFunctionDeclaration.parameters()[0]->type());
     318        size_t numTypeArguments = downcast<AST::NativeTypeDeclaration>(downcast<AST::TypeReference>(downcast<AST::TypeDefinition>(typeReference.resolvedType()).type()).resolvedType()).typeArguments().size();
     319        if (numTypeArguments == 3) {
     320            ASSERT(nativeFunctionDeclaration.parameters().size() == 3);
     321            auto metalParameter2Name = typeNamer.mangledNameForType(*nativeFunctionDeclaration.parameters()[1]->type());
     322            auto metalReturnName = typeNamer.mangledNameForType(nativeFunctionDeclaration.type());
     323
     324            unsigned numberOfRows = numberOfMatrixRows();
     325            unsigned numberOfColumns = numberOfMatrixColumns();
     326
     327            stringBuilder.flexibleAppend("do {\n", metalReturnName, " m = ", args[0], ";\n",
     328                metalParameter2Name, " i = ", args[1], ";\n");
     329
     330            stringBuilder.flexibleAppend(
     331                "    if (i >= ", numberOfRows, ") {", returnName, " = m;\nbreak;}\n",
     332                "    m[i] = ", args[2], "[0];\n",
     333                "    m[i + ", numberOfRows, "] = ", args[2], "[1];\n");
     334            if (numberOfColumns >= 3)
     335                stringBuilder.flexibleAppend("    m[i + ", numberOfRows * 2, "] = ", args[2], "[2];\n");
     336            if (numberOfColumns >= 4)
     337                stringBuilder.flexibleAppend("    m[i + ", numberOfRows * 3, "] = ", args[2], "[3];\n");
     338            stringBuilder.flexibleAppend(
     339                "    ", returnName, " = m;\n",
     340                "} while(0);\n");
     341        } else {
     342            RELEASE_ASSERT(numTypeArguments == 2);
     343
     344            ASSERT(nativeFunctionDeclaration.parameters().size() == 3);
     345            auto metalParameter2Name = typeNamer.mangledNameForType(*nativeFunctionDeclaration.parameters()[1]->type());
     346            auto metalReturnName = typeNamer.mangledNameForType(nativeFunctionDeclaration.type());
     347
     348            unsigned numElements = vectorSize();
     349
     350            stringBuilder.flexibleAppend("do {\n", metalReturnName, " v = ", args[0], ";\n",
     351                metalParameter2Name, " i = ", args[1], ";\n");
     352
     353            stringBuilder.flexibleAppend(
     354                "    if (i >= ", numElements, ") {", returnName, " = v;\nbreak;}\n",
     355                "    v[i] = ", args[2], ";\n");
     356            stringBuilder.flexibleAppend(
     357                "    ", returnName, " = v;\n",
     358                "} while(0);\n");
     359        }
     360
     361        return;
     362    }
     363
     364    auto asMatrixType = [&] (AST::UnnamedType& unnamedType) -> AST::NativeTypeDeclaration* {
     365        auto& realType = unnamedType.unifyNode();
     366        if (!realType.isNativeTypeDeclaration())
     367            return nullptr;
     368
     369        auto& maybeMatrixType = downcast<AST::NativeTypeDeclaration>(realType);
     370        if (maybeMatrixType.isMatrix())
     371            return &maybeMatrixType;
     372
     373        return nullptr;
     374    };
    315375
    316376    if (nativeFunctionDeclaration.isOperator()) {
    317377        auto operatorName = nativeFunctionDeclaration.name().substring("operator"_str.length());
     378        auto firstParameterType = typeNamer.mangledNameForType(*nativeFunctionDeclaration.parameters()[0]->type());
    318379        if (nativeFunctionDeclaration.parameters().size() == 1) {
    319             auto metalParameterName = typeNamer.mangledNameForType(*nativeFunctionDeclaration.parameters()[0]->type());
    320             stringBuilder.flexibleAppend(
    321                 "{\n", metalParameterName, " x = ", args[0], ";\n",
    322                 returnName, " = ", operatorName, "x;\n}\n");
     380            if (auto* matrixType = asMatrixType(nativeFunctionDeclaration.type())) {
     381                stringBuilder.flexibleAppend(
     382                    "{\n", firstParameterType, " x = ", args[0], ";\n",
     383                    "for (size_t i = 0; i < x.size(); ++i) x[i] = ", operatorName, "x[i];\n",
     384                    returnName, " = x;\n}\n");
     385            } else {
     386                stringBuilder.flexibleAppend(
     387                    "{\n", firstParameterType, " x = ", args[0], ";\n",
     388                    returnName, " = ", operatorName, "x;\n}\n");
     389            }
    323390            return;
    324391        }
    325392
    326393        ASSERT(nativeFunctionDeclaration.parameters().size() == 2);
    327         stringBuilder.flexibleAppend(
    328             returnName, " = ", args[0], ' ', operatorName, ' ', args[1], ";\n");
     394        auto secondParameterType = typeNamer.mangledNameForType(*nativeFunctionDeclaration.parameters()[1]->type());
     395        if (auto* leftMatrix = asMatrixType(*nativeFunctionDeclaration.parameters()[0]->type())) {
     396            if (auto* rightMatrix = asMatrixType(*nativeFunctionDeclaration.parameters()[1]->type())) {
     397                // matrix <op> matrix
     398                stringBuilder.flexibleAppend(
     399                    "{\n", firstParameterType, " x;\n",
     400                    "for (size_t i = 0; i < x.size(); ++i) x[i] = ", args[0], "[i] ", operatorName, ' ', args[1], "[i];\n",
     401                    returnName, " = x;\n}\n");
     402            } else {
     403                // matrix <op> scalar
     404                stringBuilder.flexibleAppend(
     405                    "{\n", firstParameterType, " x;\n",
     406                    "for (size_t i = 0; i < x.size(); ++i) x[i] = ", args[0], "[i] ", operatorName, ' ', args[1], ";\n",
     407                    returnName, " = x;\n}\n");
     408            }
     409        } else if (auto* rightMatrix = asMatrixType(*nativeFunctionDeclaration.parameters()[1]->type())) {
     410            ASSERT(!asMatrixType(*nativeFunctionDeclaration.parameters()[0]->type()));
     411            // scalar <op> matrix
     412            stringBuilder.flexibleAppend(
     413                "{\n", secondParameterType, " x;\n",
     414                "for (size_t i = 0; i < x.size(); ++i) x[i] = ", args[0], ' ', operatorName, ' ', args[1], "[i];\n",
     415                returnName, " = x;\n}\n");
     416        } else {
     417            // scalar <op> scalar
     418            // vector <op> vector
     419            // vector <op> scalar
     420            // scalar <op> vector
     421            stringBuilder.flexibleAppend(
     422                returnName, " = ", args[0], ' ', operatorName, ' ', args[1], ";\n");
     423        }
     424
    329425        return;
    330426    }
     
    353449        || nativeFunctionDeclaration.name() == "asint"
    354450        || nativeFunctionDeclaration.name() == "asuint"
    355         || nativeFunctionDeclaration.name() == "asfloat") {
     451        || nativeFunctionDeclaration.name() == "asfloat"
     452        || nativeFunctionDeclaration.name() == "length") {
    356453        ASSERT(nativeFunctionDeclaration.parameters().size() == 1);
    357454        stringBuilder.flexibleAppend(
     
    364461        stringBuilder.flexibleAppend(
    365462            returnName, " = ", nativeFunctionDeclaration.name(), "(", args[0], ", ", args[1], ");\n");
     463        return;
     464    }
     465
     466    if (nativeFunctionDeclaration.name() == "clamp") {
     467        ASSERT(nativeFunctionDeclaration.parameters().size() == 3);
     468        if (asMatrixType(nativeFunctionDeclaration.type())) {
     469            auto metalReturnType = typeNamer.mangledNameForType(nativeFunctionDeclaration.type());
     470            stringBuilder.flexibleAppend(
     471                "{\n", metalReturnType, " x;\n",
     472                "for (size_t i = 0; i < x.size(); ++i) x[i] = clamp(", args[0], "[i], ", args[1], "[i], ", args[2], "[i]);",
     473                returnName, " = x;\n}\n");
     474        } else {
     475            stringBuilder.flexibleAppend(
     476                returnName, " = clamp(", args[0], ", ", args[1], ", ", args[2], ");\n");
     477        }
    366478        return;
    367479    }
  • trunk/Source/WebCore/Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt

    r248078 r248730  
    24492449
    24502450/* Functions named operator[]= */
    2451 bool2 operator[]=(bool2 v, uint index, bool a) {
    2452     switch (index) {
    2453         case 0:
    2454             v.x = a;
    2455             break;
    2456         case 1:
    2457             v.y = a;
    2458             break;
    2459         default:
    2460             break;
    2461     }
    2462     return v;
    2463 }
    2464 bool3 operator[]=(bool3 v, uint index, bool a) {
    2465     switch (index) {
    2466         case 0:
    2467             v.x = a;
    2468             break;
    2469         case 1:
    2470             v.y = a;
    2471             break;
    2472         case 2:
    2473             v.z = a;
    2474             break;
    2475         default:
    2476             break;
    2477     }
    2478     return v;
    2479 }
    2480 bool4 operator[]=(bool4 v, uint index, bool a) {
    2481     switch (index) {
    2482         case 0:
    2483             v.x = a;
    2484             break;
    2485         case 1:
    2486             v.y = a;
    2487             break;
    2488         case 2:
    2489             v.z = a;
    2490             break;
    2491         case 3:
    2492             v.w = a;
    2493             break;
    2494         default:
    2495             break;
    2496     }
    2497     return v;
    2498 }
    2499 uint2 operator[]=(uint2 v, uint index, uint a) {
    2500     switch (index) {
    2501         case 0:
    2502             v.x = a;
    2503             break;
    2504         case 1:
    2505             v.y = a;
    2506             break;
    2507         default:
    2508             break;
    2509     }
    2510     return v;
    2511 }
    2512 uint3 operator[]=(uint3 v, uint index, uint a) {
    2513     switch (index) {
    2514         case 0:
    2515             v.x = a;
    2516             break;
    2517         case 1:
    2518             v.y = a;
    2519             break;
    2520         case 2:
    2521             v.z = a;
    2522             break;
    2523         default:
    2524             break;
    2525     }
    2526     return v;
    2527 }
    2528 uint4 operator[]=(uint4 v, uint index, uint a) {
    2529     switch (index) {
    2530         case 0:
    2531             v.x = a;
    2532             break;
    2533         case 1:
    2534             v.y = a;
    2535             break;
    2536         case 2:
    2537             v.z = a;
    2538             break;
    2539         case 3:
    2540             v.w = a;
    2541             break;
    2542         default:
    2543             break;
    2544     }
    2545     return v;
    2546 }
    2547 int2 operator[]=(int2 v, uint index, int a) {
    2548     switch (index) {
    2549         case 0:
    2550             v.x = a;
    2551             break;
    2552         case 1:
    2553             v.y = a;
    2554             break;
    2555         default:
    2556             break;
    2557     }
    2558     return v;
    2559 }
    2560 int3 operator[]=(int3 v, uint index, int a) {
    2561     switch (index) {
    2562         case 0:
    2563             v.x = a;
    2564             break;
    2565         case 1:
    2566             v.y = a;
    2567             break;
    2568         case 2:
    2569             v.z = a;
    2570             break;
    2571         default:
    2572             break;
    2573     }
    2574     return v;
    2575 }
    2576 int4 operator[]=(int4 v, uint index, int a) {
    2577     switch (index) {
    2578         case 0:
    2579             v.x = a;
    2580             break;
    2581         case 1:
    2582             v.y = a;
    2583             break;
    2584         case 2:
    2585             v.z = a;
    2586             break;
    2587         case 3:
    2588             v.w = a;
    2589             break;
    2590         default:
    2591             break;
    2592     }
    2593     return v;
    2594 }
    2595 float2 operator[]=(float2 v, uint index, float a) {
    2596     switch (index) {
    2597         case 0:
    2598             v.x = a;
    2599             break;
    2600         case 1:
    2601             v.y = a;
    2602             break;
    2603         default:
    2604             break;
    2605     }
    2606     return v;
    2607 }
    2608 float3 operator[]=(float3 v, uint index, float a) {
    2609     switch (index) {
    2610         case 0:
    2611             v.x = a;
    2612             break;
    2613         case 1:
    2614             v.y = a;
    2615             break;
    2616         case 2:
    2617             v.z = a;
    2618             break;
    2619         default:
    2620             break;
    2621     }
    2622     return v;
    2623 }
    2624 float4 operator[]=(float4 v, uint index, float a) {
    2625     switch (index) {
    2626         case 0:
    2627             v.x = a;
    2628             break;
    2629         case 1:
    2630             v.y = a;
    2631             break;
    2632         case 2:
    2633             v.z = a;
    2634             break;
    2635         case 3:
    2636             v.w = a;
    2637             break;
    2638         default:
    2639             break;
    2640     }
    2641     return v;
    2642 }
    2643 
     2451native bool2 operator[]=(bool2, uint, bool);
     2452native bool3 operator[]=(bool3, uint, bool);
     2453native bool4 operator[]=(bool4, uint, bool);
     2454native uint2 operator[]=(uint2, uint, uint);
     2455native uint3 operator[]=(uint3, uint, uint);
     2456native uint4 operator[]=(uint4, uint, uint);
     2457native int2 operator[]=(int2, uint, int);
     2458native int3 operator[]=(int3, uint, int);
     2459native int4 operator[]=(int4, uint, int);
     2460native float2 operator[]=(float2, uint, float);
     2461native float3 operator[]=(float3, uint, float);
     2462native float4 operator[]=(float4, uint, float);
    26442463native float2x2 operator[]=(float2x2, uint, float2);
    26452464native float2x3 operator[]=(float2x3, uint, float3);
     
    31582977
    31592978/* Functions named length */
    3160 float length(float x) {
    3161     return sqrt(dot(x, x));
    3162 }
    3163 float length(float2 x) {
    3164     return sqrt(dot(x, x));
    3165 }
    3166 float length(float3 x) {
    3167     return sqrt(dot(x, x));
    3168 }
    3169 float length(float4 x) {
    3170     return sqrt(dot(x, x));
    3171 }
     2979native float length(float);
     2980native float length(float2);
     2981native float length(float3);
     2982native float length(float4);
    31722983
    31732984
     
    1118810999
    1118911000/* Functions named operator[] */
    11190 bool operator[](bool2 v, uint index) {
    11191     switch (index) {
    11192         case 0:
    11193             return v.x;
    11194         case 1:
    11195             return v.y;
    11196         default:
    11197             break;
    11198     }
    11199     bool result;
    11200     return result;
    11201 }
    11202 bool operator[](bool3 v, uint index) {
    11203     switch (index) {
    11204         case 0:
    11205             return v.x;
    11206         case 1:
    11207             return v.y;
    11208         case 2:
    11209             return v.z;
    11210         default:
    11211             break;
    11212     }
    11213     bool result;
    11214     return result;
    11215 }
    11216 bool operator[](bool4 v, uint index) {
    11217     switch (index) {
    11218         case 0:
    11219             return v.x;
    11220         case 1:
    11221             return v.y;
    11222         case 2:
    11223             return v.z;
    11224         case 3:
    11225             return v.w;
    11226         default:
    11227             break;
    11228     }
    11229     bool result;
    11230     return result;
    11231 }
    11232 uint operator[](uint2 v, uint index) {
    11233     switch (index) {
    11234         case 0:
    11235             return v.x;
    11236         case 1:
    11237             return v.y;
    11238         default:
    11239             break;
    11240     }
    11241     uint result;
    11242     return result;
    11243 }
    11244 uint operator[](uint3 v, uint index) {
    11245     switch (index) {
    11246         case 0:
    11247             return v.x;
    11248         case 1:
    11249             return v.y;
    11250         case 2:
    11251             return v.z;
    11252         default:
    11253             break;
    11254     }
    11255     uint result;
    11256     return result;
    11257 }
    11258 uint operator[](uint4 v, uint index) {
    11259     switch (index) {
    11260         case 0:
    11261             return v.x;
    11262         case 1:
    11263             return v.y;
    11264         case 2:
    11265             return v.z;
    11266         case 3:
    11267             return v.w;
    11268         default:
    11269             break;
    11270     }
    11271     uint result;
    11272     return result;
    11273 }
    11274 int operator[](int2 v, uint index) {
    11275     switch (index) {
    11276         case 0:
    11277             return v.x;
    11278         case 1:
    11279             return v.y;
    11280         default:
    11281             break;
    11282     }
    11283     int result;
    11284     return result;
    11285 }
    11286 int operator[](int3 v, uint index) {
    11287     switch (index) {
    11288         case 0:
    11289             return v.x;
    11290         case 1:
    11291             return v.y;
    11292         case 2:
    11293             return v.z;
    11294         default:
    11295             break;
    11296     }
    11297     int result;
    11298     return result;
    11299 }
    11300 int operator[](int4 v, uint index) {
    11301     switch (index) {
    11302         case 0:
    11303             return v.x;
    11304         case 1:
    11305             return v.y;
    11306         case 2:
    11307             return v.z;
    11308         case 3:
    11309             return v.w;
    11310         default:
    11311             break;
    11312     }
    11313     int result;
    11314     return result;
    11315 }
    11316 float operator[](float2 v, uint index) {
    11317     switch (index) {
    11318         case 0:
    11319             return v.x;
    11320         case 1:
    11321             return v.y;
    11322         default:
    11323             break;
    11324     }
    11325     float result;
    11326     return result;
    11327 }
    11328 float operator[](float3 v, uint index) {
    11329     switch (index) {
    11330         case 0:
    11331             return v.x;
    11332         case 1:
    11333             return v.y;
    11334         case 2:
    11335             return v.z;
    11336         default:
    11337             break;
    11338     }
    11339     float result;
    11340     return result;
    11341 }
    11342 float operator[](float4 v, uint index) {
    11343     switch (index) {
    11344         case 0:
    11345             return v.x;
    11346         case 1:
    11347             return v.y;
    11348         case 2:
    11349             return v.z;
    11350         case 3:
    11351             return v.w;
    11352         default:
    11353             break;
    11354     }
    11355     float result;
    11356     return result;
    11357 }
     11001native bool operator[](bool2, uint);
     11002native bool operator[](bool3, uint);
     11003native bool operator[](bool4, uint);
     11004native uint operator[](uint2, uint);
     11005native uint operator[](uint3, uint);
     11006native uint operator[](uint4, uint);
     11007native int operator[](int2, uint);
     11008native int operator[](int3, uint);
     11009native int operator[](int4, uint);
     11010native float operator[](float2, uint);
     11011native float operator[](float3, uint);
     11012native float operator[](float4, uint);
    1135811013native float2 operator[](float2x2, uint);
    1135911014native float3 operator[](float2x3, uint);
     
    1608615741native uint operator*(uint, uint);
    1608715742native float operator*(float, float);
    16088 uint2 operator*(uint2 a, uint2 b) {
    16089     uint2 result;
    16090     result[0] = a[0] * b[0];
    16091     result[1] = a[1] * b[1];
    16092     return result;
    16093 }
    16094 uint2 operator*(uint2 a, uint b) {
    16095     uint2 result;
    16096     result[0] = a[0] * b;
    16097     result[1] = a[1] * b;
    16098     return result;
    16099 }
    16100 uint2 operator*(uint a, uint2 b) {
    16101     uint2 result;
    16102     result[0] = a * b[0];
    16103     result[1] = a * b[1];
    16104     return result;
    16105 }
    16106 uint3 operator*(uint3 a, uint3 b) {
    16107     uint3 result;
    16108     result[0] = a[0] * b[0];
    16109     result[1] = a[1] * b[1];
    16110     result[2] = a[2] * b[2];
    16111     return result;
    16112 }
    16113 uint3 operator*(uint3 a, uint b) {
    16114     uint3 result;
    16115     result[0] = a[0] * b;
    16116     result[1] = a[1] * b;
    16117     result[2] = a[2] * b;
    16118     return result;
    16119 }
    16120 uint3 operator*(uint a, uint3 b) {
    16121     uint3 result;
    16122     result[0] = a * b[0];
    16123     result[1] = a * b[1];
    16124     result[2] = a * b[2];
    16125     return result;
    16126 }
    16127 uint4 operator*(uint4 a, uint4 b) {
    16128     uint4 result;
    16129     result[0] = a[0] * b[0];
    16130     result[1] = a[1] * b[1];
    16131     result[2] = a[2] * b[2];
    16132     result[3] = a[3] * b[3];
    16133     return result;
    16134 }
    16135 uint4 operator*(uint4 a, uint b) {
    16136     uint4 result;
    16137     result[0] = a[0] * b;
    16138     result[1] = a[1] * b;
    16139     result[2] = a[2] * b;
    16140     result[3] = a[3] * b;
    16141     return result;
    16142 }
    16143 uint4 operator*(uint a, uint4 b) {
    16144     uint4 result;
    16145     result[0] = a * b[0];
    16146     result[1] = a * b[1];
    16147     result[2] = a * b[2];
    16148     result[3] = a * b[3];
    16149     return result;
    16150 }
    16151 int2 operator*(int2 a, int2 b) {
    16152     int2 result;
    16153     result[0] = a[0] * b[0];
    16154     result[1] = a[1] * b[1];
    16155     return result;
    16156 }
    16157 int2 operator*(int2 a, int b) {
    16158     int2 result;
    16159     result[0] = a[0] * b;
    16160     result[1] = a[1] * b;
    16161     return result;
    16162 }
    16163 int2 operator*(int a, int2 b) {
    16164     int2 result;
    16165     result[0] = a * b[0];
    16166     result[1] = a * b[1];
    16167     return result;
    16168 }
    16169 int3 operator*(int3 a, int3 b) {
    16170     int3 result;
    16171     result[0] = a[0] * b[0];
    16172     result[1] = a[1] * b[1];
    16173     result[2] = a[2] * b[2];
    16174     return result;
    16175 }
    16176 int3 operator*(int3 a, int b) {
    16177     int3 result;
    16178     result[0] = a[0] * b;
    16179     result[1] = a[1] * b;
    16180     result[2] = a[2] * b;
    16181     return result;
    16182 }
    16183 int3 operator*(int a, int3 b) {
    16184     int3 result;
    16185     result[0] = a * b[0];
    16186     result[1] = a * b[1];
    16187     result[2] = a * b[2];
    16188     return result;
    16189 }
    16190 int4 operator*(int4 a, int4 b) {
    16191     int4 result;
    16192     result[0] = a[0] * b[0];
    16193     result[1] = a[1] * b[1];
    16194     result[2] = a[2] * b[2];
    16195     result[3] = a[3] * b[3];
    16196     return result;
    16197 }
    16198 int4 operator*(int4 a, int b) {
    16199     int4 result;
    16200     result[0] = a[0] * b;
    16201     result[1] = a[1] * b;
    16202     result[2] = a[2] * b;
    16203     result[3] = a[3] * b;
    16204     return result;
    16205 }
    16206 int4 operator*(int a, int4 b) {
    16207     int4 result;
    16208     result[0] = a * b[0];
    16209     result[1] = a * b[1];
    16210     result[2] = a * b[2];
    16211     result[3] = a * b[3];
    16212     return result;
    16213 }
    16214 float2 operator*(float2 a, float2 b) {
    16215     float2 result;
    16216     result[0] = a[0] * b[0];
    16217     result[1] = a[1] * b[1];
    16218     return result;
    16219 }
    16220 float2 operator*(float2 a, float b) {
    16221     float2 result;
    16222     result[0] = a[0] * b;
    16223     result[1] = a[1] * b;
    16224     return result;
    16225 }
    16226 float2 operator*(float a, float2 b) {
    16227     float2 result;
    16228     result[0] = a * b[0];
    16229     result[1] = a * b[1];
    16230     return result;
    16231 }
    16232 float3 operator*(float3 a, float3 b) {
    16233     float3 result;
    16234     result[0] = a[0] * b[0];
    16235     result[1] = a[1] * b[1];
    16236     result[2] = a[2] * b[2];
    16237     return result;
    16238 }
    16239 float3 operator*(float3 a, float b) {
    16240     float3 result;
    16241     result[0] = a[0] * b;
    16242     result[1] = a[1] * b;
    16243     result[2] = a[2] * b;
    16244     return result;
    16245 }
    16246 float3 operator*(float a, float3 b) {
    16247     float3 result;
    16248     result[0] = a * b[0];
    16249     result[1] = a * b[1];
    16250     result[2] = a * b[2];
    16251     return result;
    16252 }
    16253 float4 operator*(float4 a, float4 b) {
    16254     float4 result;
    16255     result[0] = a[0] * b[0];
    16256     result[1] = a[1] * b[1];
    16257     result[2] = a[2] * b[2];
    16258     result[3] = a[3] * b[3];
    16259     return result;
    16260 }
    16261 float4 operator*(float4 a, float b) {
    16262     float4 result;
    16263     result[0] = a[0] * b;
    16264     result[1] = a[1] * b;
    16265     result[2] = a[2] * b;
    16266     result[3] = a[3] * b;
    16267     return result;
    16268 }
    16269 float4 operator*(float a, float4 b) {
    16270     float4 result;
    16271     result[0] = a * b[0];
    16272     result[1] = a * b[1];
    16273     result[2] = a * b[2];
    16274     result[3] = a * b[3];
    16275     return result;
    16276 }
    16277 float2x2 operator*(float2x2 a, float2x2 b) {
    16278     float2x2 result;
    16279     result[0][0] = a[0][0] * b[0][0];
    16280     result[0][1] = a[0][1] * b[0][1];
    16281     result[1][0] = a[1][0] * b[1][0];
    16282     result[1][1] = a[1][1] * b[1][1];
    16283     return result;
    16284 }
    16285 float2x2 operator*(float2x2 a, float b) {
    16286     float2x2 result;
    16287     result[0][0] = a[0][0] * b;
    16288     result[0][1] = a[0][1] * b;
    16289     result[1][0] = a[1][0] * b;
    16290     result[1][1] = a[1][1] * b;
    16291     return result;
    16292 }
    16293 float2x2 operator*(float a, float2x2 b) {
    16294     float2x2 result;
    16295     result[0][0] = a * b[0][0];
    16296     result[0][1] = a * b[0][1];
    16297     result[1][0] = a * b[1][0];
    16298     result[1][1] = a * b[1][1];
    16299     return result;
    16300 }
    16301 float2x3 operator*(float2x3 a, float2x3 b) {
    16302     float2x3 result;
    16303     result[0][0] = a[0][0] * b[0][0];
    16304     result[0][1] = a[0][1] * b[0][1];
    16305     result[0][2] = a[0][2] * b[0][2];
    16306     result[1][0] = a[1][0] * b[1][0];
    16307     result[1][1] = a[1][1] * b[1][1];
    16308     result[1][2] = a[1][2] * b[1][2];
    16309     return result;
    16310 }
    16311 float2x3 operator*(float2x3 a, float b) {
    16312     float2x3 result;
    16313     result[0][0] = a[0][0] * b;
    16314     result[0][1] = a[0][1] * b;
    16315     result[0][2] = a[0][2] * b;
    16316     result[1][0] = a[1][0] * b;
    16317     result[1][1] = a[1][1] * b;
    16318     result[1][2] = a[1][2] * b;
    16319     return result;
    16320 }
    16321 float2x3 operator*(float a, float2x3 b) {
    16322     float2x3 result;
    16323     result[0][0] = a * b[0][0];
    16324     result[0][1] = a * b[0][1];
    16325     result[0][2] = a * b[0][2];
    16326     result[1][0] = a * b[1][0];
    16327     result[1][1] = a * b[1][1];
    16328     result[1][2] = a * b[1][2];
    16329     return result;
    16330 }
    16331 float2x4 operator*(float2x4 a, float2x4 b) {
    16332     float2x4 result;
    16333     result[0][0] = a[0][0] * b[0][0];
    16334     result[0][1] = a[0][1] * b[0][1];
    16335     result[0][2] = a[0][2] * b[0][2];
    16336     result[0][3] = a[0][3] * b[0][3];
    16337     result[1][0] = a[1][0] * b[1][0];
    16338     result[1][1] = a[1][1] * b[1][1];
    16339     result[1][2] = a[1][2] * b[1][2];
    16340     result[1][3] = a[1][3] * b[1][3];
    16341     return result;
    16342 }
    16343 float2x4 operator*(float2x4 a, float b) {
    16344     float2x4 result;
    16345     result[0][0] = a[0][0] * b;
    16346     result[0][1] = a[0][1] * b;
    16347     result[0][2] = a[0][2] * b;
    16348     result[0][3] = a[0][3] * b;
    16349     result[1][0] = a[1][0] * b;
    16350     result[1][1] = a[1][1] * b;
    16351     result[1][2] = a[1][2] * b;
    16352     result[1][3] = a[1][3] * b;
    16353     return result;
    16354 }
    16355 float2x4 operator*(float a, float2x4 b) {
    16356     float2x4 result;
    16357     result[0][0] = a * b[0][0];
    16358     result[0][1] = a * b[0][1];
    16359     result[0][2] = a * b[0][2];
    16360     result[0][3] = a * b[0][3];
    16361     result[1][0] = a * b[1][0];
    16362     result[1][1] = a * b[1][1];
    16363     result[1][2] = a * b[1][2];
    16364     result[1][3] = a * b[1][3];
    16365     return result;
    16366 }
    16367 float3x2 operator*(float3x2 a, float3x2 b) {
    16368     float3x2 result;
    16369     result[0][0] = a[0][0] * b[0][0];
    16370     result[0][1] = a[0][1] * b[0][1];
    16371     result[1][0] = a[1][0] * b[1][0];
    16372     result[1][1] = a[1][1] * b[1][1];
    16373     result[2][0] = a[2][0] * b[2][0];
    16374     result[2][1] = a[2][1] * b[2][1];
    16375     return result;
    16376 }
    16377 float3x2 operator*(float3x2 a, float b) {
    16378     float3x2 result;
    16379     result[0][0] = a[0][0] * b;
    16380     result[0][1] = a[0][1] * b;
    16381     result[1][0] = a[1][0] * b;
    16382     result[1][1] = a[1][1] * b;
    16383     result[2][0] = a[2][0] * b;
    16384     result[2][1] = a[2][1] * b;
    16385     return result;
    16386 }
    16387 float3x2 operator*(float a, float3x2 b) {
    16388     float3x2 result;
    16389     result[0][0] = a * b[0][0];
    16390     result[0][1] = a * b[0][1];
    16391     result[1][0] = a * b[1][0];
    16392     result[1][1] = a * b[1][1];
    16393     result[2][0] = a * b[2][0];
    16394     result[2][1] = a * b[2][1];
    16395     return result;
    16396 }
    16397 float3x3 operator*(float3x3 a, float3x3 b) {
    16398     float3x3 result;
    16399     result[0][0] = a[0][0] * b[0][0];
    16400     result[0][1] = a[0][1] * b[0][1];
    16401     result[0][2] = a[0][2] * b[0][2];
    16402     result[1][0] = a[1][0] * b[1][0];
    16403     result[1][1] = a[1][1] * b[1][1];
    16404     result[1][2] = a[1][2] * b[1][2];
    16405     result[2][0] = a[2][0] * b[2][0];
    16406     result[2][1] = a[2][1] * b[2][1];
    16407     result[2][2] = a[2][2] * b[2][2];
    16408     return result;
    16409 }
    16410 float3x3 operator*(float3x3 a, float b) {
    16411     float3x3 result;
    16412     result[0][0] = a[0][0] * b;
    16413     result[0][1] = a[0][1] * b;
    16414     result[0][2] = a[0][2] * b;
    16415     result[1][0] = a[1][0] * b;
    16416     result[1][1] = a[1][1] * b;
    16417     result[1][2] = a[1][2] * b;
    16418     result[2][0] = a[2][0] * b;
    16419     result[2][1] = a[2][1] * b;
    16420     result[2][2] = a[2][2] * b;
    16421     return result;
    16422 }
    16423 float3x3 operator*(float a, float3x3 b) {
    16424     float3x3 result;
    16425     result[0][0] = a * b[0][0];
    16426     result[0][1] = a * b[0][1];
    16427     result[0][2] = a * b[0][2];
    16428     result[1][0] = a * b[1][0];
    16429     result[1][1] = a * b[1][1];
    16430     result[1][2] = a * b[1][2];
    16431     result[2][0] = a * b[2][0];
    16432     result[2][1] = a * b[2][1];
    16433     result[2][2] = a * b[2][2];
    16434     return result;
    16435 }
    16436 float3x4 operator*(float3x4 a, float3x4 b) {
    16437     float3x4 result;
    16438     result[0][0] = a[0][0] * b[0][0];
    16439     result[0][1] = a[0][1] * b[0][1];
    16440     result[0][2] = a[0][2] * b[0][2];
    16441     result[0][3] = a[0][3] * b[0][3];
    16442     result[1][0] = a[1][0] * b[1][0];
    16443     result[1][1] = a[1][1] * b[1][1];
    16444     result[1][2] = a[1][2] * b[1][2];
    16445     result[1][3] = a[1][3] * b[1][3];
    16446     result[2][0] = a[2][0] * b[2][0];
    16447     result[2][1] = a[2][1] * b[2][1];
    16448     result[2][2] = a[2][2] * b[2][2];
    16449     result[2][3] = a[2][3] * b[2][3];
    16450     return result;
    16451 }
    16452 float3x4 operator*(float3x4 a, float b) {
    16453     float3x4 result;
    16454     result[0][0] = a[0][0] * b;
    16455     result[0][1] = a[0][1] * b;
    16456     result[0][2] = a[0][2] * b;
    16457     result[0][3] = a[0][3] * b;
    16458     result[1][0] = a[1][0] * b;
    16459     result[1][1] = a[1][1] * b;
    16460     result[1][2] = a[1][2] * b;
    16461     result[1][3] = a[1][3] * b;
    16462     result[2][0] = a[2][0] * b;
    16463     result[2][1] = a[2][1] * b;
    16464     result[2][2] = a[2][2] * b;
    16465     result[2][3] = a[2][3] * b;
    16466     return result;
    16467 }
    16468 float3x4 operator*(float a, float3x4 b) {
    16469     float3x4 result;
    16470     result[0][0] = a * b[0][0];
    16471     result[0][1] = a * b[0][1];
    16472     result[0][2] = a * b[0][2];
    16473     result[0][3] = a * b[0][3];
    16474     result[1][0] = a * b[1][0];
    16475     result[1][1] = a * b[1][1];
    16476     result[1][2] = a * b[1][2];
    16477     result[1][3] = a * b[1][3];
    16478     result[2][0] = a * b[2][0];
    16479     result[2][1] = a * b[2][1];
    16480     result[2][2] = a * b[2][2];
    16481     result[2][3] = a * b[2][3];
    16482     return result;
    16483 }
    16484 float4x2 operator*(float4x2 a, float4x2 b) {
    16485     float4x2 result;
    16486     result[0][0] = a[0][0] * b[0][0];
    16487     result[0][1] = a[0][1] * b[0][1];
    16488     result[1][0] = a[1][0] * b[1][0];
    16489     result[1][1] = a[1][1] * b[1][1];
    16490     result[2][0] = a[2][0] * b[2][0];
    16491     result[2][1] = a[2][1] * b[2][1];
    16492     result[3][0] = a[3][0] * b[3][0];
    16493     result[3][1] = a[3][1] * b[3][1];
    16494     return result;
    16495 }
    16496 float4x2 operator*(float4x2 a, float b) {
    16497     float4x2 result;
    16498     result[0][0] = a[0][0] * b;
    16499     result[0][1] = a[0][1] * b;
    16500     result[1][0] = a[1][0] * b;
    16501     result[1][1] = a[1][1] * b;
    16502     result[2][0] = a[2][0] * b;
    16503     result[2][1] = a[2][1] * b;
    16504     result[3][0] = a[3][0] * b;
    16505     result[3][1] = a[3][1] * b;
    16506     return result;
    16507 }
    16508 float4x2 operator*(float a, float4x2 b) {
    16509     float4x2 result;
    16510     result[0][0] = a * b[0][0];
    16511     result[0][1] = a * b[0][1];
    16512     result[1][0] = a * b[1][0];
    16513     result[1][1] = a * b[1][1];
    16514     result[2][0] = a * b[2][0];
    16515     result[2][1] = a * b[2][1];
    16516     result[3][0] = a * b[3][0];
    16517     result[3][1] = a * b[3][1];
    16518     return result;
    16519 }
    16520 float4x3 operator*(float4x3 a, float4x3 b) {
    16521     float4x3 result;
    16522     result[0][0] = a[0][0] * b[0][0];
    16523     result[0][1] = a[0][1] * b[0][1];
    16524     result[0][2] = a[0][2] * b[0][2];
    16525     result[1][0] = a[1][0] * b[1][0];
    16526     result[1][1] = a[1][1] * b[1][1];
    16527     result[1][2] = a[1][2] * b[1][2];
    16528     result[2][0] = a[2][0] * b[2][0];
    16529     result[2][1] = a[2][1] * b[2][1];
    16530     result[2][2] = a[2][2] * b[2][2];
    16531     result[3][0] = a[3][0] * b[3][0];
    16532     result[3][1] = a[3][1] * b[3][1];
    16533     result[3][2] = a[3][2] * b[3][2];
    16534     return result;
    16535 }
    16536 float4x3 operator*(float4x3 a, float b) {
    16537     float4x3 result;
    16538     result[0][0] = a[0][0] * b;
    16539     result[0][1] = a[0][1] * b;
    16540     result[0][2] = a[0][2] * b;
    16541     result[1][0] = a[1][0] * b;
    16542     result[1][1] = a[1][1] * b;
    16543     result[1][2] = a[1][2] * b;
    16544     result[2][0] = a[2][0] * b;
    16545     result[2][1] = a[2][1] * b;
    16546     result[2][2] = a[2][2] * b;
    16547     result[3][0] = a[3][0] * b;
    16548     result[3][1] = a[3][1] * b;
    16549     result[3][2] = a[3][2] * b;
    16550     return result;
    16551 }
    16552 float4x3 operator*(float a, float4x3 b) {
    16553     float4x3 result;
    16554     result[0][0] = a * b[0][0];
    16555     result[0][1] = a * b[0][1];
    16556     result[0][2] = a * b[0][2];
    16557     result[1][0] = a * b[1][0];
    16558     result[1][1] = a * b[1][1];
    16559     result[1][2] = a * b[1][2];
    16560     result[2][0] = a * b[2][0];
    16561     result[2][1] = a * b[2][1];
    16562     result[2][2] = a * b[2][2];
    16563     result[3][0] = a * b[3][0];
    16564     result[3][1] = a * b[3][1];
    16565     result[3][2] = a * b[3][2];
    16566     return result;
    16567 }
    16568 float4x4 operator*(float4x4 a, float4x4 b) {
    16569     float4x4 result;
    16570     result[0][0] = a[0][0] * b[0][0];
    16571     result[0][1] = a[0][1] * b[0][1];
    16572     result[0][2] = a[0][2] * b[0][2];
    16573     result[0][3] = a[0][3] * b[0][3];
    16574     result[1][0] = a[1][0] * b[1][0];
    16575     result[1][1] = a[1][1] * b[1][1];
    16576     result[1][2] = a[1][2] * b[1][2];
    16577     result[1][3] = a[1][3] * b[1][3];
    16578     result[2][0] = a[2][0] * b[2][0];
    16579     result[2][1] = a[2][1] * b[2][1];
    16580     result[2][2] = a[2][2] * b[2][2];
    16581     result[2][3] = a[2][3] * b[2][3];
    16582     result[3][0] = a[3][0] * b[3][0];
    16583     result[3][1] = a[3][1] * b[3][1];
    16584     result[3][2] = a[3][2] * b[3][2];
    16585     result[3][3] = a[3][3] * b[3][3];
    16586     return result;
    16587 }
    16588 float4x4 operator*(float4x4 a, float b) {
    16589     float4x4 result;
    16590     result[0][0] = a[0][0] * b;
    16591     result[0][1] = a[0][1] * b;
    16592     result[0][2] = a[0][2] * b;
    16593     result[0][3] = a[0][3] * b;
    16594     result[1][0] = a[1][0] * b;
    16595     result[1][1] = a[1][1] * b;
    16596     result[1][2] = a[1][2] * b;
    16597     result[1][3] = a[1][3] * b;
    16598     result[2][0] = a[2][0] * b;
    16599     result[2][1] = a[2][1] * b;
    16600     result[2][2] = a[2][2] * b;
    16601     result[2][3] = a[2][3] * b;
    16602     result[3][0] = a[3][0] * b;
    16603     result[3][1] = a[3][1] * b;
    16604     result[3][2] = a[3][2] * b;
    16605     result[3][3] = a[3][3] * b;
    16606     return result;
    16607 }
    16608 float4x4 operator*(float a, float4x4 b) {
    16609     float4x4 result;
    16610     result[0][0] = a * b[0][0];
    16611     result[0][1] = a * b[0][1];
    16612     result[0][2] = a * b[0][2];
    16613     result[0][3] = a * b[0][3];
    16614     result[1][0] = a * b[1][0];
    16615     result[1][1] = a * b[1][1];
    16616     result[1][2] = a * b[1][2];
    16617     result[1][3] = a * b[1][3];
    16618     result[2][0] = a * b[2][0];
    16619     result[2][1] = a * b[2][1];
    16620     result[2][2] = a * b[2][2];
    16621     result[2][3] = a * b[2][3];
    16622     result[3][0] = a * b[3][0];
    16623     result[3][1] = a * b[3][1];
    16624     result[3][2] = a * b[3][2];
    16625     result[3][3] = a * b[3][3];
    16626     return result;
    16627 }
     15743native uint2 operator*(uint2, uint2);
     15744native uint2 operator*(uint2, uint);
     15745native uint2 operator*(uint, uint2);
     15746native uint3 operator*(uint3, uint3);
     15747native uint3 operator*(uint3, uint);
     15748native uint3 operator*(uint, uint3);
     15749native uint4 operator*(uint4, uint4);
     15750native uint4 operator*(uint4, uint);
     15751native uint4 operator*(uint, uint4);
     15752native int2 operator*(int2, int2);
     15753native int2 operator*(int2, int);
     15754native int2 operator*(int, int2);
     15755native int3 operator*(int3, int3);
     15756native int3 operator*(int3, int);
     15757native int3 operator*(int, int3);
     15758native int4 operator*(int4, int4);
     15759native int4 operator*(int4, int);
     15760native int4 operator*(int, int4);
     15761native float2 operator*(float2, float2);
     15762native float2 operator*(float2, float);
     15763native float2 operator*(float, float2);
     15764native float3 operator*(float3, float3);
     15765native float3 operator*(float3, float);
     15766native float3 operator*(float, float3);
     15767native float4 operator*(float4, float4);
     15768native float4 operator*(float4, float);
     15769native float4 operator*(float, float4);
     15770native float2x2 operator*(float2x2, float2x2);
     15771native float2x2 operator*(float2x2, float);
     15772native float2x2 operator*(float, float2x2);
     15773native float2x3 operator*(float2x3, float2x3);
     15774native float2x3 operator*(float2x3, float);
     15775native float2x3 operator*(float, float2x3);
     15776native float2x4 operator*(float2x4, float2x4);
     15777native float2x4 operator*(float2x4, float);
     15778native float2x4 operator*(float, float2x4);
     15779native float3x2 operator*(float3x2, float3x2);
     15780native float3x2 operator*(float3x2, float);
     15781native float3x2 operator*(float, float3x2);
     15782native float3x3 operator*(float3x3, float3x3);
     15783native float3x3 operator*(float3x3, float);
     15784native float3x3 operator*(float, float3x3);
     15785native float3x4 operator*(float3x4, float3x4);
     15786native float3x4 operator*(float3x4, float);
     15787native float3x4 operator*(float, float3x4);
     15788native float4x2 operator*(float4x2, float4x2);
     15789native float4x2 operator*(float4x2, float);
     15790native float4x2 operator*(float, float4x2);
     15791native float4x3 operator*(float4x3, float4x3);
     15792native float4x3 operator*(float4x3, float);
     15793native float4x3 operator*(float, float4x3);
     15794native float4x4 operator*(float4x4, float4x4);
     15795native float4x4 operator*(float4x4, float);
     15796native float4x4 operator*(float, float4x4);
    1662815797
    1662915798/* Functions named cos */
     
    2403823207native int operator-(int);
    2403923208native float operator-(float);
    24040 
    24041 uint2 operator-(uint2 a, uint2 b) {
    24042     uint2 result;
    24043     result[0] = a[0] - b[0];
    24044     result[1] = a[1] - b[1];
    24045     return result;
    24046 }
    24047 uint3 operator-(uint3 a, uint3 b) {
    24048     uint3 result;
    24049     result[0] = a[0] - b[0];
    24050     result[1] = a[1] - b[1];
    24051     result[2] = a[2] - b[2];
    24052     return result;
    24053 }
    24054 uint4 operator-(uint4 a, uint4 b) {
    24055     uint4 result;
    24056     result[0] = a[0] - b[0];
    24057     result[1] = a[1] - b[1];
    24058     result[2] = a[2] - b[2];
    24059     result[3] = a[3] - b[3];
    24060     return result;
    24061 }
    24062 int2 operator-(int2 a, int2 b) {
    24063     int2 result;
    24064     result[0] = a[0] - b[0];
    24065     result[1] = a[1] - b[1];
    24066     return result;
    24067 }
    24068 int3 operator-(int3 a, int3 b) {
    24069     int3 result;
    24070     result[0] = a[0] - b[0];
    24071     result[1] = a[1] - b[1];
    24072     result[2] = a[2] - b[2];
    24073     return result;
    24074 }
    24075 int4 operator-(int4 a, int4 b) {
    24076     int4 result;
    24077     result[0] = a[0] - b[0];
    24078     result[1] = a[1] - b[1];
    24079     result[2] = a[2] - b[2];
    24080     result[3] = a[3] - b[3];
    24081     return result;
    24082 }
    24083 float2 operator-(float2 a, float2 b) {
    24084     float2 result;
    24085     result[0] = a[0] - b[0];
    24086     result[1] = a[1] - b[1];
    24087     return result;
    24088 }
    24089 float3 operator-(float3 a, float3 b) {
    24090     float3 result;
    24091     result[0] = a[0] - b[0];
    24092     result[1] = a[1] - b[1];
    24093     result[2] = a[2] - b[2];
    24094     return result;
    24095 }
    24096 float4 operator-(float4 a, float4 b) {
    24097     float4 result;
    24098     result[0] = a[0] - b[0];
    24099     result[1] = a[1] - b[1];
    24100     result[2] = a[2] - b[2];
    24101     result[3] = a[3] - b[3];
    24102     return result;
    24103 }
    24104 int2 operator-(int2 a) {
    24105     int2 result;
    24106     result[0] = -a[0];
    24107     result[1] = -a[1];
    24108     return result;
    24109 }
    24110 int3 operator-(int3 a) {
    24111     int3 result;
    24112     result[0] = -a[0];
    24113     result[1] = -a[1];
    24114     result[2] = -a[2];
    24115     return result;
    24116 }
    24117 int4 operator-(int4 a) {
    24118     int4 result;
    24119     result[0] = -a[0];
    24120     result[1] = -a[1];
    24121     result[2] = -a[2];
    24122     result[3] = -a[3];
    24123     return result;
    24124 }
    24125 float2 operator-(float2 a) {
    24126     float2 result;
    24127     result[0] = -a[0];
    24128     result[1] = -a[1];
    24129     return result;
    24130 }
    24131 float3 operator-(float3 a) {
    24132     float3 result;
    24133     result[0] = -a[0];
    24134     result[1] = -a[1];
    24135     result[2] = -a[2];
    24136     return result;
    24137 }
    24138 float4 operator-(float4 a) {
    24139     float4 result;
    24140     result[0] = -a[0];
    24141     result[1] = -a[1];
    24142     result[2] = -a[2];
    24143     result[3] = -a[3];
    24144     return result;
    24145 }
    24146 float2x2 operator-(float2x2 a, float2x2 b) {
    24147     float2x2 result;
    24148     result[0][0] = a[0][0] - b[0][0];
    24149     result[0][1] = a[0][1] - b[0][1];
    24150     result[1][0] = a[1][0] - b[1][0];
    24151     result[1][1] = a[1][1] - b[1][1];
    24152     return result;
    24153 }
    24154 float2x2 operator-(float2x2 a) {
    24155     float2x2 result;
    24156     result[0][0] = -a[0][0];
    24157     result[0][1] = -a[0][1];
    24158     result[1][0] = -a[1][0];
    24159     result[1][1] = -a[1][1];
    24160     return result;
    24161 }
    24162 float2x3 operator-(float2x3 a, float2x3 b) {
    24163     float2x3 result;
    24164     result[0][0] = a[0][0] - b[0][0];
    24165     result[0][1] = a[0][1] - b[0][1];
    24166     result[0][2] = a[0][2] - b[0][2];
    24167     result[1][0] = a[1][0] - b[1][0];
    24168     result[1][1] = a[1][1] - b[1][1];
    24169     result[1][2] = a[1][2] - b[1][2];
    24170     return result;
    24171 }
    24172 float2x3 operator-(float2x3 a) {
    24173     float2x3 result;
    24174     result[0][0] = -a[0][0];
    24175     result[0][1] = -a[0][1];
    24176     result[0][2] = -a[0][2];
    24177     result[1][0] = -a[1][0];
    24178     result[1][1] = -a[1][1];
    24179     result[1][2] = -a[1][2];
    24180     return result;
    24181 }
    24182 float2x4 operator-(float2x4 a, float2x4 b) {
    24183     float2x4 result;
    24184     result[0][0] = a[0][0] - b[0][0];
    24185     result[0][1] = a[0][1] - b[0][1];
    24186     result[0][2] = a[0][2] - b[0][2];
    24187     result[0][3] = a[0][3] - b[0][3];
    24188     result[1][0] = a[1][0] - b[1][0];
    24189     result[1][1] = a[1][1] - b[1][1];
    24190     result[1][2] = a[1][2] - b[1][2];
    24191     result[1][3] = a[1][3] - b[1][3];
    24192     return result;
    24193 }
    24194 float2x4 operator-(float2x4 a) {
    24195     float2x4 result;
    24196     result[0][0] = -a[0][0];
    24197     result[0][1] = -a[0][1];
    24198     result[0][2] = -a[0][2];
    24199     result[0][3] = -a[0][3];
    24200     result[1][0] = -a[1][0];
    24201     result[1][1] = -a[1][1];
    24202     result[1][2] = -a[1][2];
    24203     result[1][3] = -a[1][3];
    24204     return result;
    24205 }
    24206 float3x2 operator-(float3x2 a, float3x2 b) {
    24207     float3x2 result;
    24208     result[0][0] = a[0][0] - b[0][0];
    24209     result[0][1] = a[0][1] - b[0][1];
    24210     result[1][0] = a[1][0] - b[1][0];
    24211     result[1][1] = a[1][1] - b[1][1];
    24212     result[2][0] = a[2][0] - b[2][0];
    24213     result[2][1] = a[2][1] - b[2][1];
    24214     return result;
    24215 }
    24216 float3x2 operator-(float3x2 a) {
    24217     float3x2 result;
    24218     result[0][0] = -a[0][0];
    24219     result[0][1] = -a[0][1];
    24220     result[1][0] = -a[1][0];
    24221     result[1][1] = -a[1][1];
    24222     result[2][0] = -a[2][0];
    24223     result[2][1] = -a[2][1];
    24224     return result;
    24225 }
    24226 float3x3 operator-(float3x3 a, float3x3 b) {
    24227     float3x3 result;
    24228     result[0][0] = a[0][0] - b[0][0];
    24229     result[0][1] = a[0][1] - b[0][1];
    24230     result[0][2] = a[0][2] - b[0][2];
    24231     result[1][0] = a[1][0] - b[1][0];
    24232     result[1][1] = a[1][1] - b[1][1];
    24233     result[1][2] = a[1][2] - b[1][2];
    24234     result[2][0] = a[2][0] - b[2][0];
    24235     result[2][1] = a[2][1] - b[2][1];
    24236     result[2][2] = a[2][2] - b[2][2];
    24237     return result;
    24238 }
    24239 float3x3 operator-(float3x3 a) {
    24240     float3x3 result;
    24241     result[0][0] = -a[0][0];
    24242     result[0][1] = -a[0][1];
    24243     result[0][2] = -a[0][2];
    24244     result[1][0] = -a[1][0];
    24245     result[1][1] = -a[1][1];
    24246     result[1][2] = -a[1][2];
    24247     result[2][0] = -a[2][0];
    24248     result[2][1] = -a[2][1];
    24249     result[2][2] = -a[2][2];
    24250     return result;
    24251 }
    24252 float3x4 operator-(float3x4 a, float3x4 b) {
    24253     float3x4 result;
    24254     result[0][0] = a[0][0] - b[0][0];
    24255     result[0][1] = a[0][1] - b[0][1];
    24256     result[0][2] = a[0][2] - b[0][2];
    24257     result[0][3] = a[0][3] - b[0][3];
    24258     result[1][0] = a[1][0] - b[1][0];
    24259     result[1][1] = a[1][1] - b[1][1];
    24260     result[1][2] = a[1][2] - b[1][2];
    24261     result[1][3] = a[1][3] - b[1][3];
    24262     result[2][0] = a[2][0] - b[2][0];
    24263     result[2][1] = a[2][1] - b[2][1];
    24264     result[2][2] = a[2][2] - b[2][2];
    24265     result[2][3] = a[2][3] - b[2][3];
    24266     return result;
    24267 }
    24268 float3x4 operator-(float3x4 a) {
    24269     float3x4 result;
    24270     result[0][0] = -a[0][0];
    24271     result[0][1] = -a[0][1];
    24272     result[0][2] = -a[0][2];
    24273     result[0][3] = -a[0][3];
    24274     result[1][0] = -a[1][0];
    24275     result[1][1] = -a[1][1];
    24276     result[1][2] = -a[1][2];
    24277     result[1][3] = -a[1][3];
    24278     result[2][0] = -a[2][0];
    24279     result[2][1] = -a[2][1];
    24280     result[2][2] = -a[2][2];
    24281     result[2][3] = -a[2][3];
    24282     return result;
    24283 }
    24284 float4x2 operator-(float4x2 a, float4x2 b) {
    24285     float4x2 result;
    24286     result[0][0] = a[0][0] - b[0][0];
    24287     result[0][1] = a[0][1] - b[0][1];
    24288     result[1][0] = a[1][0] - b[1][0];
    24289     result[1][1] = a[1][1] - b[1][1];
    24290     result[2][0] = a[2][0] - b[2][0];
    24291     result[2][1] = a[2][1] - b[2][1];
    24292     result[3][0] = a[3][0] - b[3][0];
    24293     result[3][1] = a[3][1] - b[3][1];
    24294     return result;
    24295 }
    24296 float4x2 operator-(float4x2 a) {
    24297     float4x2 result;
    24298     result[0][0] = -a[0][0];
    24299     result[0][1] = -a[0][1];
    24300     result[1][0] = -a[1][0];
    24301     result[1][1] = -a[1][1];
    24302     result[2][0] = -a[2][0];
    24303     result[2][1] = -a[2][1];
    24304     result[3][0] = -a[3][0];
    24305     result[3][1] = -a[3][1];
    24306     return result;
    24307 }
    24308 float4x3 operator-(float4x3 a, float4x3 b) {
    24309     float4x3 result;
    24310     result[0][0] = a[0][0] - b[0][0];
    24311     result[0][1] = a[0][1] - b[0][1];
    24312     result[0][2] = a[0][2] - b[0][2];
    24313     result[1][0] = a[1][0] - b[1][0];
    24314     result[1][1] = a[1][1] - b[1][1];
    24315     result[1][2] = a[1][2] - b[1][2];
    24316     result[2][0] = a[2][0] - b[2][0];
    24317     result[2][1] = a[2][1] - b[2][1];
    24318     result[2][2] = a[2][2] - b[2][2];
    24319     result[3][0] = a[3][0] - b[3][0];
    24320     result[3][1] = a[3][1] - b[3][1];
    24321     result[3][2] = a[3][2] - b[3][2];
    24322     return result;
    24323 }
    24324 float4x3 operator-(float4x3 a) {
    24325     float4x3 result;
    24326     result[0][0] = -a[0][0];
    24327     result[0][1] = -a[0][1];
    24328     result[0][2] = -a[0][2];
    24329     result[1][0] = -a[1][0];
    24330     result[1][1] = -a[1][1];
    24331     result[1][2] = -a[1][2];
    24332     result[2][0] = -a[2][0];
    24333     result[2][1] = -a[2][1];
    24334     result[2][2] = -a[2][2];
    24335     result[3][0] = -a[3][0];
    24336     result[3][1] = -a[3][1];
    24337     result[3][2] = -a[3][2];
    24338     return result;
    24339 }
    24340 float4x4 operator-(float4x4 a, float4x4 b) {
    24341     float4x4 result;
    24342     result[0][0] = a[0][0] - b[0][0];
    24343     result[0][1] = a[0][1] - b[0][1];
    24344     result[0][2] = a[0][2] - b[0][2];
    24345     result[0][3] = a[0][3] - b[0][3];
    24346     result[1][0] = a[1][0] - b[1][0];
    24347     result[1][1] = a[1][1] - b[1][1];
    24348     result[1][2] = a[1][2] - b[1][2];
    24349     result[1][3] = a[1][3] - b[1][3];
    24350     result[2][0] = a[2][0] - b[2][0];
    24351     result[2][1] = a[2][1] - b[2][1];
    24352     result[2][2] = a[2][2] - b[2][2];
    24353     result[2][3] = a[2][3] - b[2][3];
    24354     result[3][0] = a[3][0] - b[3][0];
    24355     result[3][1] = a[3][1] - b[3][1];
    24356     result[3][2] = a[3][2] - b[3][2];
    24357     result[3][3] = a[3][3] - b[3][3];
    24358     return result;
    24359 }
    24360 float4x4 operator-(float4x4 a) {
    24361     float4x4 result;
    24362     result[0][0] = -a[0][0];
    24363     result[0][1] = -a[0][1];
    24364     result[0][2] = -a[0][2];
    24365     result[0][3] = -a[0][3];
    24366     result[1][0] = -a[1][0];
    24367     result[1][1] = -a[1][1];
    24368     result[1][2] = -a[1][2];
    24369     result[1][3] = -a[1][3];
    24370     result[2][0] = -a[2][0];
    24371     result[2][1] = -a[2][1];
    24372     result[2][2] = -a[2][2];
    24373     result[2][3] = -a[2][3];
    24374     result[3][0] = -a[3][0];
    24375     result[3][1] = -a[3][1];
    24376     result[3][2] = -a[3][2];
    24377     result[3][3] = -a[3][3];
    24378     return result;
    24379 }
     23209native uint2 operator-(uint2, uint2);
     23210native uint2 operator-(uint, uint2);
     23211native uint2 operator-(uint2, uint);
     23212native uint3 operator-(uint3, uint3);
     23213native uint3 operator-(uint, uint3);
     23214native uint3 operator-(uint3, uint);
     23215native uint4 operator-(uint4, uint4);
     23216native uint4 operator-(uint, uint4);
     23217native uint4 operator-(uint4, uint);
     23218native int2 operator-(int2, int2);
     23219native int2 operator-(int, int2);
     23220native int2 operator-(int2, int);
     23221native int3 operator-(int3, int3);
     23222native int3 operator-(int, int3);
     23223native int3 operator-(int3, int);
     23224native int4 operator-(int4, int4);
     23225native int4 operator-(int, int4);
     23226native int4 operator-(int4, int);
     23227native float2 operator-(float2, float2);
     23228native float2 operator-(float, float2);
     23229native float2 operator-(float2, float);
     23230native float3 operator-(float3, float3);
     23231native float3 operator-(float, float3);
     23232native float3 operator-(float3, float);
     23233native float4 operator-(float4, float4);
     23234native float4 operator-(float, float4);
     23235native float4 operator-(float4, float);
     23236native int2 operator-(int2);
     23237native int3 operator-(int3);
     23238native int4 operator-(int4);
     23239native float2 operator-(float2);
     23240native float3 operator-(float3);
     23241native float4 operator-(float4);
     23242native float2x2 operator-(float2x2, float2x2);
     23243native float2x2 operator-(float2x2, float);
     23244native float2x2 operator-(float, float2x2);
     23245native float2x2 operator-(float2x2);
     23246native float2x3 operator-(float2x3, float2x3);
     23247native float2x3 operator-(float, float2x3);
     23248native float2x3 operator-(float2x3, float);
     23249native float2x3 operator-(float2x3);
     23250native float2x4 operator-(float2x4, float2x4);
     23251native float2x4 operator-(float, float2x4);
     23252native float2x4 operator-(float2x4, float);
     23253native float2x4 operator-(float2x4);
     23254native float3x2 operator-(float3x2, float3x2);
     23255native float3x2 operator-(float, float3x2);
     23256native float3x2 operator-(float3x2, float);
     23257native float3x2 operator-(float3x2);
     23258native float3x3 operator-(float3x3, float3x3);
     23259native float3x3 operator-(float, float3x3);
     23260native float3x3 operator-(float3x3, float);
     23261native float3x3 operator-(float3x3);
     23262native float3x4 operator-(float3x4, float3x4);
     23263native float3x4 operator-(float, float3x4);
     23264native float3x4 operator-(float3x4, float);
     23265native float3x4 operator-(float3x4);
     23266native float4x2 operator-(float4x2, float4x2);
     23267native float4x2 operator-(float, float4x2);
     23268native float4x2 operator-(float4x2, float);
     23269native float4x2 operator-(float4x2);
     23270native float4x3 operator-(float4x3, float4x3);
     23271native float4x3 operator-(float, float4x3);
     23272native float4x3 operator-(float4x3, float);
     23273native float4x3 operator-(float4x3);
     23274native float4x4 operator-(float4x4, float4x4);
     23275native float4x4 operator-(float, float4x4);
     23276native float4x4 operator-(float4x4, float);
     23277native float4x4 operator-(float4x4);
    2438023278
    2438123279/* Functions named min */
     
    2757626474
    2757726475/* Functions named clamp */
    27578 
    27579 
    27580 uint clamp(uint x, uint lower, uint upper) {
    27581     return max(min(upper, x), lower);
    27582 }
    27583 uint2 clamp(uint2 x, uint2 y, uint2 z) {
    27584     uint2 result;
    27585     result[0] = clamp(x[0], y[0], z[0]);
    27586     result[1] = clamp(x[1], y[1], z[1]);
    27587     return result;
    27588 }
    27589 uint3 clamp(uint3 x, uint3 y, uint3 z) {
    27590     uint3 result;
    27591     result[0] = clamp(x[0], y[0], z[0]);
    27592     result[1] = clamp(x[1], y[1], z[1]);
    27593     result[2] = clamp(x[2], y[2], z[2]);
    27594     return result;
    27595 }
    27596 uint4 clamp(uint4 x, uint4 y, uint4 z) {
    27597     uint4 result;
    27598     result[0] = clamp(x[0], y[0], z[0]);
    27599     result[1] = clamp(x[1], y[1], z[1]);
    27600     result[2] = clamp(x[2], y[2], z[2]);
    27601     result[3] = clamp(x[3], y[3], z[3]);
    27602     return result;
    27603 }
    27604 
    27605 
    27606 
    27607 int clamp(int x, int lower, int upper) {
    27608     return max(min(upper, x), lower);
    27609 }
    27610 int2 clamp(int2 x, int2 y, int2 z) {
    27611     int2 result;
    27612     result[0] = clamp(x[0], y[0], z[0]);
    27613     result[1] = clamp(x[1], y[1], z[1]);
    27614     return result;
    27615 }
    27616 int3 clamp(int3 x, int3 y, int3 z) {
    27617     int3 result;
    27618     result[0] = clamp(x[0], y[0], z[0]);
    27619     result[1] = clamp(x[1], y[1], z[1]);
    27620     result[2] = clamp(x[2], y[2], z[2]);
    27621     return result;
    27622 }
    27623 int4 clamp(int4 x, int4 y, int4 z) {
    27624     int4 result;
    27625     result[0] = clamp(x[0], y[0], z[0]);
    27626     result[1] = clamp(x[1], y[1], z[1]);
    27627     result[2] = clamp(x[2], y[2], z[2]);
    27628     result[3] = clamp(x[3], y[3], z[3]);
    27629     return result;
    27630 }
    27631 
    27632 
    27633 float clamp(float x, float lower, float upper) {
    27634     return max(min(upper, x), lower);
    27635 }
    27636 float2 clamp(float2 x, float2 y, float2 z) {
    27637     float2 result;
    27638     result[0] = clamp(x[0], y[0], z[0]);
    27639     result[1] = clamp(x[1], y[1], z[1]);
    27640     return result;
    27641 }
    27642 float3 clamp(float3 x, float3 y, float3 z) {
    27643     float3 result;
    27644     result[0] = clamp(x[0], y[0], z[0]);
    27645     result[1] = clamp(x[1], y[1], z[1]);
    27646     result[2] = clamp(x[2], y[2], z[2]);
    27647     return result;
    27648 }
    27649 float4 clamp(float4 x, float4 y, float4 z) {
    27650     float4 result;
    27651     result[0] = clamp(x[0], y[0], z[0]);
    27652     result[1] = clamp(x[1], y[1], z[1]);
    27653     result[2] = clamp(x[2], y[2], z[2]);
    27654     result[3] = clamp(x[3], y[3], z[3]);
    27655     return result;
    27656 }
    27657 float2x2 clamp(float2x2 x, float2x2 y, float2x2 z) {
    27658     float2x2 result;
    27659     result[0][0] = clamp(x[0][0], y[0][0], z[0][0]);
    27660     result[0][1] = clamp(x[0][1], y[0][1], z[0][1]);
    27661     result[1][0] = clamp(x[1][0], y[1][0], z[1][0]);
    27662     result[1][1] = clamp(x[1][1], y[1][1], z[1][1]);
    27663     return result;
    27664 }
    27665 float2x3 clamp(float2x3 x, float2x3 y, float2x3 z) {
    27666     float2x3 result;
    27667     result[0][0] = clamp(x[0][0], y[0][0], z[0][0]);
    27668     result[0][1] = clamp(x[0][1], y[0][1], z[0][1]);
    27669     result[0][2] = clamp(x[0][2], y[0][2], z[0][2]);
    27670     result[1][0] = clamp(x[1][0], y[1][0], z[1][0]);
    27671     result[1][1] = clamp(x[1][1], y[1][1], z[1][1]);
    27672     result[1][2] = clamp(x[1][2], y[1][2], z[1][2]);
    27673     return result;
    27674 }
    27675 float2x4 clamp(float2x4 x, float2x4 y, float2x4 z) {
    27676     float2x4 result;
    27677     result[0][0] = clamp(x[0][0], y[0][0], z[0][0]);
    27678     result[0][1] = clamp(x[0][1], y[0][1], z[0][1]);
    27679     result[0][2] = clamp(x[0][2], y[0][2], z[0][2]);
    27680     result[0][3] = clamp(x[0][3], y[0][3], z[0][3]);
    27681     result[1][0] = clamp(x[1][0], y[1][0], z[1][0]);
    27682     result[1][1] = clamp(x[1][1], y[1][1], z[1][1]);
    27683     result[1][2] = clamp(x[1][2], y[1][2], z[1][2]);
    27684     result[1][3] = clamp(x[1][3], y[1][3], z[1][3]);
    27685     return result;
    27686 }
    27687 float3x2 clamp(float3x2 x, float3x2 y, float3x2 z) {
    27688     float3x2 result;
    27689     result[0][0] = clamp(x[0][0], y[0][0], z[0][0]);
    27690     result[0][1] = clamp(x[0][1], y[0][1], z[0][1]);
    27691     result[1][0] = clamp(x[1][0], y[1][0], z[1][0]);
    27692     result[1][1] = clamp(x[1][1], y[1][1], z[1][1]);
    27693     result[2][0] = clamp(x[2][0], y[2][0], z[2][0]);
    27694     result[2][1] = clamp(x[2][1], y[2][1], z[2][1]);
    27695     return result;
    27696 }
    27697 float3x3 clamp(float3x3 x, float3x3 y, float3x3 z) {
    27698     float3x3 result;
    27699     result[0][0] = clamp(x[0][0], y[0][0], z[0][0]);
    27700     result[0][1] = clamp(x[0][1], y[0][1], z[0][1]);
    27701     result[0][2] = clamp(x[0][2], y[0][2], z[0][2]);
    27702     result[1][0] = clamp(x[1][0], y[1][0], z[1][0]);
    27703     result[1][1] = clamp(x[1][1], y[1][1], z[1][1]);
    27704     result[1][2] = clamp(x[1][2], y[1][2], z[1][2]);
    27705     result[2][0] = clamp(x[2][0], y[2][0], z[2][0]);
    27706     result[2][1] = clamp(x[2][1], y[2][1], z[2][1]);
    27707     result[2][2] = clamp(x[2][2], y[2][2], z[2][2]);
    27708     return result;
    27709 }
    27710 float3x4 clamp(float3x4 x, float3x4 y, float3x4 z) {
    27711     float3x4 result;
    27712     result[0][0] = clamp(x[0][0], y[0][0], z[0][0]);
    27713     result[0][1] = clamp(x[0][1], y[0][1], z[0][1]);
    27714     result[0][2] = clamp(x[0][2], y[0][2], z[0][2]);
    27715     result[0][3] = clamp(x[0][3], y[0][3], z[0][3]);
    27716     result[1][0] = clamp(x[1][0], y[1][0], z[1][0]);
    27717     result[1][1] = clamp(x[1][1], y[1][1], z[1][1]);
    27718     result[1][2] = clamp(x[1][2], y[1][2], z[1][2]);
    27719     result[1][3] = clamp(x[1][3], y[1][3], z[1][3]);
    27720     result[2][0] = clamp(x[2][0], y[2][0], z[2][0]);
    27721     result[2][1] = clamp(x[2][1], y[2][1], z[2][1]);
    27722     result[2][2] = clamp(x[2][2], y[2][2], z[2][2]);
    27723     result[2][3] = clamp(x[2][3], y[2][3], z[2][3]);
    27724     return result;
    27725 }
    27726 float4x2 clamp(float4x2 x, float4x2 y, float4x2 z) {
    27727     float4x2 result;
    27728     result[0][0] = clamp(x[0][0], y[0][0], z[0][0]);
    27729     result[0][1] = clamp(x[0][1], y[0][1], z[0][1]);
    27730     result[1][0] = clamp(x[1][0], y[1][0], z[1][0]);
    27731     result[1][1] = clamp(x[1][1], y[1][1], z[1][1]);
    27732     result[2][0] = clamp(x[2][0], y[2][0], z[2][0]);
    27733     result[2][1] = clamp(x[2][1], y[2][1], z[2][1]);
    27734     result[3][0] = clamp(x[3][0], y[3][0], z[3][0]);
    27735     result[3][1] = clamp(x[3][1], y[3][1], z[3][1]);
    27736     return result;
    27737 }
    27738 float4x3 clamp(float4x3 x, float4x3 y, float4x3 z) {
    27739     float4x3 result;
    27740     result[0][0] = clamp(x[0][0], y[0][0], z[0][0]);
    27741     result[0][1] = clamp(x[0][1], y[0][1], z[0][1]);
    27742     result[0][2] = clamp(x[0][2], y[0][2], z[0][2]);
    27743     result[1][0] = clamp(x[1][0], y[1][0], z[1][0]);
    27744     result[1][1] = clamp(x[1][1], y[1][1], z[1][1]);
    27745     result[1][2] = clamp(x[1][2], y[1][2], z[1][2]);
    27746     result[2][0] = clamp(x[2][0], y[2][0], z[2][0]);
    27747     result[2][1] = clamp(x[2][1], y[2][1], z[2][1]);
    27748     result[2][2] = clamp(x[2][2], y[2][2], z[2][2]);
    27749     result[3][0] = clamp(x[3][0], y[3][0], z[3][0]);
    27750     result[3][1] = clamp(x[3][1], y[3][1], z[3][1]);
    27751     result[3][2] = clamp(x[3][2], y[3][2], z[3][2]);
    27752     return result;
    27753 }
    27754 float4x4 clamp(float4x4 x, float4x4 y, float4x4 z) {
    27755     float4x4 result;
    27756     result[0][0] = clamp(x[0][0], y[0][0], z[0][0]);
    27757     result[0][1] = clamp(x[0][1], y[0][1], z[0][1]);
    27758     result[0][2] = clamp(x[0][2], y[0][2], z[0][2]);
    27759     result[0][3] = clamp(x[0][3], y[0][3], z[0][3]);
    27760     result[1][0] = clamp(x[1][0], y[1][0], z[1][0]);
    27761     result[1][1] = clamp(x[1][1], y[1][1], z[1][1]);
    27762     result[1][2] = clamp(x[1][2], y[1][2], z[1][2]);
    27763     result[1][3] = clamp(x[1][3], y[1][3], z[1][3]);
    27764     result[2][0] = clamp(x[2][0], y[2][0], z[2][0]);
    27765     result[2][1] = clamp(x[2][1], y[2][1], z[2][1]);
    27766     result[2][2] = clamp(x[2][2], y[2][2], z[2][2]);
    27767     result[2][3] = clamp(x[2][3], y[2][3], z[2][3]);
    27768     result[3][0] = clamp(x[3][0], y[3][0], z[3][0]);
    27769     result[3][1] = clamp(x[3][1], y[3][1], z[3][1]);
    27770     result[3][2] = clamp(x[3][2], y[3][2], z[3][2]);
    27771     result[3][3] = clamp(x[3][3], y[3][3], z[3][3]);
    27772     return result;
    27773 }
    27774 
     26476native uint clamp(uint, uint, uint);
     26477native uint2 clamp(uint2, uint2, uint2);
     26478native uint3 clamp(uint3, uint3, uint3);
     26479native uint4 clamp(uint4, uint4, uint4);
     26480native int clamp(int, int, int);
     26481native int2 clamp(int2, int2, int2);
     26482native int3 clamp(int3, int3, int3);
     26483native int4 clamp(int4, int4, int4);
     26484native float clamp(float, float, float);
     26485native float2 clamp(float2, float2, float2);
     26486native float3 clamp(float3, float3, float3);
     26487native float4 clamp(float4, float4, float4);
     26488native float2x2 clamp(float2x2, float2x2, float2x2);
     26489native float2x3 clamp(float2x3, float2x3, float2x3);
     26490native float2x4 clamp(float2x4, float2x4, float2x4);
     26491native float3x2 clamp(float3x2, float3x2, float3x2);
     26492native float3x3 clamp(float3x3, float3x3, float3x3);
     26493native float3x4 clamp(float3x4, float3x4, float3x4);
     26494native float4x2 clamp(float4x2, float4x2, float4x2);
     26495native float4x3 clamp(float4x3, float4x3, float4x3);
     26496native float4x4 clamp(float4x4, float4x4, float4x4);
    2777526497
    2777626498/* Functions named operator.wxxy */
     
    3419332915native uint operator+(uint, uint);
    3419432916native float operator+(float, float);
    34195 uint2 operator+(uint2 a, uint2 b) {
    34196     uint2 result;
    34197     result[0] = a[0] + b[0];
    34198     result[1] = a[1] + b[1];
    34199     return result;
    34200 }
    34201 uint3 operator+(uint3 a, uint3 b) {
    34202     uint3 result;
    34203     result[0] = a[0] + b[0];
    34204     result[1] = a[1] + b[1];
    34205     result[2] = a[2] + b[2];
    34206     return result;
    34207 }
    34208 uint4 operator+(uint4 a, uint4 b) {
    34209     uint4 result;
    34210     result[0] = a[0] + b[0];
    34211     result[1] = a[1] + b[1];
    34212     result[2] = a[2] + b[2];
    34213     result[3] = a[3] + b[3];
    34214     return result;
    34215 }
    34216 int2 operator+(int2 a, int2 b) {
    34217     int2 result;
    34218     result[0] = a[0] + b[0];
    34219     result[1] = a[1] + b[1];
    34220     return result;
    34221 }
    34222 int3 operator+(int3 a, int3 b) {
    34223     int3 result;
    34224     result[0] = a[0] + b[0];
    34225     result[1] = a[1] + b[1];
    34226     result[2] = a[2] + b[2];
    34227     return result;
    34228 }
    34229 int4 operator+(int4 a, int4 b) {
    34230     int4 result;
    34231     result[0] = a[0] + b[0];
    34232     result[1] = a[1] + b[1];
    34233     result[2] = a[2] + b[2];
    34234     result[3] = a[3] + b[3];
    34235     return result;
    34236 }
    34237 float2 operator+(float2 a, float2 b) {
    34238     float2 result;
    34239     result[0] = a[0] + b[0];
    34240     result[1] = a[1] + b[1];
    34241     return result;
    34242 }
    34243 float3 operator+(float3 a, float3 b) {
    34244     float3 result;
    34245     result[0] = a[0] + b[0];
    34246     result[1] = a[1] + b[1];
    34247     result[2] = a[2] + b[2];
    34248     return result;
    34249 }
    34250 float4 operator+(float4 a, float4 b) {
    34251     float4 result;
    34252     result[0] = a[0] + b[0];
    34253     result[1] = a[1] + b[1];
    34254     result[2] = a[2] + b[2];
    34255     result[3] = a[3] + b[3];
    34256     return result;
    34257 }
    34258 float2x2 operator+(float2x2 a, float2x2 b) {
    34259     float2x2 result;
    34260     result[0][0] = a[0][0] + b[0][0];
    34261     result[0][1] = a[0][1] + b[0][1];
    34262     result[1][0] = a[1][0] + b[1][0];
    34263     result[1][1] = a[1][1] + b[1][1];
    34264     return result;
    34265 }
    34266 float2x3 operator+(float2x3 a, float2x3 b) {
    34267     float2x3 result;
    34268     result[0][0] = a[0][0] + b[0][0];
    34269     result[0][1] = a[0][1] + b[0][1];
    34270     result[0][2] = a[0][2] + b[0][2];
    34271     result[1][0] = a[1][0] + b[1][0];
    34272     result[1][1] = a[1][1] + b[1][1];
    34273     result[1][2] = a[1][2] + b[1][2];
    34274     return result;
    34275 }
    34276 float2x4 operator+(float2x4 a, float2x4 b) {
    34277     float2x4 result;
    34278     result[0][0] = a[0][0] + b[0][0];
    34279     result[0][1] = a[0][1] + b[0][1];
    34280     result[0][2] = a[0][2] + b[0][2];
    34281     result[0][3] = a[0][3] + b[0][3];
    34282     result[1][0] = a[1][0] + b[1][0];
    34283     result[1][1] = a[1][1] + b[1][1];
    34284     result[1][2] = a[1][2] + b[1][2];
    34285     result[1][3] = a[1][3] + b[1][3];
    34286     return result;
    34287 }
    34288 float3x2 operator+(float3x2 a, float3x2 b) {
    34289     float3x2 result;
    34290     result[0][0] = a[0][0] + b[0][0];
    34291     result[0][1] = a[0][1] + b[0][1];
    34292     result[1][0] = a[1][0] + b[1][0];
    34293     result[1][1] = a[1][1] + b[1][1];
    34294     result[2][0] = a[2][0] + b[2][0];
    34295     result[2][1] = a[2][1] + b[2][1];
    34296     return result;
    34297 }
    34298 float3x3 operator+(float3x3 a, float3x3 b) {
    34299     float3x3 result;
    34300     result[0][0] = a[0][0] + b[0][0];
    34301     result[0][1] = a[0][1] + b[0][1];
    34302     result[0][2] = a[0][2] + b[0][2];
    34303     result[1][0] = a[1][0] + b[1][0];
    34304     result[1][1] = a[1][1] + b[1][1];
    34305     result[1][2] = a[1][2] + b[1][2];
    34306     result[2][0] = a[2][0] + b[2][0];
    34307     result[2][1] = a[2][1] + b[2][1];
    34308     result[2][2] = a[2][2] + b[2][2];
    34309     return result;
    34310 }
    34311 float3x4 operator+(float3x4 a, float3x4 b) {
    34312     float3x4 result;
    34313     result[0][0] = a[0][0] + b[0][0];
    34314     result[0][1] = a[0][1] + b[0][1];
    34315     result[0][2] = a[0][2] + b[0][2];
    34316     result[0][3] = a[0][3] + b[0][3];
    34317     result[1][0] = a[1][0] + b[1][0];
    34318     result[1][1] = a[1][1] + b[1][1];
    34319     result[1][2] = a[1][2] + b[1][2];
    34320     result[1][3] = a[1][3] + b[1][3];
    34321     result[2][0] = a[2][0] + b[2][0];
    34322     result[2][1] = a[2][1] + b[2][1];
    34323     result[2][2] = a[2][2] + b[2][2];
    34324     result[2][3] = a[2][3] + b[2][3];
    34325     return result;
    34326 }
    34327 float4x2 operator+(float4x2 a, float4x2 b) {
    34328     float4x2 result;
    34329     result[0][0] = a[0][0] + b[0][0];
    34330     result[0][1] = a[0][1] + b[0][1];
    34331     result[1][0] = a[1][0] + b[1][0];
    34332     result[1][1] = a[1][1] + b[1][1];
    34333     result[2][0] = a[2][0] + b[2][0];
    34334     result[2][1] = a[2][1] + b[2][1];
    34335     result[3][0] = a[3][0] + b[3][0];
    34336     result[3][1] = a[3][1] + b[3][1];
    34337     return result;
    34338 }
    34339 float4x3 operator+(float4x3 a, float4x3 b) {
    34340     float4x3 result;
    34341     result[0][0] = a[0][0] + b[0][0];
    34342     result[0][1] = a[0][1] + b[0][1];
    34343     result[0][2] = a[0][2] + b[0][2];
    34344     result[1][0] = a[1][0] + b[1][0];
    34345     result[1][1] = a[1][1] + b[1][1];
    34346     result[1][2] = a[1][2] + b[1][2];
    34347     result[2][0] = a[2][0] + b[2][0];
    34348     result[2][1] = a[2][1] + b[2][1];
    34349     result[2][2] = a[2][2] + b[2][2];
    34350     result[3][0] = a[3][0] + b[3][0];
    34351     result[3][1] = a[3][1] + b[3][1];
    34352     result[3][2] = a[3][2] + b[3][2];
    34353     return result;
    34354 }
    34355 float4x4 operator+(float4x4 a, float4x4 b) {
    34356     float4x4 result;
    34357     result[0][0] = a[0][0] + b[0][0];
    34358     result[0][1] = a[0][1] + b[0][1];
    34359     result[0][2] = a[0][2] + b[0][2];
    34360     result[0][3] = a[0][3] + b[0][3];
    34361     result[1][0] = a[1][0] + b[1][0];
    34362     result[1][1] = a[1][1] + b[1][1];
    34363     result[1][2] = a[1][2] + b[1][2];
    34364     result[1][3] = a[1][3] + b[1][3];
    34365     result[2][0] = a[2][0] + b[2][0];
    34366     result[2][1] = a[2][1] + b[2][1];
    34367     result[2][2] = a[2][2] + b[2][2];
    34368     result[2][3] = a[2][3] + b[2][3];
    34369     result[3][0] = a[3][0] + b[3][0];
    34370     result[3][1] = a[3][1] + b[3][1];
    34371     result[3][2] = a[3][2] + b[3][2];
    34372     result[3][3] = a[3][3] + b[3][3];
    34373     return result;
    34374 }
     32917native uint2 operator+(uint2, uint2);
     32918native uint2 operator+(uint, uint2);
     32919native uint2 operator+(uint2, uint);
     32920native uint3 operator+(uint3, uint3);
     32921native uint3 operator+(uint, uint3);
     32922native uint3 operator+(uint3, uint);
     32923native uint4 operator+(uint4, uint4);
     32924native uint4 operator+(uint, uint4);
     32925native uint4 operator+(uint4, uint);
     32926native int2 operator+(int2, int2);
     32927native int2 operator+(int, int2);
     32928native int2 operator+(int2, int);
     32929native int3 operator+(int3, int3);
     32930native int3 operator+(int, int3);
     32931native int3 operator+(int3, int);
     32932native int4 operator+(int4, int4);
     32933native int4 operator+(int, int4);
     32934native int4 operator+(int4, int);
     32935native float2 operator+(float2, float2);
     32936native float2 operator+(float, float2);
     32937native float2 operator+(float2, float);
     32938native float3 operator+(float3, float3);
     32939native float3 operator+(float, float3);
     32940native float3 operator+(float3, float);
     32941native float4 operator+(float4, float4);
     32942native float4 operator+(float, float4);
     32943native float4 operator+(float4, float);
     32944native float2x2 operator+(float2x2, float2x2);
     32945native float2x2 operator+(float, float2x2);
     32946native float2x2 operator+(float2x2, float);
     32947native float2x3 operator+(float2x3, float2x3);
     32948native float2x3 operator+(float, float2x3);
     32949native float2x3 operator+(float2x3, float);
     32950native float2x4 operator+(float2x4, float2x4);
     32951native float2x4 operator+(float, float2x4);
     32952native float2x4 operator+(float2x4, float);
     32953native float3x2 operator+(float3x2, float3x2);
     32954native float3x2 operator+(float, float3x2);
     32955native float3x2 operator+(float3x2, float);
     32956native float3x3 operator+(float3x3, float3x3);
     32957native float3x3 operator+(float, float3x3);
     32958native float3x3 operator+(float3x3, float);
     32959native float3x4 operator+(float3x4, float3x4);
     32960native float3x4 operator+(float, float3x4);
     32961native float3x4 operator+(float3x4, float);
     32962native float4x2 operator+(float4x2, float4x2);
     32963native float4x2 operator+(float, float4x2);
     32964native float4x2 operator+(float4x2, float);
     32965native float4x3 operator+(float4x3, float4x3);
     32966native float4x3 operator+(float, float4x3);
     32967native float4x3 operator+(float4x3, float);
     32968native float4x4 operator+(float4x4, float4x4);
     32969native float4x4 operator+(float, float4x4);
     32970native float4x4 operator+(float4x4, float);
    3437532971
    3437632972/* Functions named operator.zxx */
     
    3518833784native uint operator/(uint, uint);
    3518933785native float operator/(float, float);
    35190 uint2 operator/(uint2 a, uint2 b) {
    35191     uint2 result;
    35192     result[0] = a[0] / b[0];
    35193     result[1] = a[1] / b[1];
    35194     return result;
    35195 }
    35196 uint2 operator/(uint2 a, uint b) {
    35197     uint2 result;
    35198     result[0] = a[0] / b;
    35199     result[1] = a[1] / b;
    35200     return result;
    35201 }
    35202 uint2 operator/(uint a, uint2 b) {
    35203     uint2 result;
    35204     result[0] = a / b[0];
    35205     result[1] = a / b[1];
    35206     return result;
    35207 }
    35208 uint3 operator/(uint3 a, uint3 b) {
    35209     uint3 result;
    35210     result[0] = a[0] / b[0];
    35211     result[1] = a[1] / b[1];
    35212     result[2] = a[2] / b[2];
    35213     return result;
    35214 }
    35215 uint3 operator/(uint3 a, uint b) {
    35216     uint3 result;
    35217     result[0] = a[0] / b;
    35218     result[1] = a[1] / b;
    35219     result[2] = a[2] / b;
    35220     return result;
    35221 }
    35222 uint3 operator/(uint a, uint3 b) {
    35223     uint3 result;
    35224     result[0] = a / b[0];
    35225     result[1] = a / b[1];
    35226     result[2] = a / b[2];
    35227     return result;
    35228 }
    35229 uint4 operator/(uint4 a, uint4 b) {
    35230     uint4 result;
    35231     result[0] = a[0] / b[0];
    35232     result[1] = a[1] / b[1];
    35233     result[2] = a[2] / b[2];
    35234     result[3] = a[3] / b[3];
    35235     return result;
    35236 }
    35237 uint4 operator/(uint4 a, uint b) {
    35238     uint4 result;
    35239     result[0] = a[0] / b;
    35240     result[1] = a[1] / b;
    35241     result[2] = a[2] / b;
    35242     result[3] = a[3] / b;
    35243     return result;
    35244 }
    35245 uint4 operator/(uint a, uint4 b) {
    35246     uint4 result;
    35247     result[0] = a / b[0];
    35248     result[1] = a / b[1];
    35249     result[2] = a / b[2];
    35250     result[3] = a / b[3];
    35251     return result;
    35252 }
    35253 int2 operator/(int2 a, int2 b) {
    35254     int2 result;
    35255     result[0] = a[0] / b[0];
    35256     result[1] = a[1] / b[1];
    35257     return result;
    35258 }
    35259 int2 operator/(int2 a, int b) {
    35260     int2 result;
    35261     result[0] = a[0] / b;
    35262     result[1] = a[1] / b;
    35263     return result;
    35264 }
    35265 int2 operator/(int a, int2 b) {
    35266     int2 result;
    35267     result[0] = a / b[0];
    35268     result[1] = a / b[1];
    35269     return result;
    35270 }
    35271 int3 operator/(int3 a, int3 b) {
    35272     int3 result;
    35273     result[0] = a[0] / b[0];
    35274     result[1] = a[1] / b[1];
    35275     result[2] = a[2] / b[2];
    35276     return result;
    35277 }
    35278 int3 operator/(int3 a, int b) {
    35279     int3 result;
    35280     result[0] = a[0] / b;
    35281     result[1] = a[1] / b;
    35282     result[2] = a[2] / b;
    35283     return result;
    35284 }
    35285 int3 operator/(int a, int3 b) {
    35286     int3 result;
    35287     result[0] = a / b[0];
    35288     result[1] = a / b[1];
    35289     result[2] = a / b[2];
    35290     return result;
    35291 }
    35292 int4 operator/(int4 a, int4 b) {
    35293     int4 result;
    35294     result[0] = a[0] / b[0];
    35295     result[1] = a[1] / b[1];
    35296     result[2] = a[2] / b[2];
    35297     result[3] = a[3] / b[3];
    35298     return result;
    35299 }
    35300 int4 operator/(int4 a, int b) {
    35301     int4 result;
    35302     result[0] = a[0] / b;
    35303     result[1] = a[1] / b;
    35304     result[2] = a[2] / b;
    35305     result[3] = a[3] / b;
    35306     return result;
    35307 }
    35308 int4 operator/(int a, int4 b) {
    35309     int4 result;
    35310     result[0] = a / b[0];
    35311     result[1] = a / b[1];
    35312     result[2] = a / b[2];
    35313     result[3] = a / b[3];
    35314     return result;
    35315 }
    35316 float2 operator/(float2 a, float2 b) {
    35317     float2 result;
    35318     result[0] = a[0] / b[0];
    35319     result[1] = a[1] / b[1];
    35320     return result;
    35321 }
    35322 float2 operator/(float2 a, float b) {
    35323     float2 result;
    35324     result[0] = a[0] / b;
    35325     result[1] = a[1] / b;
    35326     return result;
    35327 }
    35328 float2 operator/(float a, float2 b) {
    35329     float2 result;
    35330     result[0] = a / b[0];
    35331     result[1] = a / b[1];
    35332     return result;
    35333 }
    35334 float3 operator/(float3 a, float3 b) {
    35335     float3 result;
    35336     result[0] = a[0] / b[0];
    35337     result[1] = a[1] / b[1];
    35338     result[2] = a[2] / b[2];
    35339     return result;
    35340 }
    35341 float3 operator/(float3 a, float b) {
    35342     float3 result;
    35343     result[0] = a[0] / b;
    35344     result[1] = a[1] / b;
    35345     result[2] = a[2] / b;
    35346     return result;
    35347 }
    35348 float3 operator/(float a, float3 b) {
    35349     float3 result;
    35350     result[0] = a / b[0];
    35351     result[1] = a / b[1];
    35352     result[2] = a / b[2];
    35353     return result;
    35354 }
    35355 float4 operator/(float4 a, float4 b) {
    35356     float4 result;
    35357     result[0] = a[0] / b[0];
    35358     result[1] = a[1] / b[1];
    35359     result[2] = a[2] / b[2];
    35360     result[3] = a[3] / b[3];
    35361     return result;
    35362 }
    35363 float4 operator/(float4 a, float b) {
    35364     float4 result;
    35365     result[0] = a[0] / b;
    35366     result[1] = a[1] / b;
    35367     result[2] = a[2] / b;
    35368     result[3] = a[3] / b;
    35369     return result;
    35370 }
    35371 float4 operator/(float a, float4 b) {
    35372     float4 result;
    35373     result[0] = a / b[0];
    35374     result[1] = a / b[1];
    35375     result[2] = a / b[2];
    35376     result[3] = a / b[3];
    35377     return result;
    35378 }
    35379 float2x2 operator/(float2x2 a, float2x2 b) {
    35380     float2x2 result;
    35381     result[0][0] = a[0][0] / b[0][0];
    35382     result[0][1] = a[0][1] / b[0][1];
    35383     result[1][0] = a[1][0] / b[1][0];
    35384     result[1][1] = a[1][1] / b[1][1];
    35385     return result;
    35386 }
    35387 float2x2 operator/(float2x2 a, float b) {
    35388     float2x2 result;
    35389     result[0][0] = a[0][0] / b;
    35390     result[0][1] = a[0][1] / b;
    35391     result[1][0] = a[1][0] / b;
    35392     result[1][1] = a[1][1] / b;
    35393     return result;
    35394 }
    35395 float2x2 operator/(float a, float2x2 b) {
    35396     float2x2 result;
    35397     result[0][0] = a / b[0][0];
    35398     result[0][1] = a / b[0][1];
    35399     result[1][0] = a / b[1][0];
    35400     result[1][1] = a / b[1][1];
    35401     return result;
    35402 }
    35403 float2x3 operator/(float2x3 a, float2x3 b) {
    35404     float2x3 result;
    35405     result[0][0] = a[0][0] / b[0][0];
    35406     result[0][1] = a[0][1] / b[0][1];
    35407     result[0][2] = a[0][2] / b[0][2];
    35408     result[1][0] = a[1][0] / b[1][0];
    35409     result[1][1] = a[1][1] / b[1][1];
    35410     result[1][2] = a[1][2] / b[1][2];
    35411     return result;
    35412 }
    35413 float2x3 operator/(float2x3 a, float b) {
    35414     float2x3 result;
    35415     result[0][0] = a[0][0] / b;
    35416     result[0][1] = a[0][1] / b;
    35417     result[0][2] = a[0][2] / b;
    35418     result[1][0] = a[1][0] / b;
    35419     result[1][1] = a[1][1] / b;
    35420     result[1][2] = a[1][2] / b;
    35421     return result;
    35422 }
    35423 float2x3 operator/(float a, float2x3 b) {
    35424     float2x3 result;
    35425     result[0][0] = a / b[0][0];
    35426     result[0][1] = a / b[0][1];
    35427     result[0][2] = a / b[0][2];
    35428     result[1][0] = a / b[1][0];
    35429     result[1][1] = a / b[1][1];
    35430     result[1][2] = a / b[1][2];
    35431     return result;
    35432 }
    35433 float2x4 operator/(float2x4 a, float2x4 b) {
    35434     float2x4 result;
    35435     result[0][0] = a[0][0] / b[0][0];
    35436     result[0][1] = a[0][1] / b[0][1];
    35437     result[0][2] = a[0][2] / b[0][2];
    35438     result[0][3] = a[0][3] / b[0][3];
    35439     result[1][0] = a[1][0] / b[1][0];
    35440     result[1][1] = a[1][1] / b[1][1];
    35441     result[1][2] = a[1][2] / b[1][2];
    35442     result[1][3] = a[1][3] / b[1][3];
    35443     return result;
    35444 }
    35445 float2x4 operator/(float2x4 a, float b) {
    35446     float2x4 result;
    35447     result[0][0] = a[0][0] / b;
    35448     result[0][1] = a[0][1] / b;
    35449     result[0][2] = a[0][2] / b;
    35450     result[0][3] = a[0][3] / b;
    35451     result[1][0] = a[1][0] / b;
    35452     result[1][1] = a[1][1] / b;
    35453     result[1][2] = a[1][2] / b;
    35454     result[1][3] = a[1][3] / b;
    35455     return result;
    35456 }
    35457 float2x4 operator/(float a, float2x4 b) {
    35458     float2x4 result;
    35459     result[0][0] = a / b[0][0];
    35460     result[0][1] = a / b[0][1];
    35461     result[0][2] = a / b[0][2];
    35462     result[0][3] = a / b[0][3];
    35463     result[1][0] = a / b[1][0];
    35464     result[1][1] = a / b[1][1];
    35465     result[1][2] = a / b[1][2];
    35466     result[1][3] = a / b[1][3];
    35467     return result;
    35468 }
    35469 float3x2 operator/(float3x2 a, float3x2 b) {
    35470     float3x2 result;
    35471     result[0][0] = a[0][0] / b[0][0];
    35472     result[0][1] = a[0][1] / b[0][1];
    35473     result[1][0] = a[1][0] / b[1][0];
    35474     result[1][1] = a[1][1] / b[1][1];
    35475     result[2][0] = a[2][0] / b[2][0];
    35476     result[2][1] = a[2][1] / b[2][1];
    35477     return result;
    35478 }
    35479 float3x2 operator/(float3x2 a, float b) {
    35480     float3x2 result;
    35481     result[0][0] = a[0][0] / b;
    35482     result[0][1] = a[0][1] / b;
    35483     result[1][0] = a[1][0] / b;
    35484     result[1][1] = a[1][1] / b;
    35485     result[2][0] = a[2][0] / b;
    35486     result[2][1] = a[2][1] / b;
    35487     return result;
    35488 }
    35489 float3x2 operator/(float a, float3x2 b) {
    35490     float3x2 result;
    35491     result[0][0] = a / b[0][0];
    35492     result[0][1] = a / b[0][1];
    35493     result[1][0] = a / b[1][0];
    35494     result[1][1] = a / b[1][1];
    35495     result[2][0] = a / b[2][0];
    35496     result[2][1] = a / b[2][1];
    35497     return result;
    35498 }
    35499 float3x3 operator/(float3x3 a, float3x3 b) {
    35500     float3x3 result;
    35501     result[0][0] = a[0][0] / b[0][0];
    35502     result[0][1] = a[0][1] / b[0][1];
    35503     result[0][2] = a[0][2] / b[0][2];
    35504     result[1][0] = a[1][0] / b[1][0];
    35505     result[1][1] = a[1][1] / b[1][1];
    35506     result[1][2] = a[1][2] / b[1][2];
    35507     result[2][0] = a[2][0] / b[2][0];
    35508     result[2][1] = a[2][1] / b[2][1];
    35509     result[2][2] = a[2][2] / b[2][2];
    35510     return result;
    35511 }
    35512 float3x3 operator/(float3x3 a, float b) {
    35513     float3x3 result;
    35514     result[0][0] = a[0][0] / b;
    35515     result[0][1] = a[0][1] / b;
    35516     result[0][2] = a[0][2] / b;
    35517     result[1][0] = a[1][0] / b;
    35518     result[1][1] = a[1][1] / b;
    35519     result[1][2] = a[1][2] / b;
    35520     result[2][0] = a[2][0] / b;
    35521     result[2][1] = a[2][1] / b;
    35522     result[2][2] = a[2][2] / b;
    35523     return result;
    35524 }
    35525 float3x3 operator/(float a, float3x3 b) {
    35526     float3x3 result;
    35527     result[0][0] = a / b[0][0];
    35528     result[0][1] = a / b[0][1];
    35529     result[0][2] = a / b[0][2];
    35530     result[1][0] = a / b[1][0];
    35531     result[1][1] = a / b[1][1];
    35532     result[1][2] = a / b[1][2];
    35533     result[2][0] = a / b[2][0];
    35534     result[2][1] = a / b[2][1];
    35535     result[2][2] = a / b[2][2];
    35536     return result;
    35537 }
    35538 float3x4 operator/(float3x4 a, float3x4 b) {
    35539     float3x4 result;
    35540     result[0][0] = a[0][0] / b[0][0];
    35541     result[0][1] = a[0][1] / b[0][1];
    35542     result[0][2] = a[0][2] / b[0][2];
    35543     result[0][3] = a[0][3] / b[0][3];
    35544     result[1][0] = a[1][0] / b[1][0];
    35545     result[1][1] = a[1][1] / b[1][1];
    35546     result[1][2] = a[1][2] / b[1][2];
    35547     result[1][3] = a[1][3] / b[1][3];
    35548     result[2][0] = a[2][0] / b[2][0];
    35549     result[2][1] = a[2][1] / b[2][1];
    35550     result[2][2] = a[2][2] / b[2][2];
    35551     result[2][3] = a[2][3] / b[2][3];
    35552     return result;
    35553 }
    35554 float3x4 operator/(float3x4 a, float b) {
    35555     float3x4 result;
    35556     result[0][0] = a[0][0] / b;
    35557     result[0][1] = a[0][1] / b;
    35558     result[0][2] = a[0][2] / b;
    35559     result[0][3] = a[0][3] / b;
    35560     result[1][0] = a[1][0] / b;
    35561     result[1][1] = a[1][1] / b;
    35562     result[1][2] = a[1][2] / b;
    35563     result[1][3] = a[1][3] / b;
    35564     result[2][0] = a[2][0] / b;
    35565     result[2][1] = a[2][1] / b;
    35566     result[2][2] = a[2][2] / b;
    35567     result[2][3] = a[2][3] / b;
    35568     return result;
    35569 }
    35570 float3x4 operator/(float a, float3x4 b) {
    35571     float3x4 result;
    35572     result[0][0] = a / b[0][0];
    35573     result[0][1] = a / b[0][1];
    35574     result[0][2] = a / b[0][2];
    35575     result[0][3] = a / b[0][3];
    35576     result[1][0] = a / b[1][0];
    35577     result[1][1] = a / b[1][1];
    35578     result[1][2] = a / b[1][2];
    35579     result[1][3] = a / b[1][3];
    35580     result[2][0] = a / b[2][0];
    35581     result[2][1] = a / b[2][1];
    35582     result[2][2] = a / b[2][2];
    35583     result[2][3] = a / b[2][3];
    35584     return result;
    35585 }
    35586 float4x2 operator/(float4x2 a, float4x2 b) {
    35587     float4x2 result;
    35588     result[0][0] = a[0][0] / b[0][0];
    35589     result[0][1] = a[0][1] / b[0][1];
    35590     result[1][0] = a[1][0] / b[1][0];
    35591     result[1][1] = a[1][1] / b[1][1];
    35592     result[2][0] = a[2][0] / b[2][0];
    35593     result[2][1] = a[2][1] / b[2][1];
    35594     result[3][0] = a[3][0] / b[3][0];
    35595     result[3][1] = a[3][1] / b[3][1];
    35596     return result;
    35597 }
    35598 float4x2 operator/(float4x2 a, float b) {
    35599     float4x2 result;
    35600     result[0][0] = a[0][0] / b;
    35601     result[0][1] = a[0][1] / b;
    35602     result[1][0] = a[1][0] / b;
    35603     result[1][1] = a[1][1] / b;
    35604     result[2][0] = a[2][0] / b;
    35605     result[2][1] = a[2][1] / b;
    35606     result[3][0] = a[3][0] / b;
    35607     result[3][1] = a[3][1] / b;
    35608     return result;
    35609 }
    35610 float4x2 operator/(float a, float4x2 b) {
    35611     float4x2 result;
    35612     result[0][0] = a / b[0][0];
    35613     result[0][1] = a / b[0][1];
    35614     result[1][0] = a / b[1][0];
    35615     result[1][1] = a / b[1][1];
    35616     result[2][0] = a / b[2][0];
    35617     result[2][1] = a / b[2][1];
    35618     result[3][0] = a / b[3][0];
    35619     result[3][1] = a / b[3][1];
    35620     return result;
    35621 }
    35622 float4x3 operator/(float4x3 a, float4x3 b) {
    35623     float4x3 result;
    35624     result[0][0] = a[0][0] / b[0][0];
    35625     result[0][1] = a[0][1] / b[0][1];
    35626     result[0][2] = a[0][2] / b[0][2];
    35627     result[1][0] = a[1][0] / b[1][0];
    35628     result[1][1] = a[1][1] / b[1][1];
    35629     result[1][2] = a[1][2] / b[1][2];
    35630     result[2][0] = a[2][0] / b[2][0];
    35631     result[2][1] = a[2][1] / b[2][1];
    35632     result[2][2] = a[2][2] / b[2][2];
    35633     result[3][0] = a[3][0] / b[3][0];
    35634     result[3][1] = a[3][1] / b[3][1];
    35635     result[3][2] = a[3][2] / b[3][2];
    35636     return result;
    35637 }
    35638 float4x3 operator/(float4x3 a, float b) {
    35639     float4x3 result;
    35640     result[0][0] = a[0][0] / b;
    35641     result[0][1] = a[0][1] / b;
    35642     result[0][2] = a[0][2] / b;
    35643     result[1][0] = a[1][0] / b;
    35644     result[1][1] = a[1][1] / b;
    35645     result[1][2] = a[1][2] / b;
    35646     result[2][0] = a[2][0] / b;
    35647     result[2][1] = a[2][1] / b;
    35648     result[2][2] = a[2][2] / b;
    35649     result[3][0] = a[3][0] / b;
    35650     result[3][1] = a[3][1] / b;
    35651     result[3][2] = a[3][2] / b;
    35652     return result;
    35653 }
    35654 float4x3 operator/(float a, float4x3 b) {
    35655     float4x3 result;
    35656     result[0][0] = a / b[0][0];
    35657     result[0][1] = a / b[0][1];
    35658     result[0][2] = a / b[0][2];
    35659     result[1][0] = a / b[1][0];
    35660     result[1][1] = a / b[1][1];
    35661     result[1][2] = a / b[1][2];
    35662     result[2][0] = a / b[2][0];
    35663     result[2][1] = a / b[2][1];
    35664     result[2][2] = a / b[2][2];
    35665     result[3][0] = a / b[3][0];
    35666     result[3][1] = a / b[3][1];
    35667     result[3][2] = a / b[3][2];
    35668     return result;
    35669 }
    35670 float4x4 operator/(float4x4 a, float4x4 b) {
    35671     float4x4 result;
    35672     result[0][0] = a[0][0] / b[0][0];
    35673     result[0][1] = a[0][1] / b[0][1];
    35674     result[0][2] = a[0][2] / b[0][2];
    35675     result[0][3] = a[0][3] / b[0][3];
    35676     result[1][0] = a[1][0] / b[1][0];
    35677     result[1][1] = a[1][1] / b[1][1];
    35678     result[1][2] = a[1][2] / b[1][2];
    35679     result[1][3] = a[1][3] / b[1][3];
    35680     result[2][0] = a[2][0] / b[2][0];
    35681     result[2][1] = a[2][1] / b[2][1];
    35682     result[2][2] = a[2][2] / b[2][2];
    35683     result[2][3] = a[2][3] / b[2][3];
    35684     result[3][0] = a[3][0] / b[3][0];
    35685     result[3][1] = a[3][1] / b[3][1];
    35686     result[3][2] = a[3][2] / b[3][2];
    35687     result[3][3] = a[3][3] / b[3][3];
    35688     return result;
    35689 }
    35690 float4x4 operator/(float4x4 a, float b) {
    35691     float4x4 result;
    35692     result[0][0] = a[0][0] / b;
    35693     result[0][1] = a[0][1] / b;
    35694     result[0][2] = a[0][2] / b;
    35695     result[0][3] = a[0][3] / b;
    35696     result[1][0] = a[1][0] / b;
    35697     result[1][1] = a[1][1] / b;
    35698     result[1][2] = a[1][2] / b;
    35699     result[1][3] = a[1][3] / b;
    35700     result[2][0] = a[2][0] / b;
    35701     result[2][1] = a[2][1] / b;
    35702     result[2][2] = a[2][2] / b;
    35703     result[2][3] = a[2][3] / b;
    35704     result[3][0] = a[3][0] / b;
    35705     result[3][1] = a[3][1] / b;
    35706     result[3][2] = a[3][2] / b;
    35707     result[3][3] = a[3][3] / b;
    35708     return result;
    35709 }
    35710 float4x4 operator/(float a, float4x4 b) {
    35711     float4x4 result;
    35712     result[0][0] = a / b[0][0];
    35713     result[0][1] = a / b[0][1];
    35714     result[0][2] = a / b[0][2];
    35715     result[0][3] = a / b[0][3];
    35716     result[1][0] = a / b[1][0];
    35717     result[1][1] = a / b[1][1];
    35718     result[1][2] = a / b[1][2];
    35719     result[1][3] = a / b[1][3];
    35720     result[2][0] = a / b[2][0];
    35721     result[2][1] = a / b[2][1];
    35722     result[2][2] = a / b[2][2];
    35723     result[2][3] = a / b[2][3];
    35724     result[3][0] = a / b[3][0];
    35725     result[3][1] = a / b[3][1];
    35726     result[3][2] = a / b[3][2];
    35727     result[3][3] = a / b[3][3];
    35728     return result;
    35729 }
     33786native uint2 operator/(uint2, uint2);
     33787native uint2 operator/(uint2, uint);
     33788native uint2 operator/(uint, uint2);
     33789native uint3 operator/(uint3, uint3);
     33790native uint3 operator/(uint3, uint);
     33791native uint3 operator/(uint, uint3);
     33792native uint4 operator/(uint4, uint4);
     33793native uint4 operator/(uint4, uint);
     33794native uint4 operator/(uint, uint4);
     33795native int2 operator/(int2, int2);
     33796native int2 operator/(int2, int);
     33797native int2 operator/(int, int2);
     33798native int3 operator/(int3, int3);
     33799native int3 operator/(int3, int);
     33800native int3 operator/(int, int3);
     33801native int4 operator/(int4, int4);
     33802native int4 operator/(int4, int);
     33803native int4 operator/(int, int4);
     33804native float2 operator/(float2, float2);
     33805native float2 operator/(float2, float);
     33806native float2 operator/(float, float2);
     33807native float3 operator/(float3, float3);
     33808native float3 operator/(float3, float);
     33809native float3 operator/(float, float3);
     33810native float4 operator/(float4, float4);
     33811native float4 operator/(float4, float);
     33812native float4 operator/(float, float4);
     33813native float2x2 operator/(float2x2, float2x2);
     33814native float2x2 operator/(float2x2, float);
     33815native float2x2 operator/(float, float2x2);
     33816native float2x3 operator/(float2x3, float2x3);
     33817native float2x3 operator/(float2x3, float);
     33818native float2x3 operator/(float, float2x3);
     33819native float2x4 operator/(float2x4, float2x4);
     33820native float2x4 operator/(float2x4, float);
     33821native float2x4 operator/(float, float2x4);
     33822native float3x2 operator/(float3x2, float3x2);
     33823native float3x2 operator/(float3x2, float);
     33824native float3x2 operator/(float, float3x2);
     33825native float3x3 operator/(float3x3, float3x3);
     33826native float3x3 operator/(float3x3, float);
     33827native float3x3 operator/(float, float3x3);
     33828native float3x4 operator/(float3x4, float3x4);
     33829native float3x4 operator/(float3x4, float);
     33830native float3x4 operator/(float, float3x4);
     33831native float4x2 operator/(float4x2, float4x2);
     33832native float4x2 operator/(float4x2, float);
     33833native float4x2 operator/(float, float4x2);
     33834native float4x3 operator/(float4x3, float4x3);
     33835native float4x3 operator/(float4x3, float);
     33836native float4x3 operator/(float, float4x3);
     33837native float4x4 operator/(float4x4, float4x4);
     33838native float4x4 operator/(float4x4, float);
     33839native float4x4 operator/(float, float4x4);
    3573033840
    3573133841/* Functions named operator.xwzx */
     
    3860536715
    3860636716/* Functions named operator.xy= */
    38607 bool2 operator.xy=(bool2 v, bool2 c) {
    38608     bool2 result = v;
    38609     result.x = c.x;
    38610     result.y = c.y;
    38611     return result;
    38612 }
    38613 bool3 operator.xy=(bool3 v, bool2 c) {
    38614     bool3 result = v;
    38615     result.x = c.x;
    38616     result.y = c.y;
    38617     return result;
    38618 }
    38619 bool4 operator.xy=(bool4 v, bool2 c) {
    38620     bool4 result = v;
    38621     result.x = c.x;
    38622     result.y = c.y;
    38623     return result;
    38624 }
    38625 uint2 operator.xy=(uint2 v, uint2 c) {
    38626     uint2 result = v;
    38627     result.x = c.x;
    38628     result.y = c.y;
    38629     return result;
    38630 }
    38631 uint3 operator.xy=(uint3 v, uint2 c) {
    38632     uint3 result = v;
    38633     result.x = c.x;
    38634     result.y = c.y;
    38635     return result;
    38636 }
    38637 uint4 operator.xy=(uint4 v, uint2 c) {
    38638     uint4 result = v;
    38639     result.x = c.x;
    38640     result.y = c.y;
    38641     return result;
    38642 }
    38643 int2 operator.xy=(int2 v, int2 c) {
    38644     int2 result = v;
    38645     result.x = c.x;
    38646     result.y = c.y;
    38647     return result;
    38648 }
    38649 int3 operator.xy=(int3 v, int2 c) {
    38650     int3 result = v;
    38651     result.x = c.x;
    38652     result.y = c.y;
    38653     return result;
    38654 }
    38655 int4 operator.xy=(int4 v, int2 c) {
    38656     int4 result = v;
    38657     result.x = c.x;
    38658     result.y = c.y;
    38659     return result;
    38660 }
    38661 float2 operator.xy=(float2 v, float2 c) {
    38662     float2 result = v;
    38663     result.x = c.x;
    38664     result.y = c.y;
    38665     return result;
    38666 }
    38667 float3 operator.xy=(float3 v, float2 c) {
    38668     float3 result = v;
    38669     result.x = c.x;
    38670     result.y = c.y;
    38671     return result;
    38672 }
    38673 float4 operator.xy=(float4 v, float2 c) {
    38674     float4 result = v;
    38675     result.x = c.x;
    38676     result.y = c.y;
    38677     return result;
    38678 }
     36717native bool2 operator.xy=(bool2, bool2);
     36718native bool3 operator.xy=(bool3, bool2);
     36719native bool4 operator.xy=(bool4, bool2);
     36720native uint2 operator.xy=(uint2, uint2);
     36721native uint3 operator.xy=(uint3, uint2);
     36722native uint4 operator.xy=(uint4, uint2);
     36723native int2 operator.xy=(int2, int2);
     36724native int3 operator.xy=(int3, int2);
     36725native int4 operator.xy=(int4, int2);
     36726native float2 operator.xy=(float2, float2);
     36727native float3 operator.xy=(float3, float2);
     36728native float4 operator.xy=(float4, float2);
    3867936729
    3868036730/* Functions named operator.yxw */
     
    3951937569
    3952037570/* Functions named operator.xy */
    39521 bool2 operator.xy(bool2 v) {
    39522     bool2 result;
    39523     result.x = v.x;
    39524     result.y = v.y;
    39525     return result;
    39526 }
    39527 bool2 operator.xy(bool3 v) {
    39528     bool2 result;
    39529     result.x = v.x;
    39530     result.y = v.y;
    39531     return result;
    39532 }
    39533 bool2 operator.xy(bool4 v) {
    39534     bool2 result;
    39535     result.x = v.x;
    39536     result.y = v.y;
    39537     return result;
    39538 }
    39539 uint2 operator.xy(uint2 v) {
    39540     uint2 result;
    39541     result.x = v.x;
    39542     result.y = v.y;
    39543     return result;
    39544 }
    39545 uint2 operator.xy(uint3 v) {
    39546     uint2 result;
    39547     result.x = v.x;
    39548     result.y = v.y;
    39549     return result;
    39550 }
    39551 uint2 operator.xy(uint4 v) {
    39552     uint2 result;
    39553     result.x = v.x;
    39554     result.y = v.y;
    39555     return result;
    39556 }
    39557 int2 operator.xy(int2 v) {
    39558     int2 result;
    39559     result.x = v.x;
    39560     result.y = v.y;
    39561     return result;
    39562 }
    39563 int2 operator.xy(int3 v) {
    39564     int2 result;
    39565     result.x = v.x;
    39566     result.y = v.y;
    39567     return result;
    39568 }
    39569 int2 operator.xy(int4 v) {
    39570     int2 result;
    39571     result.x = v.x;
    39572     result.y = v.y;
    39573     return result;
    39574 }
    39575 float2 operator.xy(float2 v) {
    39576     float2 result;
    39577     result.x = v.x;
    39578     result.y = v.y;
    39579     return result;
    39580 }
    39581 float2 operator.xy(float3 v) {
    39582     float2 result;
    39583     result.x = v.x;
    39584     result.y = v.y;
    39585     return result;
    39586 }
    39587 float2 operator.xy(float4 v) {
    39588     float2 result;
    39589     result.x = v.x;
    39590     result.y = v.y;
    39591     return result;
    39592 }
     37571native bool2 operator.xy(bool2);
     37572native bool2 operator.xy(bool3);
     37573native bool2 operator.xy(bool4);
     37574native uint2 operator.xy(uint2);
     37575native uint2 operator.xy(uint3);
     37576native uint2 operator.xy(uint4);
     37577native int2 operator.xy(int2);
     37578native int2 operator.xy(int3);
     37579native int2 operator.xy(int4);
     37580native float2 operator.xy(float2);
     37581native float2 operator.xy(float3);
     37582native float2 operator.xy(float4);
  • trunk/Source/WebCore/Modules/webgpu/WHLSL/WHLSLStandardLibraryUtilities.cpp

    r248303 r248730  
    4242
    4343namespace WHLSL {
     44
     45constexpr bool verbose = false;
    4446
    4547static String decompressAndDecodeStandardLibrary()
     
    111113                continue;
    112114            auto stringView = StringView(standardLibrary.get()).substring(iterator->value.start, iterator->value.end - iterator->value.start);
     115            if (verbose) {
     116                dataLogLn("---------------------------");
     117                dataLogLn(stringView);
     118                dataLogLn("---------------------------");
     119            }
     120            auto start = program.functionDefinitions().size();
    113121            auto parseResult = parser.parse(program, stringView, ParsingMode::StandardLibrary);
    114122            if (!parseResult) {
     
    116124                ASSERT_NOT_REACHED();
    117125                return;
     126            }
     127            if (verbose) {
     128                if (program.functionDefinitions().size() != start)
     129                    dataLogLn("non native stdlib function: '", name, "'");
    118130            }
    119131            allFunctionNames.add(name);
Note: See TracChangeset for help on using the changeset viewer.