struct LpvBlockData { // 8 x1280 =? uint MaskWeight; // 4 uint ColorRange; // 4 }; #ifdef RENDER_SETUP layout(binding = 0) writeonly buffer lpvBlockData #else layout(binding = 0) readonly buffer lpvBlockData #endif { LpvBlockData LpvBlockMap[]; }; const int LpvBlockMapOffset = 999; uint BuildBlockLpvData(uint mixMask, float mixWeight) { uint data = uint(saturate(mixWeight) * 255.0); data = data | (mixMask << 8); return data; } void ParseBlockLpvData(const in uint data, out uint mixMask, out float mixWeight) { mixWeight = (data & 0xFF) / 255.0; mixMask = (data >> 8) & 0xFF; }