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

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