// https://github.com/gpuweb/WHLSL/blob/9528f19aaa71fd5c3c706d2873f4b8c8cce857b5/Spec/source/Generate_Standard_Library.js
// This was autogenerated from Generate_Standard_Library.js! Do not edit!!

native typedef void;
native typedef bool;
native typedef uchar;
native typedef ushort;
native typedef uint;
native typedef char;
native typedef short;
native typedef int;
native typedef half;
native typedef float;
native typedef atomic_int;
native typedef atomic_uint;
native typedef vector<bool, 2>;
typedef bool2 = vector<bool, 2>;
native typedef vector<bool, 3>;
typedef bool3 = vector<bool, 3>;
native typedef vector<bool, 4>;
typedef bool4 = vector<bool, 4>;
native typedef vector<uchar, 2>;
typedef uchar2 = vector<uchar, 2>;
native typedef vector<uchar, 3>;
typedef uchar3 = vector<uchar, 3>;
native typedef vector<uchar, 4>;
typedef uchar4 = vector<uchar, 4>;
native typedef vector<ushort, 2>;
typedef ushort2 = vector<ushort, 2>;
native typedef vector<ushort, 3>;
typedef ushort3 = vector<ushort, 3>;
native typedef vector<ushort, 4>;
typedef ushort4 = vector<ushort, 4>;
native typedef vector<uint, 2>;
typedef uint2 = vector<uint, 2>;
native typedef vector<uint, 3>;
typedef uint3 = vector<uint, 3>;
native typedef vector<uint, 4>;
typedef uint4 = vector<uint, 4>;
native typedef vector<char, 2>;
typedef char2 = vector<char, 2>;
native typedef vector<char, 3>;
typedef char3 = vector<char, 3>;
native typedef vector<char, 4>;
typedef char4 = vector<char, 4>;
native typedef vector<short, 2>;
typedef short2 = vector<short, 2>;
native typedef vector<short, 3>;
typedef short3 = vector<short, 3>;
native typedef vector<short, 4>;
typedef short4 = vector<short, 4>;
native typedef vector<int, 2>;
typedef int2 = vector<int, 2>;
native typedef vector<int, 3>;
typedef int3 = vector<int, 3>;
native typedef vector<int, 4>;
typedef int4 = vector<int, 4>;
native typedef vector<half, 2>;
typedef half2 = vector<half, 2>;
native typedef vector<half, 3>;
typedef half3 = vector<half, 3>;
native typedef vector<half, 4>;
typedef half4 = vector<half, 4>;
native typedef vector<float, 2>;
typedef float2 = vector<float, 2>;
native typedef vector<float, 3>;
typedef float3 = vector<float, 3>;
native typedef vector<float, 4>;
typedef float4 = vector<float, 4>;

