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

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

// Generated from:
//
// #version 450 core
//
// #extension GL_GOOGLE_include_directive : require
// #extension GL_EXT_samplerless_texture_functions : require
//
// layout(local_size_x = 256, local_size_y = 1, local_size_z = 1)in;
//
// layout(set = 0, binding = 0, rgba8)uniform coherent image2D dst[4];
// layout(set = 0, binding = 1)uniform sampler2D src;
//
// layout(push_constant)uniform PushConstants {
//
//     vec2 invSrcExtent;
//
//     uint levelCount;
// } params;
//
// #line 1 "shaders/src/third_party/ffx_spd/ffx_a.h"
//
// #extension GL_EXT_shader_16bit_storage : require
// #extension GL_EXT_shader_explicit_arithmetic_types : require
//
//    float AF1_x(float a){ return float(a);}
//    vec2 AF2_x(float a){ return vec2(a, a);}
//    vec3 AF3_x(float a){ return vec3(a, a, a);}
//    vec4 AF4_x(float a){ return vec4(a, a, a, a);}
//
//    uint AU1_x(uint a){ return uint(a);}
//    uvec2 AU2_x(uint a){ return uvec2(a, a);}
//    uvec3 AU3_x(uint a){ return uvec3(a, a, a);}
//    uvec4 AU4_x(uint a){ return uvec4(a, a, a, a);}
//
//    uint AAbsSU1(uint a){ return uint(abs(int(a)));}
//    uvec2 AAbsSU2(uvec2 a){ return uvec2(abs(ivec2(a)));}
//    uvec3 AAbsSU3(uvec3 a){ return uvec3(abs(ivec3(a)));}
//    uvec4 AAbsSU4(uvec4 a){ return uvec4(abs(ivec4(a)));}
//
//    uint ABfe(uint src, uint off, uint bits){ return bitfieldExtract(src, int(off), int(bits));}
//    uint ABfi(uint src, uint ins, uint mask){ return(ins & mask)|(src &(~ mask));}
//
//    uint ABfiM(uint src, uint ins, uint bits){ return bitfieldInsert(src, ins, 0, int(bits));}
//
//    float AFractF1(float x){ return fract(x);}
//    vec2 AFractF2(vec2 x){ return fract(x);}
//    vec3 AFractF3(vec3 x){ return fract(x);}
//    vec4 AFractF4(vec4 x){ return fract(x);}
//
//    float ALerpF1(float x, float y, float a){ return mix(x, y, a);}
//    vec2 ALerpF2(vec2 x, vec2 y, vec2 a){ return mix(x, y, a);}
//    vec3 ALerpF3(vec3 x, vec3 y, vec3 a){ return mix(x, y, a);}
//    vec4 ALerpF4(vec4 x, vec4 y, vec4 a){ return mix(x, y, a);}
//
//    float AMax3F1(float x, float y, float z){ return max(x, max(y, z));}
//    vec2 AMax3F2(vec2 x, vec2 y, vec2 z){ return max(x, max(y, z));}
//    vec3 AMax3F3(vec3 x, vec3 y, vec3 z){ return max(x, max(y, z));}
//    vec4 AMax3F4(vec4 x, vec4 y, vec4 z){ return max(x, max(y, z));}
//
//    uint AMax3SU1(uint x, uint y, uint z){ return uint(max(int(x), max(int(y), int(z))));}
//    uvec2 AMax3SU2(uvec2 x, uvec2 y, uvec2 z){ return uvec2(max(ivec2(x), max(ivec2(y), ivec2(z))));}
//    uvec3 AMax3SU3(uvec3 x, uvec3 y, uvec3 z){ return uvec3(max(ivec3(x), max(ivec3(y), ivec3(z))));}
//    uvec4 AMax3SU4(uvec4 x, uvec4 y, uvec4 z){ return uvec4(max(ivec4(x), max(ivec4(y), ivec4(z))));}
//
//    uint AMax3U1(uint x, uint y, uint z){ return max(x, max(y, z));}
//    uvec2 AMax3U2(uvec2 x, uvec2 y, uvec2 z){ return max(x, max(y, z));}
//    uvec3 AMax3U3(uvec3 x, uvec3 y, uvec3 z){ return max(x, max(y, z));}
//    uvec4 AMax3U4(uvec4 x, uvec4 y, uvec4 z){ return max(x, max(y, z));}
//
//    uint AMaxSU1(uint a, uint b){ return uint(max(int(a), int(b)));}
//    uvec2 AMaxSU2(uvec2 a, uvec2 b){ return uvec2(max(ivec2(a), ivec2(b)));}
//    uvec3 AMaxSU3(uvec3 a, uvec3 b){ return uvec3(max(ivec3(a), ivec3(b)));}
//    uvec4 AMaxSU4(uvec4 a, uvec4 b){ return uvec4(max(ivec4(a), ivec4(b)));}
//
//    float AMed3F1(float x, float y, float z){ return max(min(x, y), min(max(x, y), z));}
//    vec2 AMed3F2(vec2 x, vec2 y, vec2 z){ return max(min(x, y), min(max(x, y), z));}
//    vec3 AMed3F3(vec3 x, vec3 y, vec3 z){ return max(min(x, y), min(max(x, y), z));}
//    vec4 AMed3F4(vec4 x, vec4 y, vec4 z){ return max(min(x, y), min(max(x, y), z));}
//
//    float AMin3F1(float x, float y, float z){ return min(x, min(y, z));}
//    vec2 AMin3F2(vec2 x, vec2 y, vec2 z){ return min(x, min(y, z));}
//    vec3 AMin3F3(vec3 x, vec3 y, vec3 z){ return min(x, min(y, z));}
//    vec4 AMin3F4(vec4 x, vec4 y, vec4 z){ return min(x, min(y, z));}
//
//    uint AMin3SU1(uint x, uint y, uint z){ return uint(min(int(x), min(int(y), int(z))));}
//    uvec2 AMin3SU2(uvec2 x, uvec2 y, uvec2 z){ return uvec2(min(ivec2(x), min(ivec2(y), ivec2(z))));}
//    uvec3 AMin3SU3(uvec3 x, uvec3 y, uvec3 z){ return uvec3(min(ivec3(x), min(ivec3(y), ivec3(z))));}
//    uvec4 AMin3SU4(uvec4 x, uvec4 y, uvec4 z){ return uvec4(min(ivec4(x), min(ivec4(y), ivec4(z))));}
//
//    uint AMin3U1(uint x, uint y, uint z){ return min(x, min(y, z));}
//    uvec2 AMin3U2(uvec2 x, uvec2 y, uvec2 z){ return min(x, min(y, z));}
//    uvec3 AMin3U3(uvec3 x, uvec3 y, uvec3 z){ return min(x, min(y, z));}
//    uvec4 AMin3U4(uvec4 x, uvec4 y, uvec4 z){ return min(x, min(y, z));}
//
//    uint AMinSU1(uint a, uint b){ return uint(min(int(a), int(b)));}
//    uvec2 AMinSU2(uvec2 a, uvec2 b){ return uvec2(min(ivec2(a), ivec2(b)));}
//    uvec3 AMinSU3(uvec3 a, uvec3 b){ return uvec3(min(ivec3(a), ivec3(b)));}
//    uvec4 AMinSU4(uvec4 a, uvec4 b){ return uvec4(min(ivec4(a), ivec4(b)));}
//
//    float ANCosF1(float x){ return cos(x * AF1_x(float(6.28318530718)));}
//    vec2 ANCosF2(vec2 x){ return cos(x * AF2_x(float(6.28318530718)));}
//    vec3 ANCosF3(vec3 x){ return cos(x * AF3_x(float(6.28318530718)));}
//    vec4 ANCosF4(vec4 x){ return cos(x * AF4_x(float(6.28318530718)));}
//
//    float ANSinF1(float x){ return sin(x * AF1_x(float(6.28318530718)));}
//    vec2 ANSinF2(vec2 x){ return sin(x * AF2_x(float(6.28318530718)));}
//    vec3 ANSinF3(vec3 x){ return sin(x * AF3_x(float(6.28318530718)));}
//    vec4 ANSinF4(vec4 x){ return sin(x * AF4_x(float(6.28318530718)));}
//
//    float ARcpF1(float x){ return AF1_x(float(1.0))/ x;}
//    vec2 ARcpF2(vec2 x){ return AF2_x(float(1.0))/ x;}
//    vec3 ARcpF3(vec3 x){ return AF3_x(float(1.0))/ x;}
//    vec4 ARcpF4(vec4 x){ return AF4_x(float(1.0))/ x;}
//
//    float ARsqF1(float x){ return AF1_x(float(1.0))/ sqrt(x);}
//    vec2 ARsqF2(vec2 x){ return AF2_x(float(1.0))/ sqrt(x);}
//    vec3 ARsqF3(vec3 x){ return AF3_x(float(1.0))/ sqrt(x);}
//    vec4 ARsqF4(vec4 x){ return AF4_x(float(1.0))/ sqrt(x);}
//
//    float ASatF1(float x){ return clamp(x, AF1_x(float(0.0)), AF1_x(float(1.0)));}
//    vec2 ASatF2(vec2 x){ return clamp(x, AF2_x(float(0.0)), AF2_x(float(1.0)));}
//    vec3 ASatF3(vec3 x){ return clamp(x, AF3_x(float(0.0)), AF3_x(float(1.0)));}
//    vec4 ASatF4(vec4 x){ return clamp(x, AF4_x(float(0.0)), AF4_x(float(1.0)));}
//
//    uint AShrSU1(uint a, uint b){ return uint(int(a)>> int(b));}
//    uvec2 AShrSU2(uvec2 a, uvec2 b){ return uvec2(ivec2(a)>> ivec2(b));}
//    uvec3 AShrSU3(uvec3 a, uvec3 b){ return uvec3(ivec3(a)>> ivec3(b));}
//    uvec4 AShrSU4(uvec4 a, uvec4 b){ return uvec4(ivec4(a)>> ivec4(b));}
//
//     f16vec4 AH4_AU2_x(uvec2 x){ return f16vec4(unpackFloat2x16(x . x), unpackFloat2x16(x . y));}
//
//     uvec2 AU2_AH4_x(f16vec4 x){ return uvec2(packFloat2x16(x . xy), packFloat2x16(x . zw));}
//
//     float16_t AH1_x(float16_t a){ return float16_t(a);}
//     f16vec2 AH2_x(float16_t a){ return f16vec2(a, a);}
//     f16vec3 AH3_x(float16_t a){ return f16vec3(a, a, a);}
//     f16vec4 AH4_x(float16_t a){ return f16vec4(a, a, a, a);}
//
//     uint16_t AW1_x(uint16_t a){ return uint16_t(a);}
//     u16vec2 AW2_x(uint16_t a){ return u16vec2(a, a);}
//     u16vec3 AW3_x(uint16_t a){ return u16vec3(a, a, a);}
//     u16vec4 AW4_x(uint16_t a){ return u16vec4(a, a, a, a);}
//
//     uint16_t AAbsSW1(uint16_t a){ return uint16_t(abs(int16_t(a)));}
//     u16vec2 AAbsSW2(u16vec2 a){ return u16vec2(abs(i16vec2(a)));}
//     u16vec3 AAbsSW3(u16vec3 a){ return u16vec3(abs(i16vec3(a)));}
//     u16vec4 AAbsSW4(u16vec4 a){ return u16vec4(abs(i16vec4(a)));}
//
//     float16_t AFractH1(float16_t x){ return fract(x);}
//     f16vec2 AFractH2(f16vec2 x){ return fract(x);}
//     f16vec3 AFractH3(f16vec3 x){ return fract(x);}
//     f16vec4 AFractH4(f16vec4 x){ return fract(x);}
//
//     float16_t ALerpH1(float16_t x, float16_t y, float16_t a){ return mix(x, y, a);}
//     f16vec2 ALerpH2(f16vec2 x, f16vec2 y, f16vec2 a){ return mix(x, y, a);}
//     f16vec3 ALerpH3(f16vec3 x, f16vec3 y, f16vec3 a){ return mix(x, y, a);}
//     f16vec4 ALerpH4(f16vec4 x, f16vec4 y, f16vec4 a){ return mix(x, y, a);}
//
//     float16_t AMax3H1(float16_t x, float16_t y, float16_t z){ return max(x, max(y, z));}
//     f16vec2 AMax3H2(f16vec2 x, f16vec2 y, f16vec2 z){ return max(x, max(y, z));}
//     f16vec3 AMax3H3(f16vec3 x, f16vec3 y, f16vec3 z){ return max(x, max(y, z));}
//     f16vec4 AMax3H4(f16vec4 x, f16vec4 y, f16vec4 z){ return max(x, max(y, z));}
//
//     uint16_t AMaxSW1(uint16_t a, uint16_t b){ return uint16_t(max(int(a), int(b)));}
//     u16vec2 AMaxSW2(u16vec2 a, u16vec2 b){ return u16vec2(max(ivec2(a), ivec2(b)));}
//     u16vec3 AMaxSW3(u16vec3 a, u16vec3 b){ return u16vec3(max(ivec3(a), ivec3(b)));}
//     u16vec4 AMaxSW4(u16vec4 a, u16vec4 b){ return u16vec4(max(ivec4(a), ivec4(b)));}
//
//     float16_t AMin3H1(float16_t x, float16_t y, float16_t z){ return min(x, min(y, z));}
//     f16vec2 AMin3H2(f16vec2 x, f16vec2 y, f16vec2 z){ return min(x, min(y, z));}
//     f16vec3 AMin3H3(f16vec3 x, f16vec3 y, f16vec3 z){ return min(x, min(y, z));}
//     f16vec4 AMin3H4(f16vec4 x, f16vec4 y, f16vec4 z){ return min(x, min(y, z));}
//
//     uint16_t AMinSW1(uint16_t a, uint16_t b){ return uint16_t(min(int(a), int(b)));}
//     u16vec2 AMinSW2(u16vec2 a, u16vec2 b){ return u16vec2(min(ivec2(a), ivec2(b)));}
//     u16vec3 AMinSW3(u16vec3 a, u16vec3 b){ return u16vec3(min(ivec3(a), ivec3(b)));}
//     u16vec4 AMinSW4(u16vec4 a, u16vec4 b){ return u16vec4(min(ivec4(a), ivec4(b)));}
//
//     float16_t ARcpH1(float16_t x){ return AH1_x(float16_t(1.0))/ x;}
//     f16vec2 ARcpH2(f16vec2 x){ return AH2_x(float16_t(1.0))/ x;}
//     f16vec3 ARcpH3(f16vec3 x){ return AH3_x(float16_t(1.0))/ x;}
//     f16vec4 ARcpH4(f16vec4 x){ return AH4_x(float16_t(1.0))/ x;}
//
//     float16_t ARsqH1(float16_t x){ return AH1_x(float16_t(1.0))/ sqrt(x);}
//     f16vec2 ARsqH2(f16vec2 x){ return AH2_x(float16_t(1.0))/ sqrt(x);}
//     f16vec3 ARsqH3(f16vec3 x){ return AH3_x(float16_t(1.0))/ sqrt(x);}
//     f16vec4 ARsqH4(f16vec4 x){ return AH4_x(float16_t(1.0))/ sqrt(x);}
//
//     float16_t ASatH1(float16_t x){ return clamp(x, AH1_x(float16_t(0.0)), AH1_x(float16_t(1.0)));}
//     f16vec2 ASatH2(f16vec2 x){ return clamp(x, AH2_x(float16_t(0.0)), AH2_x(float16_t(1.0)));}
//     f16vec3 ASatH3(f16vec3 x){ return clamp(x, AH3_x(float16_t(0.0)), AH3_x(float16_t(1.0)));}
//     f16vec4 ASatH4(f16vec4 x){ return clamp(x, AH4_x(float16_t(0.0)), AH4_x(float16_t(1.0)));}
//
//     uint16_t AShrSW1(uint16_t a, uint16_t b){ return uint16_t(int16_t(a)>> int16_t(b));}
//     u16vec2 AShrSW2(u16vec2 a, u16vec2 b){ return u16vec2(i16vec2(a)>> i16vec2(b));}
//     u16vec3 AShrSW3(u16vec3 a, u16vec3 b){ return u16vec3(i16vec3(a)>> i16vec3(b));}
//     u16vec4 AShrSW4(u16vec4 a, u16vec4 b){ return u16vec4(i16vec4(a)>> i16vec4(b));}
//
//    float ACpySgnF1(float d, float s){ return uintBitsToFloat(uint(floatBitsToUint(float(d))|(floatBitsToUint(float(s))& AU1_x(uint(0x80000000u)))));}
//    vec2 ACpySgnF2(vec2 d, vec2 s){ return uintBitsToFloat(uvec2(floatBitsToUint(vec2(d))|(floatBitsToUint(vec2(s))& AU2_x(uint(0x80000000u)))));}
//    vec3 ACpySgnF3(vec3 d, vec3 s){ return uintBitsToFloat(uvec3(floatBitsToUint(vec3(d))|(floatBitsToUint(vec3(s))& AU3_x(uint(0x80000000u)))));}
//    vec4 ACpySgnF4(vec4 d, vec4 s){ return uintBitsToFloat(uvec4(floatBitsToUint(vec4(d))|(floatBitsToUint(vec4(s))& AU4_x(uint(0x80000000u)))));}
//
//    float ASignedF1(float m){ return ASatF1(m * AF1_x(float(uintBitsToFloat(uint(0x7f800000u)))));}
//    vec2 ASignedF2(vec2 m){ return ASatF2(m * AF2_x(float(uintBitsToFloat(uint(0x7f800000u)))));}
//    vec3 ASignedF3(vec3 m){ return ASatF3(m * AF3_x(float(uintBitsToFloat(uint(0x7f800000u)))));}
//    vec4 ASignedF4(vec4 m){ return ASatF4(m * AF4_x(float(uintBitsToFloat(uint(0x7f800000u)))));}
//
//     float16_t ACpySgnH1(float16_t d, float16_t s){ return uint16BitsToHalf(uint16_t(halfBitsToUint16(float16_t(d))|(halfBitsToUint16(float16_t(s))& AW1_x(uint16_t(0x8000u)))));}
//     f16vec2 ACpySgnH2(f16vec2 d, f16vec2 s){ return uint16BitsToHalf(u16vec2(halfBitsToUint16(f16vec2(d))|(halfBitsToUint16(f16vec2(s))& AW2_x(uint16_t(0x8000u)))));}
//     f16vec3 ACpySgnH3(f16vec3 d, f16vec3 s){ return uint16BitsToHalf(u16vec3(halfBitsToUint16(f16vec3(d))|(halfBitsToUint16(f16vec3(s))& AW3_x(uint16_t(0x8000u)))));}
//     f16vec4 ACpySgnH4(f16vec4 d, f16vec4 s){ return uint16BitsToHalf(u16vec4(halfBitsToUint16(f16vec4(d))|(halfBitsToUint16(f16vec4(s))& AW4_x(uint16_t(0x8000u)))));}
//
//     float16_t ASignedH1(float16_t m){ return ASatH1(m * AH1_x(float16_t(uint16BitsToHalf(uint16_t(0x7c00u)))));}
//     f16vec2 ASignedH2(f16vec2 m){ return ASatH2(m * AH2_x(float16_t(uint16BitsToHalf(uint16_t(0x7c00u)))));}
//     f16vec3 ASignedH3(f16vec3 m){ return ASatH3(m * AH3_x(float16_t(uint16BitsToHalf(uint16_t(0x7c00u)))));}
//     f16vec4 ASignedH4(f16vec4 m){ return ASatH4(m * AH4_x(float16_t(uint16BitsToHalf(uint16_t(0x7c00u)))));}
//
//     float16_t APrxLoSqrtH1(float16_t a){ return uint16BitsToHalf(uint16_t((halfBitsToUint16(float16_t(a))>> AW1_x(uint16_t(1)))+ AW1_x(uint16_t(0x1de2))));}
//     f16vec2 APrxLoSqrtH2(f16vec2 a){ return uint16BitsToHalf(u16vec2((halfBitsToUint16(f16vec2(a))>> AW2_x(uint16_t(1)))+ AW2_x(uint16_t(0x1de2))));}
//
//     float16_t APrxLoRcpH1(float16_t a){ return uint16BitsToHalf(uint16_t(AW1_x(uint16_t(0x7784))- halfBitsToUint16(float16_t(a))));}
//     f16vec2 APrxLoRcpH2(f16vec2 a){ return uint16BitsToHalf(u16vec2(AW2_x(uint16_t(0x7784))- halfBitsToUint16(f16vec2(a))));}
//
//     float16_t APrxMedRcpH1(float16_t a){ float16_t b = uint16BitsToHalf(uint16_t(AW1_x(uint16_t(0x778d))- halfBitsToUint16(float16_t(a))));return b *(- b * a + AH1_x(float16_t(2.0)));}
//     f16vec2 APrxMedRcpH2(f16vec2 a){ f16vec2 b = uint16BitsToHalf(u16vec2(AW2_x(uint16_t(0x778d))- halfBitsToUint16(f16vec2(a))));return b *(- b * a + AH2_x(float16_t(2.0)));}
//
//     float16_t APrxLoRsqH1(float16_t a){ return uint16BitsToHalf(uint16_t(AW1_x(uint16_t(0x59a3))-(halfBitsToUint16(float16_t(a))>> AW1_x(uint16_t(1)))));}
//     f16vec2 APrxLoRsqH2(f16vec2 a){ return uint16BitsToHalf(u16vec2(AW2_x(uint16_t(0x59a3))-(halfBitsToUint16(f16vec2(a))>> AW2_x(uint16_t(1)))));}
//
//    float APrxLoSqrtF1(float a){ return uintBitsToFloat(uint((floatBitsToUint(float(a))>> AU1_x(uint(1)))+ AU1_x(uint(0x1fbc4639))));}
//    float APrxLoRcpF1(float a){ return uintBitsToFloat(uint(AU1_x(uint(0x7ef07ebb))- floatBitsToUint(float(a))));}
//    float APrxMedRcpF1(float a){ float b = uintBitsToFloat(uint(AU1_x(uint(0x7ef19fff))- floatBitsToUint(float(a))));return b *(- b * a + AF1_x(float(2.0)));}
//    float APrxLoRsqF1(float a){ return uintBitsToFloat(uint(AU1_x(uint(0x5f347d74))-(floatBitsToUint(float(a))>> AU1_x(uint(1)))));}
//
//    float APSinF1(float x){ return x * abs(x)- x;}
//    float APCosF1(float x){ x = AFractF1(x * AF1_x(float(0.5))+ AF1_x(float(0.75)));x = x * AF1_x(float(2.0))- AF1_x(float(1.0));return APSinF1(x);}
//
//     f16vec2 APSinH2(f16vec2 x){ return x * abs(x)- x;}
//     f16vec2 APCosH2(f16vec2 x){ x = AFractH2(x * AH2_x(float16_t(0.5))+ AH2_x(float16_t(0.75)));x = x * AH2_x(float16_t(2.0))- AH2_x(float16_t(1.0));return APSinH2(x);}
//
//    float ATo709F1(float c){ return max(min(c * AF1_x(float(4.5)), AF1_x(float(0.018))), AF1_x(float(1.099))* pow(c, AF1_x(float(0.45)))- AF1_x(float(0.099)));}
//
//    float AToGammaF1(float c, float rcpX){ return pow(c, rcpX);}
//
//    float AToPqF1(float x){ float p = pow(x, AF1_x(float(0.159302)));
//   return pow((AF1_x(float(0.835938))+ AF1_x(float(18.8516))* p)/(AF1_x(float(1.0))+ AF1_x(float(18.6875))* p), AF1_x(float(78.8438)));}
//
//    float AToSrgbF1(float c){ return max(min(c * AF1_x(float(12.92)), AF1_x(float(0.0031308))), AF1_x(float(1.055))* pow(c, AF1_x(float(0.41666)))- AF1_x(float(0.055)));}
//
//    float AToTwoF1(float c){ return sqrt(c);}
//
//    float AFrom709F1(float c){ return max(min(c * AF1_x(float(1.0 / 4.5)), AF1_x(float(0.081))),
//   pow((c + AF1_x(float(0.099)))*(AF1_x(float(1.0))/(AF1_x(float(1.099)))), AF1_x(float(1.0 / 0.45))));}
//
//    float AFromGammaF1(float c, float x){ return pow(c, x);}
//
//    float AFromPqF1(float x){ float p = pow(x, AF1_x(float(0.0126833)));
//   return pow(ASatF1(p - AF1_x(float(0.835938)))/(AF1_x(float(18.8516))- AF1_x(float(18.6875))* p), AF1_x(float(6.27739)));}
//
//    float AFromSrgbF1(float c){ return max(min(c * AF1_x(float(1.0 / 12.92)), AF1_x(float(0.04045))),
//   pow((c + AF1_x(float(0.055)))*(AF1_x(float(1.0))/ AF1_x(float(1.055))), AF1_x(float(2.4))));}
//
//    float AFromTwoF1(float c){ return c * c;}
//
//     f16vec2 ATo709H2(f16vec2 c){ return max(min(c * AH2_x(float16_t(4.5)), AH2_x(float16_t(0.018))), AH2_x(float16_t(1.099))* pow(c, AH2_x(float16_t(0.45)))- AH2_x(float16_t(0.099)));}
//
//     f16vec2 AToGammaH2(f16vec2 c, float16_t rcpX){ return pow(c, AH2_x(float16_t(rcpX)));}
//
//     f16vec2 AToSrgbH2(f16vec2 c){ return max(min(c * AH2_x(float16_t(12.92)), AH2_x(float16_t(0.0031308))), AH2_x(float16_t(1.055))* pow(c, AH2_x(float16_t(0.41666)))- AH2_x(float16_t(0.055)));}
//
//     f16vec2 AToTwoH2(f16vec2 c){ return sqrt(c);}
//
//     f16vec2 AFrom709H2(f16vec2 c){ return max(min(c * AH2_x(float16_t(1.0 / 4.5)), AH2_x(float16_t(0.081))),
//    pow((c + AH2_x(float16_t(0.099)))*(AH2_x(float16_t(1.0))/(AH2_x(float16_t(1.099)))), AH2_x(float16_t(1.0 / 0.45))));}
//
//     f16vec2 AFromGammaH2(f16vec2 c, float16_t x){ return pow(c, AH2_x(float16_t(x)));}
//
//     f16vec2 AFromSrgbH2(f16vec2 c){ return max(min(c * AH2_x(float16_t(1.0 / 12.92)), AH2_x(float16_t(0.04045))),
//    pow((c + AH2_x(float16_t(0.055)))*(AH2_x(float16_t(1.0))/ AH2_x(float16_t(1.055))), AH2_x(float16_t(2.4))));}
//
//     f16vec2 AFromTwoH2(f16vec2 c){ return c * c;}
//
//    uvec2 ARmp8x8(uint a){ return uvec2(ABfe(a, 1u, 3u), ABfiM(ABfe(a, 3u, 3u), a, 1u));}
//
//    uvec2 ARmpRed8x8(uint a){ return uvec2(ABfiM(ABfe(a, 2u, 3u), a, 1u), ABfiM(ABfe(a, 3u, 3u), ABfe(a, 1u, 2u), 2u));}
//
//    vec2 opAAbsF2(out vec2 d, in vec2 a){ d = abs(a);return d;}
//    vec3 opAAbsF3(out vec3 d, in vec3 a){ d = abs(a);return d;}
//    vec4 opAAbsF4(out vec4 d, in vec4 a){ d = abs(a);return d;}
//
//    vec2 opAAddF2(out vec2 d, in vec2 a, in vec2 b){ d = a + b;return d;}
//    vec3 opAAddF3(out vec3 d, in vec3 a, in vec3 b){ d = a + b;return d;}
//    vec4 opAAddF4(out vec4 d, in vec4 a, in vec4 b){ d = a + b;return d;}
//
//    vec2 opACpyF2(out vec2 d, in vec2 a){ d = a;return d;}
//    vec3 opACpyF3(out vec3 d, in vec3 a){ d = a;return d;}
//    vec4 opACpyF4(out vec4 d, in vec4 a){ d = a;return d;}
//
//    vec2 opALerpF2(out vec2 d, in vec2 a, in vec2 b, in vec2 c){ d = ALerpF2(a, b, c);return d;}
//    vec3 opALerpF3(out vec3 d, in vec3 a, in vec3 b, in vec3 c){ d = ALerpF3(a, b, c);return d;}
//    vec4 opALerpF4(out vec4 d, in vec4 a, in vec4 b, in vec4 c){ d = ALerpF4(a, b, c);return d;}
//
//    vec2 opALerpOneF2(out vec2 d, in vec2 a, in vec2 b, float c){ d = ALerpF2(a, b, AF2_x(float(c)));return d;}
//    vec3 opALerpOneF3(out vec3 d, in vec3 a, in vec3 b, float c){ d = ALerpF3(a, b, AF3_x(float(c)));return d;}
//    vec4 opALerpOneF4(out vec4 d, in vec4 a, in vec4 b, float c){ d = ALerpF4(a, b, AF4_x(float(c)));return d;}
//
//    vec2 opAMaxF2(out vec2 d, in vec2 a, in vec2 b){ d = max(a, b);return d;}
//    vec3 opAMaxF3(out vec3 d, in vec3 a, in vec3 b){ d = max(a, b);return d;}
//    vec4 opAMaxF4(out vec4 d, in vec4 a, in vec4 b){ d = max(a, b);return d;}
//
//    vec2 opAMinF2(out vec2 d, in vec2 a, in vec2 b){ d = min(a, b);return d;}
//    vec3 opAMinF3(out vec3 d, in vec3 a, in vec3 b){ d = min(a, b);return d;}
//    vec4 opAMinF4(out vec4 d, in vec4 a, in vec4 b){ d = min(a, b);return d;}
//
//    vec2 opAMulF2(out vec2 d, in vec2 a, in vec2 b){ d = a * b;return d;}
//    vec3 opAMulF3(out vec3 d, in vec3 a, in vec3 b){ d = a * b;return d;}
//    vec4 opAMulF4(out vec4 d, in vec4 a, in vec4 b){ d = a * b;return d;}
//
//    vec2 opAMulOneF2(out vec2 d, in vec2 a, float b){ d = a * AF2_x(float(b));return d;}
//    vec3 opAMulOneF3(out vec3 d, in vec3 a, float b){ d = a * AF3_x(float(b));return d;}
//    vec4 opAMulOneF4(out vec4 d, in vec4 a, float b){ d = a * AF4_x(float(b));return d;}
//
//    vec2 opANegF2(out vec2 d, in vec2 a){ d = - a;return d;}
//    vec3 opANegF3(out vec3 d, in vec3 a){ d = - a;return d;}
//    vec4 opANegF4(out vec4 d, in vec4 a){ d = - a;return d;}
//
//    vec2 opARcpF2(out vec2 d, in vec2 a){ d = ARcpF2(a);return d;}
//    vec3 opARcpF3(out vec3 d, in vec3 a){ d = ARcpF3(a);return d;}
//    vec4 opARcpF4(out vec4 d, in vec4 a){ d = ARcpF4(a);return d;}
//
// #line 70 "shaders/src/GenerateMipmap.comp"
//
// shared f16vec4 spd_intermediate[16][16];
//
// shared uint spd_counter;
//
//   f16vec4 SpdLoadSourceImageH(ivec2 p)
// {
//      vec2 textureCoord = p * params . invSrcExtent + params . invSrcExtent;
//    return f16vec4(texture(src, textureCoord));
// }
//
//   f16vec4 SpdLoadH(ivec2 p)
// {
//     return f16vec4(0);
// }
//
// void SpdStoreH(ivec2 p, f16vec4 value, uint mip)
// {
//     imageStore(dst[mip], p, vec4(value));
// }
//
//   f16vec4 SpdLoadIntermediateH(uint x, uint y)
// {
//     return spd_intermediate[x][y];
// }
// void SpdStoreIntermediateH(uint x, uint y, f16vec4 value)
// {
//     spd_intermediate[x][y]= value;
// }
//
//   f16vec4 SpdReduce4H(f16vec4 v0, f16vec4 v1, f16vec4 v2, f16vec4 v3)
// {
//     return(v0 + v1 + v2 + v3)* float16_t(0.25);
// }
//
// #line 1 "shaders/src/third_party/ffx_spd/ffx_spd.h"
//
//     vec4 SpdLoadSourceImage(ivec2 p){ return vec4(0.0, 0.0, 0.0, 0.0);}
//     vec4 SpdLoad(ivec2 p){ return vec4(0.0, 0.0, 0.0, 0.0);}
//   void SpdStore(ivec2 p, vec4 value, uint mip){ }
//     vec4 SpdLoadIntermediate(uint x, uint y){ return vec4(0.0, 0.0, 0.0, 0.0);}
//   void SpdStoreIntermediate(uint x, uint y, vec4 value){ }
//     vec4 SpdReduce4(vec4 v0, vec4 v1, vec4 v2, vec4 v3){ return vec4(0.0, 0.0, 0.0, 0.0);}
//
// #extension GL_KHR_shader_subgroup_quad : require
//
// void SpdWorkgroupShuffleBarrier(){
//
//     barrier();
//
// }
//
// bool SpdExitWorkgroup(uint numWorkGroups, uint localInvocationIndex)
// {
//
//     if(localInvocationIndex == 0)
//     {
//                                   ;
//     }
//     SpdWorkgroupShuffleBarrier();
//     return(0 !=(numWorkGroups - 1));
// }
//
//   vec4 SpdReduceQuad(vec4 v)
// {
//
//       vec4 v0 = v;
//       vec4 v1 = subgroupQuadSwapHorizontal(v);
//       vec4 v2 = subgroupQuadSwapVertical(v);
//       vec4 v3 = subgroupQuadSwapDiagonal(v);
//     return SpdReduce4(v0, v1, v2, v3);
//
//     return AF4_x(0.0);
// }
//
//   vec4 SpdReduceIntermediate(uvec2 i0, uvec2 i1, uvec2 i2, uvec2 i3)
// {
//       vec4 v0 = SpdLoadIntermediate(i0 . x, i0 . y);
//       vec4 v1 = SpdLoadIntermediate(i1 . x, i1 . y);
//       vec4 v2 = SpdLoadIntermediate(i2 . x, i2 . y);
//       vec4 v3 = SpdLoadIntermediate(i3 . x, i3 . y);
//     return SpdReduce4(v0, v1, v2, v3);
// }
//
//   vec4 SpdReduceLoad4(uvec2 i0, uvec2 i1, uvec2 i2, uvec2 i3)
// {
//       vec4 v0 = SpdLoad(ivec2(i0));
//       vec4 v1 = SpdLoad(ivec2(i1));
//       vec4 v2 = SpdLoad(ivec2(i2));
//       vec4 v3 = SpdLoad(ivec2(i3));
//     return SpdReduce4(v0, v1, v2, v3);
// }
//
//   vec4 SpdReduceLoad4(uvec2 base)
// {
//     return SpdReduceLoad4(
//           uvec2(base + uvec2(0, 0)),
//           uvec2(base + uvec2(0, 1)),
//           uvec2(base + uvec2(1, 0)),
//           uvec2(base + uvec2(1, 1)));
// }
//
//   vec4 SpdReduceLoadSourceImage4(uvec2 i0, uvec2 i1, uvec2 i2, uvec2 i3)
// {
//       vec4 v0 = SpdLoadSourceImage(ivec2(i0));
//       vec4 v1 = SpdLoadSourceImage(ivec2(i1));
//       vec4 v2 = SpdLoadSourceImage(ivec2(i2));
//       vec4 v3 = SpdLoadSourceImage(ivec2(i3));
//     return SpdReduce4(v0, v1, v2, v3);
// }
//
//   vec4 SpdReduceLoadSourceImage4(uvec2 base)
// {
//
//     return SpdLoadSourceImage(ivec2(base));
//
// }
//
// void SpdDownsampleMips_0_1_Intrinsics(uint x, uint y, uvec2 workGroupID, uint localInvocationIndex, uint mip)
// {
//       vec4 v[4];
//
//        ivec2 tex = ivec2(workGroupID . xy * 64)+ ivec2(x * 2, y * 2);
//        ivec2 pix = ivec2(workGroupID . xy * 32)+ ivec2(x, y);
//     v[0]= SpdReduceLoadSourceImage4(tex);
//     SpdStore(pix, v[0], 0);
//
//     tex = ivec2(workGroupID . xy * 64)+ ivec2(x * 2 + 32, y * 2);
//     pix = ivec2(workGroupID . xy * 32)+ ivec2(x + 16, y);
//     v[1]= SpdReduceLoadSourceImage4(tex);
//     SpdStore(pix, v[1], 0);
//
//     tex = ivec2(workGroupID . xy * 64)+ ivec2(x * 2, y * 2 + 32);
//     pix = ivec2(workGroupID . xy * 32)+ ivec2(x, y + 16);
//     v[2]= SpdReduceLoadSourceImage4(tex);
//     SpdStore(pix, v[2], 0);
//
//     tex = ivec2(workGroupID . xy * 64)+ ivec2(x * 2 + 32, y * 2 + 32);
//     pix = ivec2(workGroupID . xy * 32)+ ivec2(x + 16, y + 16);
//     v[3]= SpdReduceLoadSourceImage4(tex);
//     SpdStore(pix, v[3], 0);
//
//     if(mip <= 1)
//         return;
//
//     v[0]= SpdReduceQuad(v[0]);
//     v[1]= SpdReduceQuad(v[1]);
//     v[2]= SpdReduceQuad(v[2]);
//     v[3]= SpdReduceQuad(v[3]);
//
//     if((localInvocationIndex % 4)== 0)
//     {
//         SpdStore(ivec2(workGroupID . xy * 16)+
//                ivec2(x / 2, y / 2), v[0], 1);
//         SpdStoreIntermediate(
//             x / 2, y / 2, v[0]);
//
//         SpdStore(ivec2(workGroupID . xy * 16)+
//                ivec2(x / 2 + 8, y / 2), v[1], 1);
//         SpdStoreIntermediate(
//             x / 2 + 8, y / 2, v[1]);
//
//         SpdStore(ivec2(workGroupID . xy * 16)+
//                ivec2(x / 2, y / 2 + 8), v[2], 1);
//         SpdStoreIntermediate(
//             x / 2, y / 2 + 8, v[2]);
//
//         SpdStore(ivec2(workGroupID . xy * 16)+
//                ivec2(x / 2 + 8, y / 2 + 8), v[3], 1);
//         SpdStoreIntermediate(
//             x / 2 + 8, y / 2 + 8, v[3]);
//     }
// }
//
// void SpdDownsampleMips_0_1_LDS(uint x, uint y, uvec2 workGroupID, uint localInvocationIndex, uint mip)
// {
//       vec4 v[4];
//
//        ivec2 tex = ivec2(workGroupID . xy * 64)+ ivec2(x * 2, y * 2);
//        ivec2 pix = ivec2(workGroupID . xy * 32)+ ivec2(x, y);
//     v[0]= SpdReduceLoadSourceImage4(tex);
//     SpdStore(pix, v[0], 0);
//
//     tex = ivec2(workGroupID . xy * 64)+ ivec2(x * 2 + 32, y * 2);
//     pix = ivec2(workGroupID . xy * 32)+ ivec2(x + 16, y);
//     v[1]= SpdReduceLoadSourceImage4(tex);
//     SpdStore(pix, v[1], 0);
//
//     tex = ivec2(workGroupID . xy * 64)+ ivec2(x * 2, y * 2 + 32);
//     pix = ivec2(workGroupID . xy * 32)+ ivec2(x, y + 16);
//     v[2]= SpdReduceLoadSourceImage4(tex);
//     SpdStore(pix, v[2], 0);
//
//     tex = ivec2(workGroupID . xy * 64)+ ivec2(x * 2 + 32, y * 2 + 32);
//     pix = ivec2(workGroupID . xy * 32)+ ivec2(x + 16, y + 16);
//     v[3]= SpdReduceLoadSourceImage4(tex);
//     SpdStore(pix, v[3], 0);
//
//     if(mip <= 1)
//         return;
//
//     for(int i = 0;i < 4;i ++)
//     {
//         SpdStoreIntermediate(x, y, v[i]);
//         SpdWorkgroupShuffleBarrier();
//         if(localInvocationIndex < 64)
//         {
//             v[i]= SpdReduceIntermediate(
//                   uvec2(x * 2 + 0, y * 2 + 0),
//                   uvec2(x * 2 + 1, y * 2 + 0),
//                   uvec2(x * 2 + 0, y * 2 + 1),
//                   uvec2(x * 2 + 1, y * 2 + 1)
//             );
//             SpdStore(ivec2(workGroupID . xy * 16)+ ivec2(x +(i % 2)* 8, y +(i / 2)* 8), v[i], 1);
//         }
//         SpdWorkgroupShuffleBarrier();
//     }
//
//     if(localInvocationIndex < 64)
//     {
//         SpdStoreIntermediate(x + 0, y + 0, v[0]);
//         SpdStoreIntermediate(x + 8, y + 0, v[1]);
//         SpdStoreIntermediate(x + 0, y + 8, v[2]);
//         SpdStoreIntermediate(x + 8, y + 8, v[3]);
//     }
// }
//
// void SpdDownsampleMips_0_1(uint x, uint y, uvec2 workGroupID, uint localInvocationIndex, uint mip)
// {
//
//     SpdDownsampleMips_0_1_Intrinsics(x, y, workGroupID, localInvocationIndex, mip);
//
// }
//
// void SpdDownsampleMip_2(uint x, uint y, uvec2 workGroupID, uint localInvocationIndex, uint mip)
// {
//
//       vec4 v = SpdLoadIntermediate(x, y);
//     v = SpdReduceQuad(v);
//
//     if(localInvocationIndex % 4 == 0)
//     {
//         SpdStore(ivec2(workGroupID . xy * 8)+ ivec2(x / 2, y / 2), v, mip);
//         SpdStoreIntermediate(x +(y / 2)% 2, y, v);
//     }
//
// }
//
// void SpdDownsampleMip_3(uint x, uint y, uvec2 workGroupID, uint localInvocationIndex, uint mip)
// {
//
//     if(localInvocationIndex < 64)
//     {
//           vec4 v = SpdLoadIntermediate(x * 2 + y % 2, y * 2);
//         v = SpdReduceQuad(v);
//
//         if(localInvocationIndex % 4 == 0)
//         {
//             SpdStore(ivec2(workGroupID . xy * 4)+ ivec2(x / 2, y / 2), v, mip);
//             SpdStoreIntermediate(x * 2 + y / 2, y * 2, v);
//         }
//     }
//
// }
//
// void SpdDownsampleMip_4(uint x, uint y, uvec2 workGroupID, uint localInvocationIndex, uint mip)
// {
//
//     if(localInvocationIndex < 16)
//     {
//           vec4 v = SpdLoadIntermediate(x * 4 + y, y * 4);
//         v = SpdReduceQuad(v);
//
//         if(localInvocationIndex % 4 == 0)
//         {
//             SpdStore(ivec2(workGroupID . xy * 2)+ ivec2(x / 2, y / 2), v, mip);
//             SpdStoreIntermediate(x / 2 + y, 0, v);
//         }
//     }
//
// }
//
// void SpdDownsampleMip_5(uint x, uint y, uvec2 workGroupID, uint localInvocationIndex, uint mip)
// {
//
//     if(localInvocationIndex < 4)
//     {
//           vec4 v = SpdLoadIntermediate(localInvocationIndex, 0);
//         v = SpdReduceQuad(v);
//
//         if(localInvocationIndex % 4 == 0)
//         {
//             SpdStore(ivec2(workGroupID . xy), v, mip);
//         }
//     }
//
// }
//
// void SpdDownsampleMips_6_7(uint x, uint y, uint mips)
// {
//        ivec2 tex = ivec2(x * 4 + 0, y * 4 + 0);
//        ivec2 pix = ivec2(x * 2 + 0, y * 2 + 0);
//       vec4 v0 = SpdReduceLoad4(tex);
//     SpdStore(pix, v0, 6);
//
//     tex = ivec2(x * 4 + 2, y * 4 + 0);
//     pix = ivec2(x * 2 + 1, y * 2 + 0);
//       vec4 v1 = SpdReduceLoad4(tex);
//     SpdStore(pix, v1, 6);
//
//     tex = ivec2(x * 4 + 0, y * 4 + 2);
//     pix = ivec2(x * 2 + 0, y * 2 + 1);
//       vec4 v2 = SpdReduceLoad4(tex);
//     SpdStore(pix, v2, 6);
//
//     tex = ivec2(x * 4 + 2, y * 4 + 2);
//     pix = ivec2(x * 2 + 1, y * 2 + 1);
//       vec4 v3 = SpdReduceLoad4(tex);
//     SpdStore(pix, v3, 6);
//
//     if(mips <= 7)return;
//
//       vec4 v = SpdReduce4(v0, v1, v2, v3);
//     SpdStore(ivec2(x, y), v, 7);
//     SpdStoreIntermediate(x, y, v);
// }
//
// void SpdDownsampleNextFour(uint x, uint y, uvec2 workGroupID, uint localInvocationIndex, uint baseMip, uint mips)
// {
//     if(mips <= baseMip)return;
//     SpdWorkgroupShuffleBarrier();
//     SpdDownsampleMip_2(x, y, workGroupID, localInvocationIndex, baseMip);
//
//     if(mips <= baseMip + 1)return;
//     SpdWorkgroupShuffleBarrier();
//     SpdDownsampleMip_3(x, y, workGroupID, localInvocationIndex, baseMip + 1);
//
//     if(mips <= baseMip + 2)return;
//     SpdWorkgroupShuffleBarrier();
//     SpdDownsampleMip_4(x, y, workGroupID, localInvocationIndex, baseMip + 2);
//
//     if(mips <= baseMip + 3)return;
//     SpdWorkgroupShuffleBarrier();
//     SpdDownsampleMip_5(x, y, workGroupID, localInvocationIndex, baseMip + 3);
// }
//
// void SpdDownsample(
//       uvec2 workGroupID,
//       uint localInvocationIndex,
//       uint mips,
//       uint numWorkGroups
// ){
//       uvec2 sub_xy = ARmpRed8x8(localInvocationIndex % 64);
//       uint x = sub_xy . x + 8 *((localInvocationIndex >> 6)% 2);
//       uint y = sub_xy . y + 8 *((localInvocationIndex >> 7));
//     SpdDownsampleMips_0_1(x, y, workGroupID, localInvocationIndex, mips);
//
//     SpdDownsampleNextFour(x, y, workGroupID, localInvocationIndex, 2, mips);
//
//     if(mips <= 6)return;
//
//     if(SpdExitWorkgroup(numWorkGroups, localInvocationIndex))return;
//
//     SpdDownsampleMips_6_7(x, y, mips);
//
//     SpdDownsampleNextFour(x, y, uvec2(0, 0), localInvocationIndex, 8, mips);
// }
//
// #extension GL_EXT_shader_subgroup_extended_types_float16 : require
//
//   f16vec4 SpdReduceQuadH(f16vec4 v)
// {
//
//       f16vec4 v0 = v;
//       f16vec4 v1 = subgroupQuadSwapHorizontal(v);
//       f16vec4 v2 = subgroupQuadSwapVertical(v);
//       f16vec4 v3 = subgroupQuadSwapDiagonal(v);
//     return SpdReduce4H(v0, v1, v2, v3);
//
//     return f16vec4(0.0, 0.0, 0.0, 0.0);
//
// }
//
//   f16vec4 SpdReduceIntermediateH(uvec2 i0, uvec2 i1, uvec2 i2, uvec2 i3)
// {
//       f16vec4 v0 = SpdLoadIntermediateH(i0 . x, i0 . y);
//       f16vec4 v1 = SpdLoadIntermediateH(i1 . x, i1 . y);
//       f16vec4 v2 = SpdLoadIntermediateH(i2 . x, i2 . y);
//       f16vec4 v3 = SpdLoadIntermediateH(i3 . x, i3 . y);
//     return SpdReduce4H(v0, v1, v2, v3);
// }
//
//   f16vec4 SpdReduceLoad4H(uvec2 i0, uvec2 i1, uvec2 i2, uvec2 i3)
// {
//       f16vec4 v0 = SpdLoadH(ivec2(i0));
//       f16vec4 v1 = SpdLoadH(ivec2(i1));
//       f16vec4 v2 = SpdLoadH(ivec2(i2));
//       f16vec4 v3 = SpdLoadH(ivec2(i3));
//     return SpdReduce4H(v0, v1, v2, v3);
// }
//
//   f16vec4 SpdReduceLoad4H(uvec2 base)
// {
//     return SpdReduceLoad4H(
//           uvec2(base + uvec2(0, 0)),
//           uvec2(base + uvec2(0, 1)),
//           uvec2(base + uvec2(1, 0)),
//           uvec2(base + uvec2(1, 1)));
// }
//
//   f16vec4 SpdReduceLoadSourceImage4H(uvec2 i0, uvec2 i1, uvec2 i2, uvec2 i3)
// {
//       f16vec4 v0 = SpdLoadSourceImageH(ivec2(i0));
//       f16vec4 v1 = SpdLoadSourceImageH(ivec2(i1));
//       f16vec4 v2 = SpdLoadSourceImageH(ivec2(i2));
//       f16vec4 v3 = SpdLoadSourceImageH(ivec2(i3));
//     return SpdReduce4H(v0, v1, v2, v3);
// }
//
//   f16vec4 SpdReduceLoadSourceImage4H(uvec2 base)
// {
//
//     return SpdLoadSourceImageH(ivec2(base));
//
// }
//
// void SpdDownsampleMips_0_1_IntrinsicsH(uint x, uint y, uvec2 workGroupID, uint localInvocationIndex, uint mips)
// {
//       f16vec4 v[4];
//
//        ivec2 tex = ivec2(workGroupID . xy * 64)+ ivec2(x * 2, y * 2);
//        ivec2 pix = ivec2(workGroupID . xy * 32)+ ivec2(x, y);
//     v[0]= SpdReduceLoadSourceImage4H(tex);
//     SpdStoreH(pix, v[0], 0);
//
//     tex = ivec2(workGroupID . xy * 64)+ ivec2(x * 2 + 32, y * 2);
//     pix = ivec2(workGroupID . xy * 32)+ ivec2(x + 16, y);
//     v[1]= SpdReduceLoadSourceImage4H(tex);
//     SpdStoreH(pix, v[1], 0);
//
//     tex = ivec2(workGroupID . xy * 64)+ ivec2(x * 2, y * 2 + 32);
//     pix = ivec2(workGroupID . xy * 32)+ ivec2(x, y + 16);
//     v[2]= SpdReduceLoadSourceImage4H(tex);
//     SpdStoreH(pix, v[2], 0);
//
//     tex = ivec2(workGroupID . xy * 64)+ ivec2(x * 2 + 32, y * 2 + 32);
//     pix = ivec2(workGroupID . xy * 32)+ ivec2(x + 16, y + 16);
//     v[3]= SpdReduceLoadSourceImage4H(tex);
//     SpdStoreH(pix, v[3], 0);
//
//     if(mips <= 1)
//         return;
//
//     v[0]= SpdReduceQuadH(v[0]);
//     v[1]= SpdReduceQuadH(v[1]);
//     v[2]= SpdReduceQuadH(v[2]);
//     v[3]= SpdReduceQuadH(v[3]);
//
//     if((localInvocationIndex % 4)== 0)
//     {
//         SpdStoreH(ivec2(workGroupID . xy * 16)+ ivec2(x / 2, y / 2), v[0], 1);
//         SpdStoreIntermediateH(x / 2, y / 2, v[0]);
//
//         SpdStoreH(ivec2(workGroupID . xy * 16)+ ivec2(x / 2 + 8, y / 2), v[1], 1);
//         SpdStoreIntermediateH(x / 2 + 8, y / 2, v[1]);
//
//         SpdStoreH(ivec2(workGroupID . xy * 16)+ ivec2(x / 2, y / 2 + 8), v[2], 1);
//         SpdStoreIntermediateH(x / 2, y / 2 + 8, v[2]);
//
//         SpdStoreH(ivec2(workGroupID . xy * 16)+ ivec2(x / 2 + 8, y / 2 + 8), v[3], 1);
//         SpdStoreIntermediateH(x / 2 + 8, y / 2 + 8, v[3]);
//     }
// }
//
// void SpdDownsampleMips_0_1_LDSH(uint x, uint y, uvec2 workGroupID, uint localInvocationIndex, uint mips)
// {
//       f16vec4 v[4];
//
//        ivec2 tex = ivec2(workGroupID . xy * 64)+ ivec2(x * 2, y * 2);
//        ivec2 pix = ivec2(workGroupID . xy * 32)+ ivec2(x, y);
//     v[0]= SpdReduceLoadSourceImage4H(tex);
//     SpdStoreH(pix, v[0], 0);
//
//     tex = ivec2(workGroupID . xy * 64)+ ivec2(x * 2 + 32, y * 2);
//     pix = ivec2(workGroupID . xy * 32)+ ivec2(x + 16, y);
//     v[1]= SpdReduceLoadSourceImage4H(tex);
//     SpdStoreH(pix, v[1], 0);
//
//     tex = ivec2(workGroupID . xy * 64)+ ivec2(x * 2, y * 2 + 32);
//     pix = ivec2(workGroupID . xy * 32)+ ivec2(x, y + 16);
//     v[2]= SpdReduceLoadSourceImage4H(tex);
//     SpdStoreH(pix, v[2], 0);
//
//     tex = ivec2(workGroupID . xy * 64)+ ivec2(x * 2 + 32, y * 2 + 32);
//     pix = ivec2(workGroupID . xy * 32)+ ivec2(x + 16, y + 16);
//     v[3]= SpdReduceLoadSourceImage4H(tex);
//     SpdStoreH(pix, v[3], 0);
//
//     if(mips <= 1)
//         return;
//
//     for(int i = 0;i < 4;i ++)
//     {
//         SpdStoreIntermediateH(x, y, v[i]);
//         SpdWorkgroupShuffleBarrier();
//         if(localInvocationIndex < 64)
//         {
//             v[i]= SpdReduceIntermediateH(
//                   uvec2(x * 2 + 0, y * 2 + 0),
//                   uvec2(x * 2 + 1, y * 2 + 0),
//                   uvec2(x * 2 + 0, y * 2 + 1),
//                   uvec2(x * 2 + 1, y * 2 + 1)
//             );
//             SpdStoreH(ivec2(workGroupID . xy * 16)+ ivec2(x +(i % 2)* 8, y +(i / 2)* 8), v[i], 1);
//         }
//         SpdWorkgroupShuffleBarrier();
//     }
//
//     if(localInvocationIndex < 64)
//     {
//         SpdStoreIntermediateH(x + 0, y + 0, v[0]);
//         SpdStoreIntermediateH(x + 8, y + 0, v[1]);
//         SpdStoreIntermediateH(x + 0, y + 8, v[2]);
//         SpdStoreIntermediateH(x + 8, y + 8, v[3]);
//     }
// }
//
// void SpdDownsampleMips_0_1H(uint x, uint y, uvec2 workGroupID, uint localInvocationIndex, uint mips)
// {
//
//     SpdDownsampleMips_0_1_IntrinsicsH(x, y, workGroupID, localInvocationIndex, mips);
//
// }
//
// void SpdDownsampleMip_2H(uint x, uint y, uvec2 workGroupID, uint localInvocationIndex, uint mip)
// {
//
//       f16vec4 v = SpdLoadIntermediateH(x, y);
//     v = SpdReduceQuadH(v);
//
//     if(localInvocationIndex % 4 == 0)
//     {
//         SpdStoreH(ivec2(workGroupID . xy * 8)+ ivec2(x / 2, y / 2), v, mip);
//         SpdStoreIntermediateH(x +(y / 2)% 2, y, v);
//     }
//
// }
//
// void SpdDownsampleMip_3H(uint x, uint y, uvec2 workGroupID, uint localInvocationIndex, uint mip)
// {
//
//     if(localInvocationIndex < 64)
//     {
//           f16vec4 v = SpdLoadIntermediateH(x * 2 + y % 2, y * 2);
//         v = SpdReduceQuadH(v);
//
//         if(localInvocationIndex % 4 == 0)
//         {
//             SpdStoreH(ivec2(workGroupID . xy * 4)+ ivec2(x / 2, y / 2), v, mip);
//             SpdStoreIntermediateH(x * 2 + y / 2, y * 2, v);
//         }
//     }
//
// }
//
// void SpdDownsampleMip_4H(uint x, uint y, uvec2 workGroupID, uint localInvocationIndex, uint mip)
// {
//
//     if(localInvocationIndex < 16)
//     {
//           f16vec4 v = SpdLoadIntermediateH(x * 4 + y, y * 4);
//         v = SpdReduceQuadH(v);
//
//         if(localInvocationIndex % 4 == 0)
//         {
//             SpdStoreH(ivec2(workGroupID . xy * 2)+ ivec2(x / 2, y / 2), v, mip);
//             SpdStoreIntermediateH(x / 2 + y, 0, v);
//         }
//     }
//
// }
//
// void SpdDownsampleMip_5H(uint x, uint y, uvec2 workGroupID, uint localInvocationIndex, uint mip)
// {
//
//     if(localInvocationIndex < 4)
//     {
//           f16vec4 v = SpdLoadIntermediateH(localInvocationIndex, 0);
//         v = SpdReduceQuadH(v);
//
//         if(localInvocationIndex % 4 == 0)
//         {
//             SpdStoreH(ivec2(workGroupID . xy), v, mip);
//         }
//     }
//
// }
//
// void SpdDownsampleMips_6_7H(uint x, uint y, uint mips)
// {
//        ivec2 tex = ivec2(x * 4 + 0, y * 4 + 0);
//        ivec2 pix = ivec2(x * 2 + 0, y * 2 + 0);
//       f16vec4 v0 = SpdReduceLoad4H(tex);
//     SpdStoreH(pix, v0, 6);
//
//     tex = ivec2(x * 4 + 2, y * 4 + 0);
//     pix = ivec2(x * 2 + 1, y * 2 + 0);
//       f16vec4 v1 = SpdReduceLoad4H(tex);
//     SpdStoreH(pix, v1, 6);
//
//     tex = ivec2(x * 4 + 0, y * 4 + 2);
//     pix = ivec2(x * 2 + 0, y * 2 + 1);
//       f16vec4 v2 = SpdReduceLoad4H(tex);
//     SpdStoreH(pix, v2, 6);
//
//     tex = ivec2(x * 4 + 2, y * 4 + 2);
//     pix = ivec2(x * 2 + 1, y * 2 + 1);
//       f16vec4 v3 = SpdReduceLoad4H(tex);
//     SpdStoreH(pix, v3, 6);
//
//     if(mips < 8)return;
//
//       f16vec4 v = SpdReduce4H(v0, v1, v2, v3);
//     SpdStoreH(ivec2(x, y), v, 7);
//     SpdStoreIntermediateH(x, y, v);
// }
//
// void SpdDownsampleNextFourH(uint x, uint y, uvec2 workGroupID, uint localInvocationIndex, uint baseMip, uint mips)
// {
//     if(mips <= baseMip)return;
//     SpdWorkgroupShuffleBarrier();
//     SpdDownsampleMip_2H(x, y, workGroupID, localInvocationIndex, baseMip);
//
//     if(mips <= baseMip + 1)return;
//     SpdWorkgroupShuffleBarrier();
//     SpdDownsampleMip_3H(x, y, workGroupID, localInvocationIndex, baseMip + 1);
//
//     if(mips <= baseMip + 2)return;
//     SpdWorkgroupShuffleBarrier();
//     SpdDownsampleMip_4H(x, y, workGroupID, localInvocationIndex, baseMip + 2);
//
//     if(mips <= baseMip + 3)return;
//     SpdWorkgroupShuffleBarrier();
//     SpdDownsampleMip_5H(x, y, workGroupID, localInvocationIndex, baseMip + 3);
// }
//
// void SpdDownsampleH(
//       uvec2 workGroupID,
//       uint localInvocationIndex,
//       uint mips,
//       uint numWorkGroups
// ){
//       uvec2 sub_xy = ARmpRed8x8(localInvocationIndex % 64);
//       uint x = sub_xy . x + 8 *((localInvocationIndex >> 6)% 2);
//       uint y = sub_xy . y + 8 *((localInvocationIndex >> 7));
//
//     SpdDownsampleMips_0_1H(x, y, workGroupID, localInvocationIndex, mips);
//
//     SpdDownsampleNextFourH(x, y, workGroupID, localInvocationIndex, 2, mips);
//
//     if(mips < 7)return;
//
//     if(SpdExitWorkgroup(numWorkGroups, localInvocationIndex))return;
//
//     SpdDownsampleMips_6_7H(x, y, mips);
//
//     SpdDownsampleNextFourH(x, y, uvec2(0, 0), localInvocationIndex, 8, mips);
// }
//
// #line 175 "shaders/src/GenerateMipmap.comp"
//
// void main()
// {
//
//     SpdDownsampleH(gl_WorkGroupID . xy, gl_LocalInvocationIndex, params . levelCount, 0);
//
// }
