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    fn readSHData(sh: ptr<function, array<half3, 3>>, scale: ptr<function, f32>) {\n        let result = fetchScale(loadSplatSH_1to3());\n        *scale = result.scale;\n        sh[0] = half3(result.a);\n        sh[1] = half3(result.b);\n        sh[2] = half3(result.c);\n    }\n#elif SH_BANDS == 2\n    fn readSHData(sh: ptr<function, array<half3, 8>>, scale: ptr<function, f32>) {\n        let first: ScaleAndSH = fetchScale(loadSplatSH_1to3());\n        *scale = first.scale;\n        sh[0] = half3(first.a);\n        sh[1] = half3(first.b);\n        sh[2] = half3(first.c);\n\n        let second: SH = fetch4(loadSplatSH_4to7());\n        sh[3] = half3(second.a);\n        sh[4] = half3(second.b);\n        sh[5] = half3(second.c);\n        sh[6] = half3(second.d);\n\n        sh[7] = half3(fetch1(loadSplatSH_8to11().x));\n    }\n#else\n    fn readSHData(sh: ptr<function, array<half3, 15>>, scale: ptr<function, f32>) {\n        let first: ScaleAndSH = fetchScale(loadSplatSH_1to3());\n        *scale = first.scale;\n        sh[0] = half3(first.a);\n        sh[1] = half3(first.b);\n        sh[2] = half3(first.c);\n\n        let second: SH = fetch4(loadSplatSH_4to7());\n        sh[3] = half3(second.a);\n        sh[4] = half3(second.b);\n        sh[5] = half3(second.c);\n        sh[6] = half3(second.d);\n\n        let third: SH = fetch4(loadSplatSH_8to11());\n        sh[7] = half3(third.a);\n        sh[8] = half3(third.b);\n        sh[9] = half3(third.c);\n        sh[10] = half3(third.d);\n\n        let fourth: SH = fetch4(loadSplatSH_12to15());\n        sh[11] = half3(fourth.a);\n        sh[12] = half3(fourth.b);\n        sh[13] = half3(fourth.c);\n        sh[14] = half3(fourth.d);\n    }\n#endif\n\n#endif\n";
export default _default;