native typedef matrix<half, 2, 2>;
typedef half2x2 = matrix<half, 2, 2>;
native typedef matrix<half, 2, 3>;
typedef half2x3 = matrix<half, 2, 3>;
native typedef matrix<half, 2, 4>;
typedef half2x4 = matrix<half, 2, 4>;
native typedef matrix<half, 3, 2>;
typedef half3x2 = matrix<half, 3, 2>;
native typedef matrix<half, 3, 3>;
typedef half3x3 = matrix<half, 3, 3>;
native typedef matrix<half, 3, 4>;
typedef half3x4 = matrix<half, 3, 4>;
native typedef matrix<half, 4, 2>;
typedef half4x2 = matrix<half, 4, 2>;
native typedef matrix<half, 4, 3>;
typedef half4x3 = matrix<half, 4, 3>;
native typedef matrix<half, 4, 4>;
typedef half4x4 = matrix<half, 4, 4>;
native typedef matrix<float, 2, 2>;
typedef float2x2 = matrix<float, 2, 2>;
native typedef matrix<float, 2, 3>;
typedef float2x3 = matrix<float, 2, 3>;
native typedef matrix<float, 2, 4>;
typedef float2x4 = matrix<float, 2, 4>;
native typedef matrix<float, 3, 2>;
typedef float3x2 = matrix<float, 3, 2>;
native typedef matrix<float, 3, 3>;
typedef float3x3 = matrix<float, 3, 3>;
native typedef matrix<float, 3, 4>;
typedef float3x4 = matrix<float, 3, 4>;
native typedef matrix<float, 4, 2>;
typedef float4x2 = matrix<float, 4, 2>;
native typedef matrix<float, 4, 3>;
typedef float4x3 = matrix<float, 4, 3>;
native typedef matrix<float, 4, 4>;
typedef float4x4 = matrix<float, 4, 4>;
native typedef sampler;
native typedef Texture1D<ushort>;
native typedef Texture1D<ushort2>;
native typedef Texture1D<ushort3>;
native typedef Texture1D<ushort4>;
native typedef Texture1D<uint>;
native typedef Texture1D<uint2>;
native typedef Texture1D<uint3>;
native typedef Texture1D<uint4>;
native typedef Texture1D<short>;
native typedef Texture1D<short2>;
native typedef Texture1D<short3>;
native typedef Texture1D<short4>;
native typedef Texture1D<int>;
native typedef Texture1D<int2>;
native typedef Texture1D<int3>;
native typedef Texture1D<int4>;
native typedef Texture1D<half>;
native typedef Texture1D<half2>;
native typedef Texture1D<half3>;
native typedef Texture1D<half4>;
native typedef Texture1D<float>;
native typedef Texture1D<float2>;
native typedef Texture1D<float3>;
native typedef Texture1D<float4>;
native typedef RWTexture1D<ushort>;
native typedef RWTexture1D<ushort2>;
native typedef RWTexture1D<ushort3>;
native typedef RWTexture1D<ushort4>;
native typedef RWTexture1D<uint>;
native typedef RWTexture1D<uint2>;
native typedef RWTexture1D<uint3>;
native typedef RWTexture1D<uint4>;
native typedef RWTexture1D<short>;
native typedef RWTexture1D<short2>;
native typedef RWTexture1D<short3>;
native typedef RWTexture1D<short4>;
native typedef RWTexture1D<int>;
native typedef RWTexture1D<int2>;
native typedef RWTexture1D<int3>;
native typedef RWTexture1D<int4>;
native typedef RWTexture1D<half>;
native typedef RWTexture1D<half2>;
native typedef RWTexture1D<half3>;
native typedef RWTexture1D<half4>;
native typedef RWTexture1D<float>;
native typedef RWTexture1D<float2>;
native typedef RWTexture1D<float3>;
native typedef RWTexture1D<float4>;
native typedef Texture1DArray<ushort>;
native typedef Texture1DArray<ushort2>;
native typedef Texture1DArray<ushort3>;
native typedef Texture1DArray<ushort4>;
native typedef Texture1DArray<uint>;
native typedef Texture1DArray<uint2>;
native typedef Texture1DArray<uint3>;
native typedef Texture1DArray<uint4>;
native typedef Texture1DArray<short>;
native typedef Texture1DArray<short2>;
native typedef Texture1DArray<short3>;
native typedef Texture1DArray<short4>;
native typedef Texture1DArray<int>;
native typedef Texture1DArray<int2>;
native typedef Texture1DArray<int3>;
native typedef Texture1DArray<int4>;
native typedef Texture1DArray<half>;
native typedef Texture1DArray<half2>;
native typedef Texture1DArray<half3>;
native typedef Texture1DArray<half4>;
native typedef Texture1DArray<float>;
native typedef Texture1DArray<float2>;
native typedef Texture1DArray<float3>;
native typedef Texture1DArray<float4>;
native typedef RWTexture1DArray<ushort>;
native typedef RWTexture1DArray<ushort2>;
native typedef RWTexture1DArray<ushort3>;
native typedef RWTexture1DArray<ushort4>;
native typedef RWTexture1DArray<uint>;
native typedef RWTexture1DArray<uint2>;
native typedef RWTexture1DArray<uint3>;
native typedef RWTexture1DArray<uint4>;
native typedef RWTexture1DArray<short>;
native typedef RWTexture1DArray<short2>;
native typedef RWTexture1DArray<short3>;
native typedef RWTexture1DArray<short4>;
native typedef RWTexture1DArray<int>;
native typedef RWTexture1DArray<int2>;
native typedef RWTexture1DArray<int3>;
native typedef RWTexture1DArray<int4>;
native typedef RWTexture1DArray<half>;
native typedef RWTexture1DArray<half2>;
native typedef RWTexture1DArray<half3>;
native typedef RWTexture1DArray<half4>;
native typedef RWTexture1DArray<float>;
native typedef RWTexture1DArray<float2>;
native typedef RWTexture1DArray<float3>;
native typedef RWTexture1DArray<float4>;
native typedef Texture2D<ushort>;
native typedef Texture2D<ushort2>;
native typedef Texture2D<ushort3>;
native typedef Texture2D<ushort4>;
native typedef Texture2D<uint>;
native typedef Texture2D<uint2>;
native typedef Texture2D<uint3>;
native typedef Texture2D<uint4>;
native typedef Texture2D<short>;
native typedef Texture2D<short2>;
native typedef Texture2D<short3>;
native typedef Texture2D<short4>;
native typedef Texture2D<int>;
native typedef Texture2D<int2>;
native typedef Texture2D<int3>;
native typedef Texture2D<int4>;
native typedef Texture2D<half>;
native typedef Texture2D<half2>;
native typedef Texture2D<half3>;
native typedef Texture2D<half4>;
native typedef Texture2D<float>;
native typedef Texture2D<float2>;
native typedef Texture2D<float3>;
native typedef Texture2D<float4>;
native typedef RWTexture2D<ushort>;
native typedef RWTexture2D<ushort2>;
native typedef RWTexture2D<ushort3>;
native typedef RWTexture2D<ushort4>;
native typedef RWTexture2D<uint>;
native typedef RWTexture2D<uint2>;
native typedef RWTexture2D<uint3>;
native typedef RWTexture2D<uint4>;
native typedef RWTexture2D<short>;
native typedef RWTexture2D<short2>;
native typedef RWTexture2D<short3>;
native typedef RWTexture2D<short4>;
native typedef RWTexture2D<int>;
native typedef RWTexture2D<int2>;
native typedef RWTexture2D<int3>;
native typedef RWTexture2D<int4>;
native typedef RWTexture2D<half>;
native typedef RWTexture2D<half2>;
native typedef RWTexture2D<half3>;
native typedef RWTexture2D<half4>;
native typedef RWTexture2D<float>;
native typedef RWTexture2D<float2>;
native typedef RWTexture2D<float3>;
native typedef RWTexture2D<float4>;
native typedef Texture2DArray<ushort>;
native typedef Texture2DArray<ushort2>;
native typedef Texture2DArray<ushort3>;
native typedef Texture2DArray<ushort4>;
native typedef Texture2DArray<uint>;
native typedef Texture2DArray<uint2>;
native typedef Texture2DArray<uint3>;
native typedef Texture2DArray<uint4>;
native typedef Texture2DArray<short>;
native typedef Texture2DArray<short2>;
native typedef Texture2DArray<short3>;
native typedef Texture2DArray<short4>;
native typedef Texture2DArray<int>;
native typedef Texture2DArray<int2>;
native typedef Texture2DArray<int3>;
native typedef Texture2DArray<int4>;
native typedef Texture2DArray<half>;
native typedef Texture2DArray<half2>;
native typedef Texture2DArray<half3>;
native typedef Texture2DArray<half4>;
native typedef Texture2DArray<float>;
native typedef Texture2DArray<float2>;
native typedef Texture2DArray<float3>;
native typedef Texture2DArray<float4>;
native typedef RWTexture2DArray<ushort>;
native typedef RWTexture2DArray<ushort2>;
native typedef RWTexture2DArray<ushort3>;
native typedef RWTexture2DArray<ushort4>;
native typedef RWTexture2DArray<uint>;
native typedef RWTexture2DArray<uint2>;
native typedef RWTexture2DArray<uint3>;
native typedef RWTexture2DArray<uint4>;
native typedef RWTexture2DArray<short>;
native typedef RWTexture2DArray<short2>;
native typedef RWTexture2DArray<short3>;
native typedef RWTexture2DArray<short4>;
native typedef RWTexture2DArray<int>;
native typedef RWTexture2DArray<int2>;
native typedef RWTexture2DArray<int3>;
native typedef RWTexture2DArray<int4>;
native typedef RWTexture2DArray<half>;
native typedef RWTexture2DArray<half2>;
native typedef RWTexture2DArray<half3>;
native typedef RWTexture2DArray<half4>;
native typedef RWTexture2DArray<float>;
native typedef RWTexture2DArray<float2>;
native typedef RWTexture2DArray<float3>;
native typedef RWTexture2DArray<float4>;
native typedef Texture3D<ushort>;
native typedef Texture3D<ushort2>;
native typedef Texture3D<ushort3>;
native typedef Texture3D<ushort4>;
native typedef Texture3D<uint>;
native typedef Texture3D<uint2>;
native typedef Texture3D<uint3>;
native typedef Texture3D<uint4>;
native typedef Texture3D<short>;
native typedef Texture3D<short2>;
native typedef Texture3D<short3>;
native typedef Texture3D<short4>;
native typedef Texture3D<int>;
native typedef Texture3D<int2>;
native typedef Texture3D<int3>;
native typedef Texture3D<int4>;
native typedef Texture3D<half>;
native typedef Texture3D<half2>;
native typedef Texture3D<half3>;
native typedef Texture3D<half4>;
native typedef Texture3D<float>;
native typedef Texture3D<float2>;
native typedef Texture3D<float3>;
native typedef Texture3D<float4>;
native typedef RWTexture3D<ushort>;
native typedef RWTexture3D<ushort2>;
native typedef RWTexture3D<ushort3>;
native typedef RWTexture3D<ushort4>;
native typedef RWTexture3D<uint>;
native typedef RWTexture3D<uint2>;
native typedef RWTexture3D<uint3>;
native typedef RWTexture3D<uint4>;
native typedef RWTexture3D<short>;
native typedef RWTexture3D<short2>;
native typedef RWTexture3D<short3>;
native typedef RWTexture3D<short4>;
native typedef RWTexture3D<int>;
native typedef RWTexture3D<int2>;
native typedef RWTexture3D<int3>;
native typedef RWTexture3D<int4>;
native typedef RWTexture3D<half>;
native typedef RWTexture3D<half2>;
native typedef RWTexture3D<half3>;
native typedef RWTexture3D<half4>;
native typedef RWTexture3D<float>;
native typedef RWTexture3D<float2>;
native typedef RWTexture3D<float3>;
native typedef RWTexture3D<float4>;
native typedef TextureCube<ushort>;
native typedef TextureCube<ushort2>;
native typedef TextureCube<ushort3>;
native typedef TextureCube<ushort4>;
native typedef TextureCube<uint>;
native typedef TextureCube<uint2>;
native typedef TextureCube<uint3>;
native typedef TextureCube<uint4>;
native typedef TextureCube<short>;
native typedef TextureCube<short2>;
native typedef TextureCube<short3>;
native typedef TextureCube<short4>;
native typedef TextureCube<int>;
native typedef TextureCube<int2>;
native typedef TextureCube<int3>;
native typedef TextureCube<int4>;
native typedef TextureCube<half>;
native typedef TextureCube<half2>;
native typedef TextureCube<half3>;
native typedef TextureCube<half4>;
native typedef TextureCube<float>;
native typedef TextureCube<float2>;
native typedef TextureCube<float3>;
native typedef TextureCube<float4>;
native typedef TextureDepth2D<float>;
native typedef RWTextureDepth2D<float>;
native typedef TextureDepth2DArray<float>;
native typedef RWTextureDepth2DArray<float>;
native typedef TextureDepthCube<float>;

