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

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