// GENERATED FILE - DO NOT EDIT.
// Generated by gen_vk_internal_shaders.py.
//
// Copyright 2020 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/ImageCopy.frag.0000000A.inc:
//   Pre-generated shader for the ANGLE Vulkan back-end.

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

// Generated from:
//
// #version 450 core
//
// #extension GL_EXT_samplerless_texture_functions : require
//
// layout(set = 0, binding = 0)uniform utexture2D src;
// layout(location = 0)out uvec4 dest;
//
// layout(push_constant)uniform PushConstants {
//
//     ivec2 srcOffset;
//     ivec2 destOffset;
//     int srcMip;
//     int srcLayer;
//
//     bool flipX;
//     bool flipY;
//
//     bool premultiplyAlpha;
//     bool unmultiplyAlpha;
//
//     bool destHasLuminance;
//     bool destIsAlpha;
//
//     bool srcIsSRGB;
//     bool destIsSRGB;
//
//     int destDefaultChannelsMask;
//     bool rotateXY;
// } params;
//
// void main()
// {
//     ivec2 destSubImageCoords = ivec2(gl_FragCoord . xy)- params . destOffset;
//
//     ivec2 srcSubImageCoords = destSubImageCoords;
//
//     if(params . flipX)
//     {
//         srcSubImageCoords . x = - srcSubImageCoords . x;
//     }
//     if(params . flipY)
//     {
//         srcSubImageCoords . y = - srcSubImageCoords . y;
//     }
//     if(params . rotateXY)
//     {
//         srcSubImageCoords . xy = srcSubImageCoords . yx;
//     }
//
//           uvec4 srcValue = texelFetch(src, params . srcOffset + srcSubImageCoords, params . srcMip);
//
//     if(params . premultiplyAlpha)
//     {
//         srcValue . rgb *= srcValue . a;
//     }
//     else if(params . unmultiplyAlpha && srcValue . a > 0)
//     {
//         srcValue . rgb /= srcValue . a;
//     }
//
//            uvec4 destValue = uvec4(srcValue);
//
//     if(params . destHasLuminance)
//     {
//         destValue . rg = destValue . ra;
//     }
//     else if(params . destIsAlpha)
//     {
//         destValue . r = destValue . a;
//     }
//     else
//     {
//         int defaultChannelsMask = params . destDefaultChannelsMask;
//         if((defaultChannelsMask & 2)!= 0)
//         {
//             destValue . g = 0;
//         }
//         if((defaultChannelsMask & 4)!= 0)
//         {
//             destValue . b = 0;
//         }
//         if((defaultChannelsMask & 8)!= 0)
//         {
//             destValue . a = 1;
//         }
//     }
//
//     dest = destValue;
// }