native operator uchar(ushort);
native operator uchar(uint);
native operator uchar(char);
native operator uchar(short);
native operator uchar(int);
native operator uchar(half);
native operator uchar(float);
native operator ushort(uchar);
native operator ushort(uint);
native operator ushort(char);
native operator ushort(short);
native operator ushort(int);
native operator ushort(half);
native operator ushort(float);
native operator uint(uchar);
native operator uint(ushort);
native operator uint(char);
native operator uint(short);
native operator uint(int);
native operator uint(half);
native operator uint(float);
native operator char(uchar);
native operator char(ushort);
native operator char(uint);
native operator char(short);
native operator char(int);
native operator char(half);
native operator char(float);
native operator short(uchar);
native operator short(ushort);
native operator short(uint);
native operator short(char);
native operator short(int);
native operator short(half);
native operator short(float);
native operator int(uchar);
native operator int(ushort);
native operator int(uint);
native operator int(char);
native operator int(short);
native operator int(half);
native operator int(float);
native operator half(uchar);
native operator half(ushort);
native operator half(uint);
native operator half(char);
native operator half(short);
native operator half(int);
native operator half(float);
native operator float(uchar);
native operator float(ushort);
native operator float(uint);
native operator float(char);
native operator float(short);
native operator float(int);
native operator float(half);

