// 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/ConvertIndex.comp.00000000.inc:
//   Pre-generated shader for the ANGLE Vulkan back-end.

#pragma once
constexpr uint8_t kConvertIndex_comp_00000000[] = {
    0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x02,0xff,0x6d,0x94,0xdb,0x4b,0x94,0x61,
    0x10,0xc6,0x67,0xbf,0x3d,0x68,0x07,0x3a,0xd0,0x9a,0x2b,0xd4,0xee,0xda,0xd2,0x8d,
    0x85,0x86,0x54,0x04,0x51,0x56,0x82,0x6b,0xa9,0x10,0x98,0x7b,0x1f,0x74,0x93,0xe1,
    0x7a,0x51,0x97,0xbb,0xad,0x41,0x98,0xf6,0x07,0x54,0x54,0x04,0xd6,0x95,0x04,0xd1,
    0x4d,0x58,0x04,0x16,0x51,0x96,0xf5,0xf7,0x44,0x27,0xa2,0x66,0x5e,0x7f,0xaf,0x4c,
    0xd2,0xc2,0xcb,0x7c,0xf3,0xcc,0xcc,0x33,0x33,0xcf,0xf7,0x7e,0x9b,0x4e,0x2a,0x6d,
    0x22,0x29,0xd9,0x2c,0xed,0xf2,0x45,0xd6,0x7e,0x3b,0x25,0x51,0x44,0x64,0x8b,0xe4,
    0x82,0xad,0x8e,0x8e,0x8f,0xf6,0x5e,0xbd,0x76,0xa9,0xf7,0xf0,0x91,0x43,0x16,0xdf,
    0x26,0xe9,0x90,0x67,0xb1,0xed,0x9a,0x93,0x55,0x9b,0xd1,0x33,0x75,0xf1,0x72,0xdd,
    0xf0,0x61,0x3d,0x3b,0x14,0xcf,0x04,0x2e,0x91,0x53,0xe4,0xa6,0x42,0x2c,0x2b,0x79,
    0xfa,0x54,0xb0,0x11,0x4b,0x81,0x65,0x1c,0x96,0x80,0xb5,0x3b,0x2c,0x0d,0xb6,0xd5,
    0x66,0x53,0x2f,0xe6,0x55,0xb5,0xb2,0xa8,0x36,0xb7,0xce,0x91,0x91,0x12,0x3d,0x0a,
    0xd4,0x97,0x36,0xf4,0xb6,0xfa,0x12,0x9c,0x56,0xdf,0xad,0x76,0xdf,0x7a,0x6c,0xcd,
    0xef,0x66,0x36,0xf3,0x87,0x83,0x2e,0x22,0x7b,0xf0,0x1b,0xff,0xf4,0xcb,0x4a,0xf3,
    0x3f,0xfc,0x4d,0xc7,0xdf,0xda,0xc0,0xdf,0x82,0x3f,0xfa,0x73,0xf0,0x77,0xe9,0xd9,
    0xa5,0x5b,0x25,0x21,0x9e,0x0e,0xf5,0xf6,0xdc,0xa1,0x39,0xd6,0xaf,0x4c,0x4d,0x51,
    0xbd,0x3c,0x33,0xf8,0x53,0xd6,0xbc,0x0e,0xb5,0x9b,0xf4,0x58,0xfc,0x38,0xfe,0x6e,
    0x30,0xe3,0xe9,0x84,0xc7,0x76,0x3b,0x80,0x5f,0x80,0xd7,0xea,0xbb,0xc8,0x35,0xbe,
    0xbd,0x3a,0x41,0xd4,0xb6,0x88,0x66,0x45,0xf2,0xca,0xcc,0x56,0xa2,0x4f,0x99,0x9d,
    0x12,0xc7,0x5b,0xc1,0xb7,0xfc,0xfd,0x3c,0xe7,0x88,0x9b,0xed,0x41,0xa3,0x98,0xdf,
    0xe7,0x7c,0x8b,0xf7,0xeb,0xf9,0xe3,0xfc,0x01,0xe6,0xec,0x54,0x7f,0x08,0xae,0x34,
    0xfc,0x55,0x76,0x1a,0x62,0x9e,0x2a,0x77,0x32,0x45,0xfc,0x2c,0xcf,0x39,0xd7,0x6f,
    0x0c,0x2c,0xaf,0x93,0x8d,0xbb,0x3e,0x93,0xe0,0xb6,0x7f,0xc3,0xed,0x6f,0xef,0xb4,
    0x01,0xdf,0x75,0xf6,0x69,0xd2,0xcf,0xfc,0x96,0xdb,0xdf,0x6a,0x6e,0xf1,0x1d,0x1c,
    0x54,0xcf,0xe6,0x9a,0x03,0x9b,0xe4,0xc4,0xbc,0xd5,0xf0,0xed,0x88,0x1c,0xd5,0xbb,
    0x94,0x70,0xaf,0x84,0xdd,0xbe,0x2b,0x62,0xdf,0xda,0x37,0xf5,0xe6,0xc1,0x7f,0xe9,
    0xb3,0x69,0x71,0x9b,0xb8,0xd9,0xd3,0x9a,0x65,0xef,0xee,0x0c,0xef,0xdb,0xb4,0x3f,
    0x01,0xff,0x20,0xb8,0xe5,0x98,0x0e,0xe7,0xd0,0x66,0xc0,0xe5,0x8c,0x80,0xbf,0xd7,
    0x1c,0xf3,0xcf,0x83,0x99,0x46,0xcf,0x14,0x33,0x7d,0x2e,0x80,0x0f,0x32,0x4f,0x8d,
    0x79,0x7e,0x2a,0x87,0xc5,0x26,0xf4,0xd4,0x98,0xc9,0x9e,0x7f,0xa8,0x9d,0xc7,0xaf,
    0xb9,0x19,0xef,0x30,0x63,0xc1,0xf5,0xbf,0x0b,0x3e,0x43,0xff,0x7b,0xf4,0x32,0xfc,
    0x1d,0xd8,0x7d,0xf0,0x4a,0xe0,0xca,0x85,0x3b,0xf5,0x80,0x7b,0x57,0x20,0x1e,0xf9,
    0x1e,0x12,0xfb,0x48,0xed,0x23,0x6a,0x7b,0xdc,0x8e,0x0b,0xe0,0x7d,0xae,0xc7,0x63,
    0x6a,0x17,0x5c,0xed,0x13,0xf0,0x7e,0x57,0xbb,0x08,0x6e,0x1a,0x7e,0x00,0x7b,0x8a,
    0xbf,0xe8,0xf6,0xb8,0xc2,0x1e,0xf6,0xbe,0x9f,0xa3,0xe3,0x14,0x78,0xd4,0x71,0xda,
    0xe9,0x68,0x31,0xfb,0x43,0x9d,0x46,0xb7,0xba,0xe3,0x7a,0x41,0x9d,0xd7,0x64,0x09,
    0xdc,0x6b,0xf2,0xd2,0x69,0xb2,0xe4,0x34,0x79,0x45,0x2c,0xee,0xf5,0x9a,0x5a,0xaf,
    0xc9,0x32,0xb8,0xd7,0xe4,0x0d,0xb5,0xcb,0xae,0xf6,0x2d,0xb8,0xd7,0x64,0x05,0x7c,
    0xd5,0x69,0xf2,0x09,0x5d,0x56,0xb8,0x0f,0x71,0x2f,0xb3,0x5f,0xa5,0x2d,0xe4,0x7c,
    0x26,0xa7,0x46,0x7e,0xdd,0xdd,0x95,0x19,0xee,0xca,0x98,0xdb,0xe3,0x06,0x78,0xd4,
    0xe5,0x26,0xd8,0x88,0xd3,0x60,0x96,0xef,0xb1,0x40,0xfc,0xa4,0xea,0x3c,0x4b,0x2f,
    0x7f,0x2f,0xcd,0xfe,0xd6,0xaf,0xfd,0x98,0x9e,0xbf,0x3d,0x58,0x8f,0xf2,0x18,0x07,
    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 dstIndexBuf[];
// };
//
// layout(set = 0, binding = 1)readonly buffer src
// {
//
//     uint srcIndexBuf[];
// };
//
// layout(push_constant)uniform PushConstants
// {
//
//     uint srcIndexOffset;
//
//     uint dstIndexBufOffsetDiv4;
//
//     uint maxIndex;
//
//     uint _padding;
// };
//
// uint PullIndex(uint index)
// {
//     uint srcIndex = index + srcIndexOffset;
//     uint srcBlock = srcIndexBuf[srcIndex >> 2];
//     uint srcComponent =(srcIndex & 3);
//
//     uint value =(srcBlock >>(srcComponent << 3))& 0xFF;
//
//     return value;
// }
//
// void PackIndexValue(uint srcValue, uint indexIndex, inout uint dstValue)
// {
//
//     dstValue |= srcValue <<(indexIndex << 4);
// }
//
// void main()
// {
//
//     uint firstIndex = 0;
//     uint endIndex = firstIndex + maxIndex;
//
//     uint index =((gl_GlobalInvocationID . x +(firstIndex >> 1))<< 1);
//
//     if(index >= endIndex)
//         return;
//
//     uint dstValue = 0;
//
//     if(index >= firstIndex)
//     {
//         uint srcValue = PullIndex(index);
//         PackIndexValue(srcValue, 0, dstValue);
//     }
//
//     if(index + 1 < endIndex)
//     {
//         uint srcValue = PullIndex(index + 1);
//         PackIndexValue(srcValue, 1, dstValue);
//     }
//
//     dstIndexBuf[dstIndexBufOffsetDiv4 + gl_GlobalInvocationID . x]= dstValue;
//
// }
