// GENERATED FILE - DO NOT EDIT.
// Generated by gen_emulated_builtin_function_tables.py using data from
// emulated_builtin_function_data_hlsl.json.
//
// Copyright 2019 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// emulated_builtin_functions_hlsl:
//   HLSL code for emulating GLSL builtin functions not present in HLSL.

#include "compiler/translator/BuiltInFunctionEmulator.h"
#include "compiler/translator/tree_util/BuiltIn.h"

namespace sh
{

namespace
{

struct FunctionPair
{
    constexpr FunctionPair(const TSymbolUniqueId &idIn, const char *bodyIn)
        : id(idIn.get()), body(bodyIn)
    {}

    int id;
    const char *body;
};

constexpr FunctionPair g_hlslFunctions[] = {
    {BuiltInId::mod_Float1_Float1,
     "float mod_emu(float x, float y)\n"
     "{\n"
     "    return x - y * floor(x / y);\n"
     "}\n"},
    {BuiltInId::mod_Float2_Float2,
     "float2 mod_emu(float2 x, float2 y)\n"
     "{\n"
     "    return x - y * floor(x / y);\n"
     "}\n"},
    {BuiltInId::mod_Float2_Float1,
     "float2 mod_emu(float2 x, float y)\n"
     "{\n"
     "    return x - y * floor(x / y);\n"
     "}\n"},
    {BuiltInId::mod_Float3_Float3,
     "float3 mod_emu(float3 x, float3 y)\n"
     "{\n"
     "    return x - y * floor(x / y);\n"
     "}\n"},
    {BuiltInId::mod_Float3_Float1,
     "float3 mod_emu(float3 x, float y)\n"
     "{\n"
     "    return x - y * floor(x / y);\n"
     "}\n"},
    {BuiltInId::mod_Float4_Float4,
     "float4 mod_emu(float4 x, float4 y)\n"
     "{\n"
     "    return x - y * floor(x / y);\n"
     "}\n"},
    {BuiltInId::mod_Float4_Float1,
     "float4 mod_emu(float4 x, float y)\n"
     "{\n"
     "    return x - y * floor(x / y);\n"
     "}\n"},
    {BuiltInId::frexp_Float1_Int1,
     "float frexp_emu(float x, out int exp)\n"
     "{\n"
     "    float fexp;\n"
     "    float mantissa = frexp(abs(x), fexp) * sign(x);\n"
     "    exp = int(fexp);\n"
     "    return mantissa;\n"
     "}\n"},
    {BuiltInId::frexp_Float2_Int2,
     "float2 frexp_emu(float2 x, out int2 exp)\n"
     "{\n"
     "    float2 fexp;\n"
     "    float2 mantissa = frexp(abs(x), fexp) * sign(x);\n"
     "    exp = int2(fexp);\n"
     "    return mantissa;\n"
     "}\n"},
    {BuiltInId::frexp_Float3_Int3,
     "float3 frexp_emu(float3 x, out int3 exp)\n"
     "{\n"
     "    float3 fexp;\n"
     "    float3 mantissa = frexp(abs(x), fexp) * sign(x);\n"
     "    exp = int3(fexp);\n"
     "    return mantissa;\n"
     "}\n"},
    {BuiltInId::frexp_Float4_Int4,
     "float4 frexp_emu(float4 x, out int4 exp)\n"
     "{\n"
     "    float4 fexp;\n"
     "    float4 mantissa = frexp(abs(x), fexp) * sign(x);\n"
     "    exp = int4(fexp);\n"
     "    return mantissa;\n"
     "}\n"},
    {BuiltInId::ldexp_Float1_Int1,
     "float ldexp_emu(float x, int exp)\n"
     "{\n"
     "    return ldexp(x, float(exp));\n"
     "}\n"},
    {BuiltInId::ldexp_Float2_Int2,
     "float2 ldexp_emu(float2 x, int2 exp)\n"
     "{\n"
     "    return ldexp(x, float2(exp));\n"
     "}\n"},
    {BuiltInId::ldexp_Float3_Int3,
     "float3 ldexp_emu(float3 x, int3 exp)\n"
     "{\n"
     "    return ldexp(x, float3(exp));\n"
     "}\n"},
    {BuiltInId::ldexp_Float4_Int4,
     "float4 ldexp_emu(float4 x, int4 exp)\n"
     "{\n"
     "    return ldexp(x, float4(exp));\n"
     "}\n"},
    {BuiltInId::faceforward_Float1_Float1_Float1,
     "float faceforward_emu(float N, float I, float Nref)\n"
     "{\n"
     "    if(dot(Nref, I) >= 0)\n"
     "    {\n"
     "        return -N;\n"
     "    }\n"
     "    else\n"
     "    {\n"
     "        return N;\n"
     "    }\n"
     "}\n"},
    {BuiltInId::faceforward_Float2_Float2_Float2,
     "float2 faceforward_emu(float2 N, float2 I, float2 Nref)\n"
     "{\n"
     "    if(dot(Nref, I) >= 0)\n"
     "    {\n"
     "        return -N;\n"
     "    }\n"
     "    else\n"
     "    {\n"
     "        return N;\n"
     "    }\n"
     "}\n"},
    {BuiltInId::faceforward_Float3_Float3_Float3,
     "float3 faceforward_emu(float3 N, float3 I, float3 Nref)\n"
     "{\n"
     "    if(dot(Nref, I) >= 0)\n"
     "    {\n"
     "        return -N;\n"
     "    }\n"
     "    else\n"
     "    {\n"
     "        return N;\n"
     "    }\n"
     "}\n"},
    {BuiltInId::faceforward_Float4_Float4_Float4,
     "float4 faceforward_emu(float4 N, float4 I, float4 Nref)\n"
     "{\n"
     "    if(dot(Nref, I) >= 0)\n"
     "    {\n"
     "        return -N;\n"
     "    }\n"
     "    else\n"
     "    {\n"
     "        return N;\n"
     "    }\n"
     "}\n"},
    {BuiltInId::atan_Float1_Float1,
     "float atan_emu(float y, float x)\n"
     "{\n"
     "    if(x == 0 && y == 0) x = 1;\n"
     "    return atan2(y, x);\n"
     "}\n"},
    {BuiltInId::atan_Float2_Float2,
     "float2 atan_emu(float2 y, float2 x)\n"
     "{\n"
     "    if(x[0] == 0 && y[0] == 0) x[0] = 1;\n"
     "    if(x[1] == 0 && y[1] == 0) x[1] = 1;\n"
     "    return float2(atan2(y[0], x[0]), atan2(y[1], x[1]));\n"
     "}\n"},
    {BuiltInId::atan_Float3_Float3,
     "float3 atan_emu(float3 y, float3 x)\n"
     "{\n"
     "    if(x[0] == 0 && y[0] == 0) x[0] = 1;\n"
     "    if(x[1] == 0 && y[1] == 0) x[1] = 1;\n"
     "    if(x[2] == 0 && y[2] == 0) x[2] = 1;\n"
     "    return float3(atan2(y[0], x[0]), atan2(y[1], x[1]), atan2(y[2], x[2]));\n"
     "}\n"},
    {BuiltInId::atan_Float4_Float4,
     "float4 atan_emu(float4 y, float4 x)\n"
     "{\n"
     "    if(x[0] == 0 && y[0] == 0) x[0] = 1;\n"
     "    if(x[1] == 0 && y[1] == 0) x[1] = 1;\n"
     "    if(x[2] == 0 && y[2] == 0) x[2] = 1;\n"
     "    if(x[3] == 0 && y[3] == 0) x[3] = 1;\n"
     "    return float4(atan2(y[0], x[0]), atan2(y[1], x[1]), atan2(y[2], \n"
     "    x[2]), atan2(y[3], x[3]));\n"
     "}\n"},
    {BuiltInId::asinh_Float1,
     "float asinh_emu(in float x)\n"
     "{\n"
     "    return log(x + sqrt(pow(x, 2.0) + 1.0));\n"
     "}\n"},
    {BuiltInId::asinh_Float2,
     "float2 asinh_emu(in float2 x)\n"
     "{\n"
     "    return log(x + sqrt(pow(x, 2.0) + 1.0));\n"
     "}\n"},
    {BuiltInId::asinh_Float3,
     "float3 asinh_emu(in float3 x)\n"
     "{\n"
     "    return log(x + sqrt(pow(x, 2.0) + 1.0));\n"
     "}\n"},
    {BuiltInId::asinh_Float4,
     "float4 asinh_emu(in float4 x)\n"
     "{\n"
     "    return log(x + sqrt(pow(x, 2.0) + 1.0));\n"
     "}\n"},
    {BuiltInId::acosh_Float1,
     "float acosh_emu(in float x)\n"
     "{\n"
     "    return log(x + sqrt(x + 1.0) * sqrt(x - 1.0));\n"
     "}\n"},
    {BuiltInId::acosh_Float2,
     "float2 acosh_emu(in float2 x)\n"
     "{\n"
     "    return log(x + sqrt(x + 1.0) * sqrt(x - 1.0));\n"
     "}\n"},
    {BuiltInId::acosh_Float3,
     "float3 acosh_emu(in float3 x)\n"
     "{\n"
     "    return log(x + sqrt(x + 1.0) * sqrt(x - 1.0));\n"
     "}\n"},
    {BuiltInId::acosh_Float4,
     "float4 acosh_emu(in float4 x)\n"
     "{\n"
     "    return log(x + sqrt(x + 1.0) * sqrt(x - 1.0));\n"
     "}\n"},
    {BuiltInId::atanh_Float1,
     "float atanh_emu(in float x)\n"
     "{\n"
     "    return 0.5 * log((1.0 + x) / (1.0 - x));\n"
     "}\n"},
    {BuiltInId::atanh_Float2,
     "float2 atanh_emu(in float2 x)\n"
     "{\n"
     "    return 0.5 * log((1.0 + x) / (1.0 - x));\n"
     "}\n"},
    {BuiltInId::atanh_Float3,
     "float3 atanh_emu(in float3 x)\n"
     "{\n"
     "    return 0.5 * log((1.0 + x) / (1.0 - x));\n"
     "}\n"},
    {BuiltInId::atanh_Float4,
     "float4 atanh_emu(in float4 x)\n"
     "{\n"
     "    return 0.5 * log((1.0 + x) / (1.0 - x));\n"
     "}\n"},
    {BuiltInId::roundEven_Float1,
     "float roundEven_emu(in float x)\n"
     "{\n"
     "    return (frac(x) == 0.5 && trunc(x) % 2.0 == 0.0) ? trunc(x) : round(x);\n"
     "}\n"},
    {BuiltInId::roundEven_Float2,
     "float2 roundEven_emu(in float2 x)\n"
     "{\n"
     "    float2 v;\n"
     "    v[0] = (frac(x[0]) == 0.5 && trunc(x[0]) % 2.0 == 0.0) ? trunc(x[0]) : round(x[0]);\n"
     "    v[1] = (frac(x[1]) == 0.5 && trunc(x[1]) % 2.0 == 0.0) ? trunc(x[1]) : round(x[1]);\n"
     "    return v;\n"
     "}\n"},
    {BuiltInId::roundEven_Float3,
     "float3 roundEven_emu(in float3 x)\n"
     "{\n"
     "    float3 v;\n"
     "    v[0] = (frac(x[0]) == 0.5 && trunc(x[0]) % 2.0 == 0.0) ? trunc(x[0]) : round(x[0]);\n"
     "    v[1] = (frac(x[1]) == 0.5 && trunc(x[1]) % 2.0 == 0.0) ? trunc(x[1]) : round(x[1]);\n"
     "    v[2] = (frac(x[2]) == 0.5 && trunc(x[2]) % 2.0 == 0.0) ? trunc(x[2]) : round(x[2]);\n"
     "    return v;\n"
     "}\n"},
    {BuiltInId::roundEven_Float4,
     "float4 roundEven_emu(in float4 x)\n"
     "{\n"
     "    float4 v;\n"
     "    v[0] = (frac(x[0]) == 0.5 && trunc(x[0]) % 2.0 == 0.0) ? trunc(x[0]) : round(x[0]);\n"
     "    v[1] = (frac(x[1]) == 0.5 && trunc(x[1]) % 2.0 == 0.0) ? trunc(x[1]) : round(x[1]);\n"
     "    v[2] = (frac(x[2]) == 0.5 && trunc(x[2]) % 2.0 == 0.0) ? trunc(x[2]) : round(x[2]);\n"
     "    v[3] = (frac(x[3]) == 0.5 && trunc(x[3]) % 2.0 == 0.0) ? trunc(x[3]) : round(x[3]);\n"
     "    return v;\n"
     "}\n"},
    {BuiltInId::packSnorm2x16_Float2,
     "int webgl_toSnorm16(in float x) {\n"
     "    return int(round(clamp(x, -1.0, 1.0) * 32767.0));\n"
     "}\n"
     "uint packSnorm2x16_emu(in float2 v)\n"
     "{\n"
     "    int x = webgl_toSnorm16(v.x);\n"
     "    int y = webgl_toSnorm16(v.y);\n"
     "    return (asuint(y) << 16) | (asuint(x) & 0xffffu);\n"
     "}\n"},
    {BuiltInId::packUnorm2x16_Float2,
     "uint webgl_toUnorm16(in float x) {\n"
     "    return uint(round(clamp(x, 0.0, 1.0) * 65535.0));\n"
     "}\n"
     "uint packUnorm2x16_emu(in float2 v)\n"
     "{\n"
     "    uint x = webgl_toUnorm16(v.x);\n"
     "    uint y = webgl_toUnorm16(v.y);\n"
     "    return (y << 16) | x;\n"
     "}\n"},
    {BuiltInId::packHalf2x16_Float2,
     "uint packHalf2x16_emu(in float2 v)\n"
     "{\n"
     "    uint x = f32tof16(v.x);\n"
     "    uint y = f32tof16(v.y);\n"
     "    return (y << 16) | x;\n"
     "}\n"},
    {BuiltInId::unpackSnorm2x16_UInt1,
     "float webgl_fromSnorm16(in uint x) {\n"
     "    int xi = asint(x & 0x7fffu) - asint(x & 0x8000u);\n"
     "    return clamp(float(xi) / 32767.0, -1.0, 1.0);\n"
     "}\n"
     "float2 unpackSnorm2x16_emu(in uint u)\n"
     "{\n"
     "    uint y = (u >> 16);\n"
     "    uint x = u;\n"
     "    return float2(webgl_fromSnorm16(x), webgl_fromSnorm16(y));\n"
     "}\n"},
    {BuiltInId::unpackUnorm2x16_UInt1,
     "float webgl_fromUnorm16(in uint x) {\n"
     "    return float(x) / 65535.0;\n"
     "}\n"
     "float2 unpackUnorm2x16_emu(in uint u)\n"
     "{\n"
     "    uint y = (u >> 16);\n"
     "    uint x = u & 0xffffu;\n"
     "    return float2(webgl_fromUnorm16(x), webgl_fromUnorm16(y));\n"
     "}\n"},
    {BuiltInId::unpackHalf2x16_UInt1,
     "float2 unpackHalf2x16_emu(in uint u)\n"
     "{\n"
     "    uint y = (u >> 16);\n"
     "    uint x = u & 0xffffu;\n"
     "    return float2(f16tof32(x), f16tof32(y));\n"
     "}\n"},
    {BuiltInId::packSnorm4x8_Float4,
     "int webgl_toSnorm8(in float x) {\n"
     "    return int(round(clamp(x, -1.0, 1.0) * 127.0));\n"
     "}\n"
     "uint packSnorm4x8_emu(in float4 v)\n"
     "{\n"
     "    int x = webgl_toSnorm8(v.x);\n"
     "    int y = webgl_toSnorm8(v.y);\n"
     "    int z = webgl_toSnorm8(v.z);\n"
     "    int w = webgl_toSnorm8(v.w);\n"
     "    return ((asuint(w) & 0xffu) << 24) | ((asuint(z) & 0xffu) << 16) \n"
     "    | ((asuint(y) & 0xffu) << 8) | (asuint(x) & 0xffu);\n"
     "}\n"},
    {BuiltInId::packUnorm4x8_Float4,
     "uint webgl_toUnorm8(in float x) {\n"
     "    return uint(round(clamp(x, 0.0, 1.0) * 255.0));\n"
     "}\n"
     "uint packUnorm4x8_emu(in float4 v)\n"
     "{\n"
     "    uint x = webgl_toUnorm8(v.x);\n"
     "    uint y = webgl_toUnorm8(v.y);\n"
     "    uint z = webgl_toUnorm8(v.z);\n"
     "    uint w = webgl_toUnorm8(v.w);\n"
     "    return (w << 24) | (z << 16) | (y << 8) | x;\n"
     "}\n"},
    {BuiltInId::unpackSnorm4x8_UInt1,
     "float webgl_fromSnorm8(in uint x) {\n"
     "    int xi = asint(x & 0x7fu) - asint(x & 0x80u);\n"
     "    return clamp(float(xi) / 127.0, -1.0, 1.0);\n"
     "}\n"
     "float4 unpackSnorm4x8_emu(in uint u)\n"
     "{\n"
     "    uint w = (u >> 24);\n"
     "    uint z = (u >> 16);\n"
     "    uint y = (u >> 8);\n"
     "    uint x = u;\n"
     "    return float4(webgl_fromSnorm8(x), webgl_fromSnorm8(y), \n"
     "    webgl_fromSnorm8(z), webgl_fromSnorm8(w));\n"
     "}\n"},
    {BuiltInId::unpackUnorm4x8_UInt1,
     "float webgl_fromUnorm8(in uint x) {\n"
     "    return float(x) / 255.0;\n"
     "}\n"
     "float4 unpackUnorm4x8_emu(in uint u)\n"
     "{\n"
     "    uint w = (u >> 24) & 0xffu;\n"
     "    uint z = (u >> 16) & 0xffu;\n"
     "    uint y = (u >> 8) & 0xffu;\n"
     "    uint x = u & 0xffu;\n"
     "    return float4(webgl_fromUnorm8(x), webgl_fromUnorm8(y), \n"
     "    webgl_fromUnorm8(z), webgl_fromUnorm8(w));\n"
     "}\n"},
    // The matrix resulting from outer product needs to be transposed
    // (matrices are stored as transposed to simplify element access in HLSL).
    // So the function should return transpose(c * r) where c is a column vector
    // and r is a row vector. This can be simplified by using the following
    // formula:
    // transpose(c * r) = transpose(r) * transpose(c)
    // transpose(r) and transpose(c) are in a sense free, since to get the
    // transpose of r, we simply can build a column matrix out of the original
    // vector instead of a row matrix.
    {BuiltInId::outerProduct_Float2_Float2,
     "float2x2 outerProduct_emu(in float2 c, in float2 r)\n"
     "{\n"
     "    return mul(float2x1(r), float1x2(c));\n"
     "}\n"},
    {BuiltInId::outerProduct_Float3_Float3,
     "float3x3 outerProduct_emu(in float3 c, in float3 r)\n"
     "{\n"
     "    return mul(float3x1(r), float1x3(c));\n"
     "}\n"},
    {BuiltInId::outerProduct_Float4_Float4,
     "float4x4 outerProduct_emu(in float4 c, in float4 r)\n"
     "{\n"
     "    return mul(float4x1(r), float1x4(c));\n"
     "}\n"},
    {BuiltInId::outerProduct_Float3_Float2,
     "float2x3 outerProduct_emu(in float3 c, in float2 r)\n"
     "{\n"
     "    return mul(float2x1(r), float1x3(c));\n"
     "}\n"},
    {BuiltInId::outerProduct_Float2_Float3,
     "float3x2 outerProduct_emu(in float2 c, in float3 r)\n"
     "{\n"
     "    return mul(float3x1(r), float1x2(c));\n"
     "}\n"},
    {BuiltInId::outerProduct_Float4_Float2,
     "float2x4 outerProduct_emu(in float4 c, in float2 r)\n"
     "{\n"
     "    return mul(float2x1(r), float1x4(c));\n"
     "}\n"},
    {BuiltInId::outerProduct_Float2_Float4,
     "float4x2 outerProduct_emu(in float2 c, in float4 r)\n"
     "{\n"
     "    return mul(float4x1(r), float1x2(c));\n"
     "}\n"},
    {BuiltInId::outerProduct_Float4_Float3,
     "float3x4 outerProduct_emu(in float4 c, in float3 r)\n"
     "{\n"
     "    return mul(float3x1(r), float1x4(c));\n"
     "}\n"},
    {BuiltInId::outerProduct_Float3_Float4,
     "float4x3 outerProduct_emu(in float3 c, in float4 r)\n"
     "{\n"
     "    return mul(float4x1(r), float1x3(c));\n"
     "}\n"},
    // Remember here that the parameter matrix is actually the transpose
    // of the matrix that we're trying to invert, and the resulting matrix
    // should also be the transpose of the inverse.
    // When accessing the parameter matrix with m[a][b] it can be thought of so
    // that a is the column and b is the row of the matrix that we're inverting.
    // We calculate the inverse as the adjugate matrix divided by the
    // determinant of the matrix being inverted. However, as the result needs
    // to be transposed, we actually use of the transpose of the adjugate matrix
    // which happens to be the cofactor matrix. That's stored in 'cof'.
    // We don't need to care about divide-by-zero since results are undefined
    // for singular or poorly-conditioned matrices.
    {BuiltInId::inverse_Float2x2,
     "float2x2 inverse_emu(in float2x2 m)\n"
     "{\n"
     "    float2x2 cof = { m[1][1], -m[0][1], -m[1][0], m[0][0] };\n"
     "    return cof / determinant(transpose(m));\n"
     "}\n"},
    // cofAB is the cofactor for column A and row B.
    {BuiltInId::inverse_Float3x3,
     "float3x3 inverse_emu(in float3x3 m)\n"
     "{\n"
     "    float cof00 = m[1][1] * m[2][2] - m[2][1] * m[1][2];\n"
     "    float cof01 = -(m[1][0] * m[2][2] - m[2][0] * m[1][2]);\n"
     "    float cof02 = m[1][0] * m[2][1] - m[2][0] * m[1][1];\n"
     "    float cof10 = -(m[0][1] * m[2][2] - m[2][1] * m[0][2]);\n"
     "    float cof11 = m[0][0] * m[2][2] - m[2][0] * m[0][2];\n"
     "    float cof12 = -(m[0][0] * m[2][1] - m[2][0] * m[0][1]);\n"
     "    float cof20 = m[0][1] * m[1][2] - m[1][1] * m[0][2];\n"
     "    float cof21 = -(m[0][0] * m[1][2] - m[1][0] * m[0][2]);\n"
     "    float cof22 = m[0][0] * m[1][1] - m[1][0] * m[0][1];\n"
     "    float3x3 cof = { cof00, cof10, cof20, cof01, cof11, cof21, cof02, cof12, cof22 };\n"
     "    return cof / determinant(transpose(m));\n"
     "}\n"},
    {BuiltInId::inverse_Float4x4,
     "float4x4 inverse_emu(in float4x4 m)\n"
     "{\n"
     "    float cof00 = m[1][1] * m[2][2] * m[3][3] + m[2][1] * m[3][2] * m[1][3] + m[3][1] * \n"
     "    m[1][2] * m[2][3]\n"
     "     - m[1][1] * m[3][2] * m[2][3] - m[2][1] * m[1][2] * m[3][3] - m[3][1] * m[2][2] * \n"
     "    m[1][3];\n"
     "    float cof01 = -(m[1][0] * m[2][2] * m[3][3] + m[2][0] * m[3][2] * m[1][3] + m[3][0] * \n"
     "    m[1][2] * m[2][3]\n"
     "     - m[1][0] * m[3][2] * m[2][3] - m[2][0] * m[1][2] * m[3][3] - m[3][0] * m[2][2] * \n"
     "    m[1][3]);\n"
     "    float cof02 = m[1][0] * m[2][1] * m[3][3] + m[2][0] * m[3][1] * m[1][3] + m[3][0] * \n"
     "    m[1][1] * m[2][3]\n"
     "     - m[1][0] * m[3][1] * m[2][3] - m[2][0] * m[1][1] * m[3][3] - m[3][0] * m[2][1] * \n"
     "    m[1][3];\n"
     "    float cof03 = -(m[1][0] * m[2][1] * m[3][2] + m[2][0] * m[3][1] * m[1][2] + m[3][0] * \n"
     "    m[1][1] * m[2][2]\n"
     "     - m[1][0] * m[3][1] * m[2][2] - m[2][0] * m[1][1] * m[3][2] - m[3][0] * m[2][1] * \n"
     "    m[1][2]);\n"
     "    float cof10 = -(m[0][1] * m[2][2] * m[3][3] + m[2][1] * m[3][2] * m[0][3] + m[3][1] * \n"
     "    m[0][2] * m[2][3]\n"
     "     - m[0][1] * m[3][2] * m[2][3] - m[2][1] * m[0][2] * m[3][3] - m[3][1] * m[2][2] * \n"
     "    m[0][3]);\n"
     "    float cof11 = m[0][0] * m[2][2] * m[3][3] + m[2][0] * m[3][2] * m[0][3] + m[3][0] * \n"
     "    m[0][2] * m[2][3]\n"
     "     - m[0][0] * m[3][2] * m[2][3] - m[2][0] * m[0][2] * m[3][3] - m[3][0] * m[2][2] * \n"
     "    m[0][3];\n"
     "    float cof12 = -(m[0][0] * m[2][1] * m[3][3] + m[2][0] * m[3][1] * m[0][3] + m[3][0] * \n"
     "    m[0][1] * m[2][3]\n"
     "     - m[0][0] * m[3][1] * m[2][3] - m[2][0] * m[0][1] * m[3][3] - m[3][0] * m[2][1] * \n"
     "    m[0][3]);\n"
     "    float cof13 = m[0][0] * m[2][1] * m[3][2] + m[2][0] * m[3][1] * m[0][2] + m[3][0] * \n"
     "    m[0][1] * m[2][2]\n"
     "     - m[0][0] * m[3][1] * m[2][2] - m[2][0] * m[0][1] * m[3][2] - m[3][0] * m[2][1] * \n"
     "    m[0][2];\n"
     "    float cof20 = m[0][1] * m[1][2] * m[3][3] + m[1][1] * m[3][2] * m[0][3] + m[3][1] * \n"
     "    m[0][2] * m[1][3]\n"
     "     - m[0][1] * m[3][2] * m[1][3] - m[1][1] * m[0][2] * m[3][3] - m[3][1] * m[1][2] * \n"
     "    m[0][3];\n"
     "    float cof21 = -(m[0][0] * m[1][2] * m[3][3] + m[1][0] * m[3][2] * m[0][3] + m[3][0] * \n"
     "    m[0][2] * m[1][3]\n"
     "     - m[0][0] * m[3][2] * m[1][3] - m[1][0] * m[0][2] * m[3][3] - m[3][0] * m[1][2] * \n"
     "    m[0][3]);\n"
     "    float cof22 = m[0][0] * m[1][1] * m[3][3] + m[1][0] * m[3][1] * m[0][3] + m[3][0] * \n"
     "    m[0][1] * m[1][3]\n"
     "     - m[0][0] * m[3][1] * m[1][3] - m[1][0] * m[0][1] * m[3][3] - m[3][0] * m[1][1] * \n"
     "    m[0][3];\n"
     "    float cof23 = -(m[0][0] * m[1][1] * m[3][2] + m[1][0] * m[3][1] * m[0][2] + m[3][0] * \n"
     "    m[0][1] * m[1][2]\n"
     "     - m[0][0] * m[3][1] * m[1][2] - m[1][0] * m[0][1] * m[3][2] - m[3][0] * m[1][1] * \n"
     "    m[0][2]);\n"
     "    float cof30 = -(m[0][1] * m[1][2] * m[2][3] + m[1][1] * m[2][2] * m[0][3] + m[2][1] * \n"
     "    m[0][2] * m[1][3]\n"
     "     - m[0][1] * m[2][2] * m[1][3] - m[1][1] * m[0][2] * m[2][3] - m[2][1] * m[1][2] * \n"
     "    m[0][3]);\n"
     "    float cof31 = m[0][0] * m[1][2] * m[2][3] + m[1][0] * m[2][2] * m[0][3] + m[2][0] * \n"
     "    m[0][2] * m[1][3]\n"
     "     - m[0][0] * m[2][2] * m[1][3] - m[1][0] * m[0][2] * m[2][3] - m[2][0] * m[1][2] * \n"
     "    m[0][3];\n"
     "    float cof32 = -(m[0][0] * m[1][1] * m[2][3] + m[1][0] * m[2][1] * m[0][3] + m[2][0] * \n"
     "    m[0][1] * m[1][3]\n"
     "     - m[0][0] * m[2][1] * m[1][3] - m[1][0] * m[0][1] * m[2][3] - m[2][0] * m[1][1] * \n"
     "    m[0][3]);\n"
     "    float cof33 = m[0][0] * m[1][1] * m[2][2] + m[1][0] * m[2][1] * m[0][2] + m[2][0] * \n"
     "    m[0][1] * m[1][2]\n"
     "     - m[0][0] * m[2][1] * m[1][2] - m[1][0] * m[0][1] * m[2][2] - m[2][0] * m[1][1] * \n"
     "    m[0][2];\n"
     "    float4x4 cof = { cof00, cof10, cof20, cof30, cof01, cof11, cof21, cof31,\n"
     "     cof02, cof12, cof22, cof32, cof03, cof13, cof23, cof33 };\n"
     "    return cof / determinant(transpose(m));\n"
     "}\n"},
    // Emulate ESSL3 variant of mix that takes last argument as boolean vector.
    // genType mix(genType x, genType y, genBType a): Selects which vector each returned component
    // comes from. For a component of 'a' that is false, the corresponding component of 'x' is
    // returned. For a component of 'a' that is true, the corresponding component of 'y' is
    // returned.
    {BuiltInId::mix_Float1_Float1_Bool1,
     "float mix_emu(float x, float y, bool a)\n"
     "{\n"
     "    return a ? y : x;\n"
     "}\n"},
    {BuiltInId::mix_Float2_Float2_Bool2,
     "float2 mix_emu(float2 x, float2 y, bool2 a)\n"
     "{\n"
     "    return a ? y : x;\n"
     "}\n"},
    {BuiltInId::mix_Float3_Float3_Bool3,
     "float3 mix_emu(float3 x, float3 y, bool3 a)\n"
     "{\n"
     "    return a ? y : x;\n"
     "}\n"},
    {BuiltInId::mix_Float4_Float4_Bool4,
     "float4 mix_emu(float4 x, float4 y, bool4 a)\n"
     "{\n"
     "    return a ? y : x;\n"
     "}\n"},
    {BuiltInId::bitfieldExtract_UInt1_Int1_Int1,
     "uint bitfieldExtract_emu(uint value, int offset, int bits)\n"
     "{\n"
     "    if (offset < 0 || bits <= 0 || offset >= 32 || bits > 32 || offset + bits > 32)\n"
     "    {\n"
     "        return 0u;\n"
     "    }\n"
     "    uint maskMsb = (1u << (bits - 1));\n"
     "    uint mask = ((maskMsb - 1u) | maskMsb) << offset;\n"
     "    return (value & mask) >> offset;\n"
     "}\n"},
    {BuiltInId::bitfieldExtract_UInt2_Int1_Int1,
     "uint2 bitfieldExtract_emu(uint2 value, int offset, int bits)\n"
     "{\n"
     "    if (offset < 0 || bits <= 0 || offset >= 32 || bits > 32 || offset + bits > 32)\n"
     "    {\n"
     "        return uint2(0u, 0u);\n"
     "    }\n"
     "    uint maskMsb = (1u << (bits - 1));\n"
     "    uint mask = ((maskMsb - 1u) | maskMsb) << offset;\n"
     "    return (value & mask) >> offset;\n"
     "}\n"},
    {BuiltInId::bitfieldExtract_UInt3_Int1_Int1,
     "uint3 bitfieldExtract_emu(uint3 value, int offset, int bits)\n"
     "{\n"
     "    if (offset < 0 || bits <= 0 || offset >= 32 || bits > 32 || offset + bits > 32)\n"
     "    {\n"
     "        return uint3(0u, 0u, 0u);\n"
     "    }\n"
     "    uint maskMsb = (1u << (bits - 1));\n"
     "    uint mask = ((maskMsb - 1u) | maskMsb) << offset;\n"
     "    return (value & mask) >> offset;\n"
     "}\n"},
    {BuiltInId::bitfieldExtract_UInt4_Int1_Int1,
     "uint4 bitfieldExtract_emu(uint4 value, int offset, int bits)\n"
     "{\n"
     "    if (offset < 0 || bits <= 0 || offset >= 32 || bits > 32 || offset + bits > 32)\n"
     "    {\n"
     "        return uint4(0u, 0u, 0u, 0u);\n"
     "    }\n"
     "    uint maskMsb = (1u << (bits - 1));\n"
     "    uint mask = ((maskMsb - 1u) | maskMsb) << offset;\n"
     "    return (value & mask) >> offset;\n"
     "}\n"},
    {BuiltInId::bitfieldExtract_Int1_Int1_Int1,
     "int bitfieldExtract_emu(int value, int offset, int bits)\n"
     "{\n"
     "    if (offset < 0 || bits <= 0 || offset >= 32 || bits > 32 || offset + bits > 32)\n"
     "    {\n"
     "        return 0;\n"
     "    }\n"
     "    uint maskMsb = (1u << (bits - 1));\n"
     "    uint mask = ((maskMsb - 1u) | maskMsb) << offset;\n"
     "    uint resultUnsigned = (asuint(value) & mask) >> offset;\n"
     "    if (bits != 32 && (resultUnsigned & maskMsb) != 0)\n"
     "    {\n"
     "        uint higherBitsMask = ((1u << (32 - bits)) - 1u) << bits;\n"
     "        resultUnsigned |= higherBitsMask;\n"
     "    }\n"
     "    return asint(resultUnsigned);\n"
     "}\n"},
    {BuiltInId::bitfieldExtract_Int2_Int1_Int1,
     "int2 bitfieldExtract_emu(int2 value, int offset, int bits)\n"
     "{\n"
     "    if (offset < 0 || bits <= 0 || offset >= 32 || bits > 32 || offset + bits > 32)\n"
     "    {\n"
     "        return int2(0, 0);\n"
     "    }\n"
     "    uint maskMsb = (1u << (bits - 1));\n"
     "    uint mask = ((maskMsb - 1u) | maskMsb) << offset;\n"
     "    uint2 resultUnsigned = (asuint(value) & mask) >> offset;\n"
     "    if (bits != 32)\n"
     "    {\n"
     "        uint higherBitsMask = ((1u << (32 - bits)) - 1u) << bits;\n"
     "        resultUnsigned |= ((resultUnsigned & maskMsb) >> (bits - 1)) * higherBitsMask;\n"
     "    }\n"
     "    return asint(resultUnsigned);\n"
     "}\n"},
    {BuiltInId::bitfieldExtract_Int3_Int1_Int1,
     "int3 bitfieldExtract_emu(int3 value, int offset, int bits)\n"
     "{\n"
     "    if (offset < 0 || bits <= 0 || offset >= 32 || bits > 32 || offset + bits > 32)\n"
     "    {\n"
     "        return int3(0, 0, 0);\n"
     "    }\n"
     "    uint maskMsb = (1u << (bits - 1));\n"
     "    uint mask = ((maskMsb - 1u) | maskMsb) << offset;\n"
     "    uint3 resultUnsigned = (asuint(value) & mask) >> offset;\n"
     "    if (bits != 32)\n"
     "    {\n"
     "        uint higherBitsMask = ((1u << (32 - bits)) - 1u) << bits;\n"
     "        resultUnsigned |= ((resultUnsigned & maskMsb) >> (bits - 1)) * higherBitsMask;\n"
     "    }\n"
     "    return asint(resultUnsigned);\n"
     "}\n"},
    {BuiltInId::bitfieldExtract_Int4_Int1_Int1,
     "int4 bitfieldExtract_emu(int4 value, int offset, int bits)\n"
     "{\n"
     "    if (offset < 0 || bits <= 0 || offset >= 32 || bits > 32 || offset + bits > 32)\n"
     "    {\n"
     "        return int4(0, 0, 0, 0);\n"
     "    }\n"
     "    uint maskMsb = (1u << (bits - 1));\n"
     "    uint mask = ((maskMsb - 1u) | maskMsb) << offset;\n"
     "    uint4 resultUnsigned = (asuint(value) & mask) >> offset;\n"
     "    if (bits != 32)\n"
     "    {\n"
     "        uint higherBitsMask = ((1u << (32 - bits)) - 1u) << bits;\n"
     "        resultUnsigned |= ((resultUnsigned & maskMsb) >> (bits - 1)) * higherBitsMask;\n"
     "    }\n"
     "    return asint(resultUnsigned);\n"
     "}\n"},
    {BuiltInId::bitfieldInsert_UInt1_UInt1_Int1_Int1,
     "uint bitfieldInsert_emu(uint base, uint insert, int offset, int bits)\n"
     "{\n"
     "    if (offset < 0 || bits <= 0 || offset >= 32 || bits > 32 || offset + bits > 32)\n"
     "    {\n"
     "        return base;\n"
     "    }\n"
     "    uint maskMsb = (1u << (bits - 1));\n"
     "    uint insertMask = ((maskMsb - 1u) | maskMsb) << offset;\n"
     "    uint baseMask = ~insertMask;\n"
     "    return (base & baseMask) | ((insert << offset) & insertMask);\n"
     "}\n"},
    {BuiltInId::bitfieldInsert_UInt2_UInt2_Int1_Int1,
     "uint2 bitfieldInsert_emu(uint2 base, uint2 insert, int offset, int bits)\n"
     "{\n"
     "    if (offset < 0 || bits <= 0 || offset >= 32 || bits > 32 || offset + bits > 32)\n"
     "    {\n"
     "        return base;\n"
     "    }\n"
     "    uint maskMsb = (1u << (bits - 1));\n"
     "    uint insertMask = ((maskMsb - 1u) | maskMsb) << offset;\n"
     "    uint baseMask = ~insertMask;\n"
     "    return (base & baseMask) | ((insert << offset) & insertMask);\n"
     "}\n"},
    {BuiltInId::bitfieldInsert_UInt3_UInt3_Int1_Int1,
     "uint3 bitfieldInsert_emu(uint3 base, uint3 insert, int offset, int bits)\n"
     "{\n"
     "    if (offset < 0 || bits <= 0 || offset >= 32 || bits > 32 || offset + bits > 32)\n"
     "    {\n"
     "        return base;\n"
     "    }\n"
     "    uint maskMsb = (1u << (bits - 1));\n"
     "    uint insertMask = ((maskMsb - 1u) | maskMsb) << offset;\n"
     "    uint baseMask = ~insertMask;\n"
     "    return (base & baseMask) | ((insert << offset) & insertMask);\n"
     "}\n"},
    {BuiltInId::bitfieldInsert_UInt4_UInt4_Int1_Int1,
     "uint4 bitfieldInsert_emu(uint4 base, uint4 insert, int offset, int bits)\n"
     "{\n"
     "    if (offset < 0 || bits <= 0 || offset >= 32 || bits > 32 || offset + bits > 32)\n"
     "    {\n"
     "        return base;\n"
     "    }\n"
     "    uint maskMsb = (1u << (bits - 1));\n"
     "    uint insertMask = ((maskMsb - 1u) | maskMsb) << offset;\n"
     "    uint baseMask = ~insertMask;\n"
     "    return (base & baseMask) | ((insert << offset) & insertMask);\n"
     "}\n"},
    {BuiltInId::bitfieldInsert_Int1_Int1_Int1_Int1,
     "int bitfieldInsert_emu(int base, int insert, int offset, int bits)\n"
     "{\n"
     "    if (offset < 0 || bits <= 0 || offset >= 32 || bits > 32 || offset + bits > 32)\n"
     "    {\n"
     "        return base;\n"
     "    }\n"
     "    uint maskMsb = (1u << (bits - 1));\n"
     "    uint insertMask = ((maskMsb - 1u) | maskMsb) << offset;\n"
     "    uint baseMask = ~insertMask;\n"
     "    uint resultUnsigned = (asuint(base) & baseMask) | ((asuint(insert) << offset) & \n"
     "                           insertMask);\n"
     "    return asint(resultUnsigned);\n"
     "}\n"},
    {BuiltInId::bitfieldInsert_Int2_Int2_Int1_Int1,
     "int2 bitfieldInsert_emu(int2 base, int2 insert, int offset, int bits)\n"
     "{\n"
     "    if (offset < 0 || bits <= 0 || offset >= 32 || bits > 32 || offset + bits > 32)\n"
     "    {\n"
     "        return base;\n"
     "    }\n"
     "    uint maskMsb = (1u << (bits - 1));\n"
     "    uint insertMask = ((maskMsb - 1u) | maskMsb) << offset;\n"
     "    uint baseMask = ~insertMask;\n"
     "    uint2 resultUnsigned = (asuint(base) & baseMask) | ((asuint(insert) << offset) & \n"
     "                            insertMask);\n"
     "    return asint(resultUnsigned);\n"
     "}\n"},
    {BuiltInId::bitfieldInsert_Int3_Int3_Int1_Int1,
     "int3 bitfieldInsert_emu(int3 base, int3 insert, int offset, int bits)\n"
     "{\n"
     "    if (offset < 0 || bits <= 0 || offset >= 32 || bits > 32 || offset + bits > 32)\n"
     "    {\n"
     "        return base;\n"
     "    }\n"
     "    uint maskMsb = (1u << (bits - 1));\n"
     "    uint insertMask = ((maskMsb - 1u) | maskMsb) << offset;\n"
     "    uint baseMask = ~insertMask;\n"
     "    uint3 resultUnsigned = (asuint(base) & baseMask) | ((asuint(insert) << offset) & \n"
     "                            insertMask);\n"
     "    return asint(resultUnsigned);\n"
     "}\n"},
    {BuiltInId::bitfieldInsert_Int4_Int4_Int1_Int1,
     "int4 bitfieldInsert_emu(int4 base, int4 insert, int offset, int bits)\n"
     "{\n"
     "    if (offset < 0 || bits <= 0 || offset >= 32 || bits > 32 || offset + bits > 32)\n"
     "    {\n"
     "        return base;\n"
     "    }\n"
     "    uint maskMsb = (1u << (bits - 1));\n"
     "    uint insertMask = ((maskMsb - 1u) | maskMsb) << offset;\n"
     "    uint baseMask = ~insertMask;\n"
     "    uint4 resultUnsigned = (asuint(base) & baseMask) | ((asuint(insert) << offset) & \n"
     "    insertMask);\n"
     "    return asint(resultUnsigned);\n"
     "}\n"},
    {BuiltInId::uaddCarry_UInt1_UInt1_UInt1,
     "uint uaddCarry_emu(uint x, uint y, out uint carry)\n"
     "{\n"
     "    carry = uint(x > (0xffffffffu - y));\n"
     "    return x + y;\n"
     "}\n"},
    {BuiltInId::uaddCarry_UInt2_UInt2_UInt2,
     "uint2 uaddCarry_emu(uint2 x, uint2 y, out uint2 carry)\n"
     "{\n"
     "    carry = uint2(x > (0xffffffffu - y));\n"
     "    return x + y;\n"
     "}\n"},
    {BuiltInId::uaddCarry_UInt3_UInt3_UInt3,
     "uint3 uaddCarry_emu(uint3 x, uint3 y, out uint3 carry)\n"
     "{\n"
     "    carry = uint3(x > (0xffffffffu - y));\n"
     "    return x + y;\n"
     "}\n"},
    {BuiltInId::uaddCarry_UInt4_UInt4_UInt4,
     "uint4 uaddCarry_emu(uint4 x, uint4 y, out uint4 carry)\n"
     "{\n"
     "    carry = uint4(x > (0xffffffffu - y));\n"
     "    return x + y;\n"
     "}\n"},
    {BuiltInId::usubBorrow_UInt1_UInt1_UInt1,
     "uint usubBorrow_emu(uint x, uint y, out uint borrow)\n"
     "{\n"
     "    borrow = uint(x < y);\n"
     "    return x - y;\n"
     "}\n"},
    {BuiltInId::usubBorrow_UInt2_UInt2_UInt2,
     "uint2 usubBorrow_emu(uint2 x, uint2 y, out uint2 borrow)\n"
     "{\n"
     "    borrow = uint2(x < y);\n"
     "    return x - y;\n"
     "}\n"},
    {BuiltInId::usubBorrow_UInt3_UInt3_UInt3,
     "uint3 usubBorrow_emu(uint3 x, uint3 y, out uint3 borrow)\n"
     "{\n"
     "    borrow = uint3(x < y);\n"
     "    return x - y;\n"
     "}\n"},
    {BuiltInId::usubBorrow_UInt4_UInt4_UInt4,
     "uint4 usubBorrow_emu(uint4 x, uint4 y, out uint4 borrow)\n"
     "{\n"
     "    borrow = uint4(x < y);\n"
     "    return x - y;\n"
     "}\n"},
    // We emulate tanh just to avoid overflow on large arguments.
    {BuiltInId::tanh_Float1,
     "float tanh_emu(float x)\n"
     "{\n"
     "    return (abs(x) > 15.0) ? sign(x) : tanh(x);\n"
     "}\n"},
    {BuiltInId::tanh_Float2,
     "float2 tanh_emu(float2 x)\n"
     "{\n"
     "    return (abs(x) > 15.0) ? sign(x) : tanh(x);\n"
     "}\n"},
    {BuiltInId::tanh_Float3,
     "float3 tanh_emu(float3 x)\n"
     "{\n"
     "    return (abs(x) > 15.0) ? sign(x) : tanh(x);\n"
     "}\n"},
    {BuiltInId::tanh_Float4,
     "float4 tanh_emu(float4 x)\n"
     "{\n"
     "    return (abs(x) > 15.0) ? sign(x) : tanh(x);\n"
     "}\n"},
};
}  // anonymous namespace

const char *FindHLSLFunction(int uniqueId)
{
    for (size_t index = 0; index < ArraySize(g_hlslFunctions); ++index)
    {
        const auto &function = g_hlslFunctions[index];
        if (function.id == uniqueId)
        {
            return function.body;
        }
    }

    return nullptr;
}
}  // namespace sh