native float operator+(float, float);
native float operator-(float, float);
native int operator+(int, int);
native uint operator+(uint, uint);
native bool operator<(int, int);
native bool operator<(uint, uint);
native bool operator<(float, float);
native bool operator==(float, float);
native bool operator==(int, int);
native float operator*(float, float);

// FIXME: These should be auto generated by the compiler.
// https://bugs.webkit.org/show_bug.cgi?id=198861
native bool operator==(thread int*, thread int*);

native bool operator.x(bool2);
native bool operator.y(bool2);
native bool operator.x(bool3);
native bool operator.y(bool3);
native bool operator.z(bool3);
native bool operator.x(bool4);
native bool operator.y(bool4);
native bool operator.z(bool4);
native bool operator.w(bool4);
native bool2 operator.x=(bool2, bool);
native bool2 operator.y=(bool2, bool);
native bool3 operator.x=(bool3, bool);
native bool3 operator.y=(bool3, bool);
native bool3 operator.z=(bool3, bool);
native bool4 operator.x=(bool4, bool);
native bool4 operator.y=(bool4, bool);
native bool4 operator.z=(bool4, bool);
native bool4 operator.w=(bool4, bool);
native uchar operator.x(uchar2);
native uchar operator.y(uchar2);
native uchar operator.x(uchar3);
native uchar operator.y(uchar3);
native uchar operator.z(uchar3);
native uchar operator.x(uchar4);
native uchar operator.y(uchar4);
native uchar operator.z(uchar4);
native uchar operator.w(uchar4);
native uchar2 operator.x=(uchar2, uchar);
native uchar2 operator.y=(uchar2, uchar);
native uchar3 operator.x=(uchar3, uchar);
native uchar3 operator.y=(uchar3, uchar);
native uchar3 operator.z=(uchar3, uchar);
native uchar4 operator.x=(uchar4, uchar);
native uchar4 operator.y=(uchar4, uchar);
native uchar4 operator.z=(uchar4, uchar);
native uchar4 operator.w=(uchar4, uchar);
native ushort operator.x(ushort2);
native ushort operator.y(ushort2);
native ushort operator.x(ushort3);
native ushort operator.y(ushort3);
native ushort operator.z(ushort3);
native ushort operator.x(ushort4);
native ushort operator.y(ushort4);
native ushort operator.z(ushort4);
native ushort operator.w(ushort4);
native ushort2 operator.x=(ushort2, ushort);
native ushort2 operator.y=(ushort2, ushort);
native ushort3 operator.x=(ushort3, ushort);
native ushort3 operator.y=(ushort3, ushort);
native ushort3 operator.z=(ushort3, ushort);
native ushort4 operator.x=(ushort4, ushort);
native ushort4 operator.y=(ushort4, ushort);
native ushort4 operator.z=(ushort4, ushort);
native ushort4 operator.w=(ushort4, ushort);
native uint operator.x(uint2);
native uint operator.y(uint2);
native uint operator.x(uint3);
native uint operator.y(uint3);
native uint operator.z(uint3);
native uint operator.x(uint4);
native uint operator.y(uint4);
native uint operator.z(uint4);
native uint operator.w(uint4);
native uint2 operator.x=(uint2, uint);
native uint2 operator.y=(uint2, uint);
native uint3 operator.x=(uint3, uint);
native uint3 operator.y=(uint3, uint);
native uint3 operator.z=(uint3, uint);
native uint4 operator.x=(uint4, uint);
native uint4 operator.y=(uint4, uint);
native uint4 operator.z=(uint4, uint);
native uint4 operator.w=(uint4, uint);
native char operator.x(char2);
native char operator.y(char2);
native char operator.x(char3);
native char operator.y(char3);
native char operator.z(char3);
native char operator.x(char4);
native char operator.y(char4);
native char operator.z(char4);
native char operator.w(char4);
native char2 operator.x=(char2, char);
native char2 operator.y=(char2, char);
native char3 operator.x=(char3, char);
native char3 operator.y=(char3, char);
native char3 operator.z=(char3, char);
native char4 operator.x=(char4, char);
native char4 operator.y=(char4, char);
native char4 operator.z=(char4, char);
native char4 operator.w=(char4, char);
native short operator.x(short2);
native short operator.y(short2);
native short operator.x(short3);
native short operator.y(short3);
native short operator.z(short3);
native short operator.x(short4);
native short operator.y(short4);
native short operator.z(short4);
native short operator.w(short4);
native short2 operator.x=(short2, short);
native short2 operator.y=(short2, short);
native short3 operator.x=(short3, short);
native short3 operator.y=(short3, short);
native short3 operator.z=(short3, short);
native short4 operator.x=(short4, short);
native short4 operator.y=(short4, short);
native short4 operator.z=(short4, short);
native short4 operator.w=(short4, short);
native int operator.x(int2);
native int operator.y(int2);
native int operator.x(int3);
native int operator.y(int3);
native int operator.z(int3);
native int operator.x(int4);
native int operator.y(int4);
native int operator.z(int4);
native int operator.w(int4);
native int2 operator.x=(int2, int);
native int2 operator.y=(int2, int);
native int3 operator.x=(int3, int);
native int3 operator.y=(int3, int);
native int3 operator.z=(int3, int);
native int4 operator.x=(int4, int);
native int4 operator.y=(int4, int);
native int4 operator.z=(int4, int);
native int4 operator.w=(int4, int);
native half operator.x(half2);
native half operator.y(half2);
native half operator.x(half3);
native half operator.y(half3);
native half operator.z(half3);
native half operator.x(half4);
native half operator.y(half4);
native half operator.z(half4);
native half operator.w(half4);
native half2 operator.x=(half2, half);
native half2 operator.y=(half2, half);
native half3 operator.x=(half3, half);
native half3 operator.y=(half3, half);
native half3 operator.z=(half3, half);
native half4 operator.x=(half4, half);
native half4 operator.y=(half4, half);
native half4 operator.z=(half4, half);
native half4 operator.w=(half4, half);
native float operator.x(float2);
native float operator.y(float2);
native float operator.x(float3);
native float operator.y(float3);
native float operator.z(float3);
native float operator.x(float4);
native float operator.y(float4);
native float operator.z(float4);
native float operator.w(float4);
native float2 operator.x=(float2, float);
native float2 operator.y=(float2, float);
native float3 operator.x=(float3, float);
native float3 operator.y=(float3, float);
native float3 operator.z=(float3, float);
native float4 operator.x=(float4, float);
native float4 operator.y=(float4, float);
native float4 operator.z=(float4, float);
native float4 operator.w=(float4, float);

native float ddx(float);
native float ddy(float);
native void AllMemoryBarrierWithGroupSync();
native void DeviceMemoryBarrierWithGroupSync();
native void GroupMemoryBarrierWithGroupSync();

operator float4(float x, float y, float z, float w) {
    float4 result;
    result.x = x;
    result.y = y;
    result.z = z;
    result.w = w;
    return result;
}

// FIXME: https://bugs.webkit.org/show_bug.cgi?id=192890 Insert the rest of the standard library once the parser is fast enough
