declare const _default: "\n\n#if SH_BANDS > 0\n\n// unpack signed 11 10 11 bits\nfn unpack111011s(bits: u32) -> vec3f {\n    return (vec3f((vec3<u32>(bits) >> vec3<u32>(21u, 11u, 0u)) & vec3<u32>(0x7ffu, 0x3ffu, 0x7ffu)) / vec3f(2047.0, 1023.0, 2047.0)) * 2.0 - 1.0;\n}\n\nstruct ScaleAndSH {\n    scale: f32,\n    a: vec3f,\n    b: vec3f,\n    c: vec3f\n};\n\n// fetch quantized spherical harmonic coefficients\nfn fetchScale(t_in: vec4<u32>) -> ScaleAndSH {\n    var result: ScaleAndSH;\n    result.scale = bitcast<f32>(t_in.x);\n    result.a = unpack111011s(t_in.y);\n    result.b = unpack111011s(t_in.z);\n    result.c = unpack111011s(t_in.w);\n    return result;\n}\n\nstruct SH {\n    a: vec3f,\n    b: vec3f,\n    c: vec3f,\n    d: vec3f\n};\n\n// fetch quantized spherical harmonic coefficients\nfn fetch4(t_in: vec4<u32>) -> SH {\n    var result: SH;\n    result.a = unpack111011s(t_in.x);\n    result.b = unpack111011s(t_in.y);\n    result.c = unpack111011s(t_in.z);\n    result.d = unpack111011s(t_in.w);\n    return result;\n}\n\nfn fetch1(t_in: u32) -> vec3f {\n    return unpack111011s(t_in);\n}\n\n#if SH_BANDS == 1\n    var splatSH_1to3: texture_2d<u32>;\n\n    fn readSHData(source: ptr<function, SplatSource>, sh: ptr<function, array<vec3f, 3>>, scale: ptr<function, f32>) {\n        let result = fetchScale(textureLoad(splatSH_1to3, source.uv, 0));\n        *scale = result.scale;\n        sh[0] = result.a;\n        sh[1] = result.b;\n        sh[2] = result.c;\n    }\n#elif SH_BANDS == 2\n    var splatSH_1to3: texture_2d<u32>;\n    var splatSH_4to7: texture_2d<u32>;\n    var splatSH_8to11: texture_2d<u32>;\n\n    fn readSHData(source: ptr<function, SplatSource>, sh: ptr<function, array<vec3f, 8>>, scale: ptr<function, f32>) {\n        let first: ScaleAndSH = fetchScale(textureLoad(splatSH_1to3, source.uv, 0));\n        *scale = first.scale;\n        sh[0] = first.a;\n        sh[1] = first.b;\n        sh[2] = first.c;\n\n        let second: SH = fetch4(textureLoad(splatSH_4to7, source.uv, 0));\n        sh[3] = second.a;\n        sh[4] = second.b;\n        sh[5] = second.c;\n        sh[6] = second.d;\n\n        sh[7] = fetch1(textureLoad(splatSH_8to11, source.uv, 0).x);\n    }\n#else\n    var splatSH_1to3: texture_2d<u32>;\n    var splatSH_4to7: texture_2d<u32>;\n    var splatSH_8to11: texture_2d<u32>;\n    var splatSH_12to15: texture_2d<u32>;\n\n    fn readSHData(source: ptr<function, SplatSource>, sh: ptr<function, array<vec3f, 15>>, scale: ptr<function, f32>) {\n        let first: ScaleAndSH = fetchScale(textureLoad(splatSH_1to3, source.uv, 0));\n        *scale = first.scale;\n        sh[0] = first.a;\n        sh[1] = first.b;\n        sh[2] = first.c;\n\n        let second: SH = fetch4(textureLoad(splatSH_4to7, source.uv, 0));\n        sh[3] = second.a;\n        sh[4] = second.b;\n        sh[5] = second.c;\n        sh[6] = second.d;\n\n        let third: SH = fetch4(textureLoad(splatSH_8to11, source.uv, 0));\n        sh[7] = third.a;\n        sh[8] = third.b;\n        sh[9] = third.c;\n        sh[10] = third.d;\n\n        let fourth: SH = fetch4(textureLoad(splatSH_12to15, source.uv, 0));\n        sh[11] = fourth.a;\n        sh[12] = fourth.b;\n        sh[13] = fourth.c;\n        sh[14] = fourth.d;\n    }\n#endif\n\n#endif\n";
export default _default;
