// GENERATED FILE - DO NOT EDIT.
// Generated by gen_vk_internal_shaders.py.
//
// Copyright 2018 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.
//
// shaders/gen/ConvertVertex.comp.00000007.inc:
//   Pre-generated shader for the ANGLE Vulkan back-end.

#pragma once
constexpr uint8_t kConvertVertex_comp_00000007[] = {
    0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x02,0xff,0x9d,0x57,0x5f,0x4c,0x95,0x75,
    0x18,0xfe,0xde,0x73,0x0e,0x07,0x12,0x54,0x08,0xfb,0xb7,0x99,0xb3,0x88,0x12,0x61,
    0xea,0x98,0xb5,0x96,0xab,0x95,0x37,0xe6,0xa2,0x15,0x69,0x23,0xb9,0x89,0x23,0xa7,
    0x99,0x2e,0x2c,0x07,0x9b,0x0e,0x88,0x61,0xab,0xb6,0x2e,0x62,0x5c,0x98,0xd9,0xd6,
    0x62,0x05,0x5b,0x61,0xa6,0x5e,0x58,0xb7,0x15,0x53,0x58,0x4d,0x2d,0x6e,0xcc,0xa6,
    0xa5,0x03,0x8f,0xe2,0x6d,0x25,0x51,0x19,0xf4,0x3e,0xdf,0xfb,0xfc,0xe2,0xed,0x9b,
    0x57,0x9d,0xed,0xb7,0xef,0x7b,0x9f,0xf7,0xff,0xf3,0xfb,0xf7,0x9d,0x74,0xaa,0xaa,
    0x38,0x8a,0x24,0x5a,0x10,0x95,0x44,0x57,0x25,0x8a,0x7f,0x15,0x51,0x2a,0xc2,0x6b,
    0x69,0x94,0x8d,0x9f,0x1b,0x1a,0x36,0x35,0xac,0x6a,0xef,0xc8,0xaf,0x5a,0x7b,0xff,
    0x1a,0xe8,0x17,0x45,0xe9,0xd8,0x0e,0xba,0xc5,0x6a,0x53,0xa4,0xcf,0x8c,0x8e,0xb6,
    0xdc,0xf6,0x9d,0xc0,0xa7,0x74,0x94,0x2b,0x9e,0x89,0x63,0x45,0xd1,0xa3,0xb4,0xc5,
    0x78,0x5c,0xad,0xab,0x2d,0x4d,0x54,0xc5,0x67,0xc0,0x84,0x58,0xc6,0x61,0x29,0x62,
    0x25,0x0e,0x4b,0x13,0x2b,0x73,0x58,0x86,0x58,0xb9,0xc3,0x8a,0x88,0x2d,0x71,0x58,
    0x96,0xd8,0xed,0x0e,0x2b,0x26,0xb6,0xd4,0x61,0x25,0xc4,0x96,0x3b,0xec,0x26,0x62,
    0xf7,0x38,0x6c,0x01,0xb1,0x15,0x0e,0x2b,0x25,0x56,0xe7,0xb0,0x32,0x62,0x6b,0x1c,
    0xb6,0x90,0xd8,0x5a,0x87,0x2d,0x22,0xf6,0x20,0x78,0xd7,0x4e,0x03,0x07,0x1b,0xb4,
    0xc3,0x16,0xd6,0x1f,0xf8,0xc9,0x25,0x78,0x84,0x7d,0x8e,0xfc,0xc0,0xbe,0x55,0x9f,
    0x77,0xff,0xab,0x33,0xf9,0x2e,0xf2,0x0c,0x79,0x22,0x11,0x6f,0xf2,0x06,0xf1,0x26,
    0x5d,0xbc,0x42,0x22,0x5e,0x81,0xf1,0x82,0x3c,0xc5,0xde,0x97,0x52,0x5e,0x29,0x26,
    0xdf,0xa1,0xa3,0x52,0xbb,0x48,0xc5,0xf6,0xe9,0x38,0x1e,0xde,0x6f,0x51,0x9b,0x2c,
    0x39,0xc6,0xef,0x56,0xd5,0x54,0x50,0x5e,0xa6,0x6f,0x61,0xbe,0xfe,0xef,0x58,0xae,
    0xf1,0xef,0xe5,0xbc,0x21,0xd6,0x3a,0xca,0xf7,0x11,0x43,0xfe,0x15,0xcc,0x07,0x4e,
    0x6a,0x29,0xd7,0x38,0xff,0x95,0xb4,0xcd,0x52,0x8f,0xe7,0x6a,0x72,0x16,0xec,0xeb,
    0xd9,0x4f,0xd0,0xaf,0xe3,0xfa,0x09,0xfa,0xf5,0x09,0xb9,0x81,0xfe,0x4b,0xd4,0xeb,
    0x29,0xe7,0xf7,0x0c,0xb9,0x86,0x0c,0x1e,0x9a,0xc8,0xcb,0x9d,0x8a,0x86,0xb9,0x5f,
    0xc6,0x39,0x6e,0x61,0x7d,0x5b,0x99,0x3b,0xc7,0xfe,0x20,0xb7,0xba,0x7a,0x90,0x2f,
    0xcf,0x38,0xb0,0xdf,0x46,0x5d,0xd6,0xe9,0x77,0x70,0x2d,0x86,0x3a,0xda,0x68,0x1f,
    0xf4,0x1d,0x5c,0xe7,0x41,0xee,0x74,0x75,0x42,0xee,0xd2,0x31,0x97,0x9e,0x97,0x7b,
    0xb8,0x8e,0x43,0xbc,0x37,0x9c,0x3f,0xe4,0xfe,0x44,0x7d,0x1f,0xc1,0x5f,0x7f,0x41,
    0x1e,0x4a,0xcc,0xc7,0x31,0xee,0x9f,0x20,0x8f,0x72,0x4e,0x42,0xbc,0xd3,0x09,0xfb,
    0x71,0x9e,0x03,0xb7,0xa9,0x7c,0x86,0x67,0x50,0x8a,0x3c,0x4e,0x38,0x1e,0xb1,0xb6,
    0x27,0xc8,0xcb,0x25,0xda,0x4c,0x92,0x47,0xc8,0x05,0x62,0x88,0x73,0x99,0x7e,0x69,
    0xda,0x5f,0x61,0xce,0xcb,0xb4,0xbf,0xc2,0x73,0x4f,0xa8,0xbf,0xca,0x77,0xcf,0x73,
    0x8a,0xfb,0x21,0xd4,0x5d,0x23,0x76,0x36,0xd6,0xa9,0x84,0x38,0xd8,0x2f,0xc0,0x4e,
    0xb3,0xa7,0x07,0x74,0x4f,0xa6,0xb8,0x56,0x22,0xe6,0x9e,0x51,0x04,0xe7,0xda,0xef,
    0x2a,0xd5,0xf2,0xbc,0xfe,0x4b,0xdf,0x31,0x67,0x75,0x62,0x7a,0x3c,0x1f,0x53,0x2b,
    0xd4,0xf0,0x0b,0xeb,0x82,0xfe,0x61,0xe6,0xfd,0x95,0x38,0x6c,0xb0,0xbe,0x7f,0xe3,
    0x9e,0xc8,0x3b,0x9b,0x6b,0xc4,0x0f,0xab,0x0d,0xd6,0xe8,0x34,0xfd,0xae,0x31,0xf7,
    0x0c,0x6b,0xfa,0x53,0xed,0xa7,0x63,0x2c,0x8a,0x31,0xe4,0xc7,0xfb,0x1f,0xfa,0xac,
    0x65,0x3d,0x33,0x94,0xaf,0x53,0x7f,0x3d,0x8e,0x53,0x1c,0xe7,0x99,0x12,0xab,0x0d,
    0x36,0x55,0xfa,0x3e,0xe7,0x74,0xe7,0x9d,0xae,0x9a,0xba,0x50,0x73,0x5a,0xac,0x66,
    0x70,0x1a,0x6a,0xce,0x88,0xe1,0x47,0x59,0x73,0x91,0x58,0x0c,0xe0,0xd3,0x6a,0x33,
    0x1b,0x59,0x8c,0x50,0x37,0xf4,0x7f,0xeb,0xfb,0x2c,0xeb,0xc2,0xfb,0xeb,0xea,0x8b,
    0x58,0xa5,0x62,0xfd,0xc2,0xb7,0x97,0xd8,0x42,0x31,0xfc,0xbc,0xcc,0xd7,0xb1,0x98,
    0x75,0x0c,0x39,0xee,0xca,0xc5,0xf0,0xc0,0x5d,0x85,0x98,0x2f,0x70,0x70,0x57,0x29,
    0xf3,0x35,0x40,0x77,0xb3,0x8e,0x4a,0x72,0x85,0x77,0x70,0x15,0x6a,0xaa,0xa4,0xcf,
    0x60,0x62,0xae,0x37,0xd2,0x7e,0xa3,0xab,0xe5,0x09,0xd6,0xb2,0xde,0xd5,0xd2,0x20,
    0x86,0xbf,0xc9,0x1e,0x9e,0x64,0x2d,0xc0,0xdf,0x22,0xd6,0xe8,0xb0,0x10,0x6b,0x13,
    0x63,0x35,0xb8,0x58,0x9b,0xc5,0xf0,0xd0,0xd7,0xb3,0x62,0xbe,0x9b,0x1d,0xe7,0x4d,
    0xc4,0x70,0x96,0x7d,0x4c,0xec,0x39,0x31,0xdb,0x26,0xf6,0xd2,0xec,0xfa,0x87,0x6e,
    0x8b,0x8e,0x66,0xf6,0xb3,0x85,0xfd,0x0f,0x52,0x6e,0x76,0x35,0x7d,0xc2,0x9a,0x6a,
    0x5c,0x4d,0xc3,0x62,0x78,0x98,0xb7,0x83,0x62,0x3d,0x0e,0x3b,0xec,0x10,0x6b,0xc2,
    0xb9,0x1d,0xe6,0xf2,0x33,0x31,0xdb,0x43,0x2e,0xfe,0x61,0xc6,0xaf,0x77,0xf1,0x8f,
    0x88,0xe1,0xc1,0xef,0xa8,0x98,0xef,0x11,0xc7,0xe9,0xf3,0x62,0xf8,0xea,0x78,0x7d,
    0x66,0xe3,0x33,0xb6,0x45,0xec,0x1c,0xce,0x53,0x1f,0xe2,0xe5,0xc4,0x74,0x21,0xe7,
    0x56,0xe6,0xdc,0xe1,0x72,0xb6,0x8a,0xe1,0x9f,0x92,0xbf,0xbc,0x18,0xd6,0xc6,0xbd,
    0xd7,0xe7,0xf8,0x83,0xee,0x05,0x1d,0x7b,0xc9,0xd7,0x5e,0x37,0xaf,0x9f,0xbb,0xba,
    0x02,0x17,0x5f,0x88,0xe1,0xb8,0xa3,0xba,0x99,0xef,0x6d,0xb1,0x33,0x18,0xbc,0xf7,
    0x31,0x0e,0x62,0x1e,0x64,0xfe,0x6d,0x6e,0x4e,0x87,0xd5,0x03,0x67,0xd9,0x8b,0x62,
    0x78,0x3d,0xef,0x87,0x10,0x6b,0xbb,0x98,0x2e,0xd8,0xbd,0x44,0xbb,0x4e,0xde,0x13,
    0xc1,0xae,0x4d,0x4c,0x17,0x78,0xd8,0x49,0x1e,0x7a,0x1c,0x0f,0x2f,0x8b,0xe1,0x81,
    0x87,0x57,0xc4,0xb0,0xc0,0x43,0xaf,0xe3,0x01,0xba,0x5d,0x3a,0x3a,0x58,0x7f,0x07,
    0xd7,0x5a,0x8f,0xb3,0x41,0x1d,0xbb,0x75,0xec,0xa1,0x0d,0x9e,0xaf,0x91,0x97,0x2e,
    0xb1,0x7b,0xa9,0xd1,0xad,0x9b,0x6e,0xb1,0x7e,0xba,0xdc,0xfc,0xbf,0x2a,0x86,0xf7,
    0x93,0xaf,0x1e,0xc6,0xda,0x2d,0xff,0x95,0xf1,0x0c,0xe7,0xd8,0x4f,0x62,0x7e,0x7b,
    0x58,0x7b,0xb0,0xed,0xa5,0xed,0x2e,0x97,0xb3,0x5d,0xec,0xbe,0x6c,0x4c,0xd8,0xf4,
    0xba,0x78,0x17,0xc4,0x62,0x22,0x47,0x3b,0xfb,0xf6,0x73,0xd7,0xe7,0x6c,0x2f,0x8a,
    0xcd,0x2f,0xd6,0x05,0x38,0xf7,0x71,0x7e,0x16,0x5b,0x0f,0xd0,0x5d,0xa0,0x2e,0xcc,
    0xf9,0xbe,0x1b,0xec,0xe3,0x77,0xb8,0x8f,0xf7,0x91,0xdb,0x01,0xc7,0x2d,0x74,0xfb,
    0x75,0xbc,0xc7,0x1a,0xf0,0x1c,0x61,0x4f,0xef,0x8b,0xad,0x7b,0xe4,0x1b,0x23,0xf6,
    0x81,0x18,0x7e,0x91,0xb5,0x0f,0xd0,0x6f,0xbf,0x5b,0x13,0xef,0x72,0x4d,0x1c,0x73,
    0x6b,0xe2,0x80,0x18,0xee,0x7d,0x06,0x5c,0x4f,0x93,0x62,0xb1,0x91,0xff,0x00,0x6b,
    0xea,0xe6,0xf7,0xd4,0x87,0x62,0x7a,0x7f,0xbe,0x0c,0xd2,0x17,0xfa,0x4b,0x62,0xdf,
    0x5c,0x38,0x83,0x60,0x3b,0xe0,0x6a,0xf9,0x92,0xb5,0x8c,0xba,0x5a,0xbe,0x12,0xc3,
    0x03,0x67,0x5f,0x8b,0x61,0xfd,0x5c,0x9f,0xe3,0x8e,0x1f,0xe8,0x46,0x74,0x9c,0x62,
    0xde,0x53,0xac,0x0b,0x7b,0xe4,0x3b,0xb1,0xdc,0x61,0x6f,0x7c,0x2f,0x86,0xa1,0xce,
    0x71,0xda,0x8f,0x38,0xee,0x8e,0xf3,0xbc,0xc6,0x37,0x42,0xc8,0x7d,0x42,0x0c,0x6f,
    0x73,0x7b,0x74,0x54,0x0c,0xcf,0xf3,0x9b,0x28,0xc4,0x1f,0x13,0xd3,0x3d,0xad,0xbe,
    0xf8,0x3e,0xfa,0x46,0xe6,0x7b,0x2f,0x53,0x0b,0xd8,0x7c,0x2b,0xf6,0xfd,0xf2,0x10,
    0xf5,0xc7,0x99,0xfb,0xa4,0x98,0x6e,0x2c,0x51,0xdf,0xb8,0x9b,0x83,0x82,0x58,0x0f,
    0xe8,0xf1,0x24,0xfb,0x3e,0x41,0x7f,0xdc,0xf1,0xb8,0xf3,0x0b,0xf4,0x9f,0xe3,0x3d,
    0x37,0xe7,0xce,0xe6,0x6a,0xde,0xb1,0x43,0x89,0xef,0x86,0x59,0x77,0xff,0x9f,0xe1,
    0x7c,0x74,0xba,0xf9,0xf8,0x41,0x0c,0x0f,0xe7,0xf2,0x59,0x31,0xcc,0x9f,0xfb,0x3f,
    0xf2,0x5e,0x3f,0x2b,0xf3,0x67,0xf5,0x39,0xb1,0x6f,0xbd,0x3c,0xf5,0x8f,0xe8,0xdc,
    0x9d,0x63,0x9d,0xfe,0x3b,0xa6,0x36,0xfe,0x5e,0x10,0xfd,0x6f,0x26,0xd1,0x3f,0x7d,
    0xee,0xa5,0x37,0x38,0x0f,0x00,0x00
};

