declare const _default: "\n#if SH_BANDS > 0\n    #ifndef SOG_V2\n        uniform shN_mins: f32;\n        uniform shN_maxs: f32;\n    #endif\n\n    fn readSHTexel(u: i32, v: i32) -> half3 {\n        let t = textureLoad(sh_centroids, vec2i(u, v), 0);\n        #ifdef SOG_V2\n            let idx = vec3i(t.xyz * 255.0 + 0.5);\n            return half3(vec3f(lutShN(idx.x), lutShN(idx.y), lutShN(idx.z)));\n        #else\n            return mix(half3(half(uniform.shN_mins)), half3(half(uniform.shN_maxs)), half3(t.xyz));\n        #endif\n    }\n\n    fn readSHData(sh: ptr<function, array<half3, SH_COEFFS>>, scale: ptr<function, f32>) {\n        // extract the 16-bit centroid palette index from sh_labels bytes 0 and 1\n        let labels = textureLoad(sh_labels, splat.uv, 0);\n        let n = i32(labels.x * 255.0 + 0.5) + i32(labels.y * 255.0 + 0.5) * 256;\n\n        // calculate offset into the centroids texture (64 centroids per row, SH_COEFFS texels each)\n        let u = (n % 64) * SH_COEFFS;\n        let v = n / 64;\n\n        // read consecutive texels (unrolled to avoid Dawn's forward progress volatile wrapper)\n        sh[0] = readSHTexel(u, v);\n        sh[1] = readSHTexel(u + 1, v);\n        sh[2] = readSHTexel(u + 2, v);\n        #if SH_BANDS > 1\n            sh[3] = readSHTexel(u + 3, v);\n            sh[4] = readSHTexel(u + 4, v);\n            sh[5] = readSHTexel(u + 5, v);\n            sh[6] = readSHTexel(u + 6, v);\n            sh[7] = readSHTexel(u + 7, v);\n        #endif\n        #if SH_BANDS > 2\n            sh[8]  = readSHTexel(u + 8, v);\n            sh[9]  = readSHTexel(u + 9, v);\n            sh[10] = readSHTexel(u + 10, v);\n            sh[11] = readSHTexel(u + 11, v);\n            sh[12] = readSHTexel(u + 12, v);\n            sh[13] = readSHTexel(u + 13, v);\n            sh[14] = readSHTexel(u + 14, v);\n        #endif\n\n        *scale = 1.0;\n    }\n#endif\n";
export default _default;