// Generated from:
//
// #version 450 core
//
// layout(local_size_x = 64, local_size_y = 1, local_size_z = 1)in;
//
// layout(set = 0, binding = 0)buffer dst
// {
//     uint destData[];
// };
//
// layout(set = 0, binding = 1)buffer src
// {
//     uint srcData[];
// };
//
// layout(push_constant)uniform PushConstants
// {
//
//     uint outputCount;
//
//     uint componentCount;
//
//     uint srcOffset;
//     uint dstOffset;
//
//     uint Ns;
//     uint Bs;
//     uint Ss;
//     uint Es;
//
//     uint Nd;
//     uint Bd;
//     uint Sd;
//     uint Ed;
//
//     uint srcEmulatedAlpha;
//
//     bool isSrcHDR;
//     bool isSrcA2BGR10;
// } params;
//
// uint getSourceComponentOffset(uint vertex, uint component)
// {
//     return vertex * params . Ss + component * 4 + params . srcOffset;
// }
//
// uint getDestinationComponentOffset(uint vertex, uint component)
// {
//     return vertex * params . Sd + component * params . Bd + params . dstOffset;
// }
//
// uint getShiftBits(uint offset, uint B)
// {
//
//     uint shift =(offset % 4)* 8;
//
//     return shift;
// }
//
//       float loadSourceComponent(uint cd)
// {
//
//     uint vertex = cd / params . Nd;
//     uint component = cd % params . Nd;
//
//     if(component >= params . Ns && component < 3)
//     {
//         return 0;
//     }
//
//     uint offset = getSourceComponentOffset(vertex, component);
//     uint block = srcData[offset / 4];
//
//     uint shiftBits;
//     uint valueBits;
//     uint valueMask;
//
//     if(params . isSrcHDR)
//     {
//         valueBits = component == 3 ? 2 : 10;
//         valueMask = component == 3 ? 0x03 : 0x3FF;
//         if(params . isSrcA2BGR10)
//         {
//             shiftBits = 10 * component;
//         }
//         else
//         {
//
//             shiftBits = component == 3 ? 0 :(valueBits *(2 - component)+ 2);
//         }
//     }
//     else
//     {
//         shiftBits = getShiftBits(offset, 4);
//         valueBits = 4 * 8;
//         valueMask = valueBits == 32 ? - 1 :(1 << valueBits)- 1;
//     }
//
//     uint valueAsUint;
//
//     if(component >= params . Ns && component == 3)
//     {
//         valueAsUint = params . srcEmulatedAlpha;
//     }
//     else
//     {
//         valueAsUint =(block >> shiftBits)& valueMask;
//     }
//
//           float value = uintBitsToFloat(valueAsUint);
//
//     return value;
// }
//
//        float convertComponent(float srcValue)
// {
//
//     return srcValue;
// }
//
// uint makeDestinationComponent(uint cd, float value)
// {
//
//     uint valueAsUint;
//
//     if(params . Bd == 2)
//     {
//
//         uint shift =((cd & 1)== 0)? 0 : 16;
//         valueAsUint = packHalf2x16(vec2(value, 0.0))<< shift;
//     }
//     else
//     {
//         valueAsUint = floatBitsToInt(value);
//     }
//
//     return valueAsUint;
// }
//
// void storeDestinationComponents(uint valueAsUint)
// {
//
//     destData[gl_GlobalInvocationID . x + params . dstOffset / 4]= valueAsUint;
// }
//
// void main()
// {
//     if(gl_GlobalInvocationID . x >= params . outputCount)
//         return;
//
//     uint valueOut = 0;
//     for(uint i = 0;i < params . Ed;++ i)
//     {
//         uint cd = gl_GlobalInvocationID . x * params . Ed + i;
//         if(cd >= params . componentCount)
//         {
//             break;
//         }
//
//               float srcValue = loadSourceComponent(cd);
//                float destValue = convertComponent(srcValue);
//         valueOut |= makeDestinationComponent(cd, destValue);
//     }
//
//     storeDestinationComponents(valueOut);
// }
