1#define_import_path bevy_pbr::pbr_deferred_types 4 mesh_types::MESH_FLAGS_SHADOW_RECEIVER_BIT, 5 pbr_types::{STANDARD_MATERIAL_FLAGS_FOG_ENABLED_BIT, STANDARD_MATERIAL_FLAGS_UNLIT_BIT}, 9const DEFERRED_FLAGS_UNLIT_BIT: u32 = 1u << 0u; 10const DEFERRED_FLAGS_FOG_ENABLED_BIT: u32 = 1u << 1u; 11const DEFERRED_MESH_FLAGS_SHADOW_RECEIVER_BIT: u32 = 1u << 2u; 13fn deferred_flags_from_mesh_material_flags(mesh_flags: u32, mat_flags: u32) -> u32 { 15 flags |= u32((mesh_flags & MESH_FLAGS_SHADOW_RECEIVER_BIT) != 0u) * DEFERRED_MESH_FLAGS_SHADOW_RECEIVER_BIT; 16 flags |= u32((mat_flags & STANDARD_MATERIAL_FLAGS_FOG_ENABLED_BIT) != 0u) * DEFERRED_FLAGS_FOG_ENABLED_BIT; 17 flags |= u32((mat_flags & STANDARD_MATERIAL_FLAGS_UNLIT_BIT) != 0u) * DEFERRED_FLAGS_UNLIT_BIT; 21fn mesh_material_flags_from_deferred_flags(deferred_flags: u32) -> vec2<u32> { 24 mesh_flags |= u32((deferred_flags & DEFERRED_MESH_FLAGS_SHADOW_RECEIVER_BIT) != 0u) * MESH_FLAGS_SHADOW_RECEIVER_BIT; 25 mat_flags |= u32((deferred_flags & DEFERRED_FLAGS_FOG_ENABLED_BIT) != 0u) * STANDARD_MATERIAL_FLAGS_FOG_ENABLED_BIT; 26 mat_flags |= u32((deferred_flags & DEFERRED_FLAGS_UNLIT_BIT) != 0u) * STANDARD_MATERIAL_FLAGS_UNLIT_BIT; 27 return vec2(mesh_flags, mat_flags); 30const U12MAXF = 4095.0; 31const U16MAXF = 65535.0; 32const U20MAXF = 1048575.0; 39fn pack_24bit_normal_and_flags(octahedral_normal: vec2<f32>, flags: u32) -> u32 { 40 let unorm1 = u32(saturate(octahedral_normal.x) * U12MAXF + 0.5); 41 let unorm2 = u32(saturate(octahedral_normal.y) * U12MAXF + 0.5); 42 return (unorm1 & 0xFFFu) | ((unorm2 & 0xFFFu) << 12u) | ((flags & 0xFFu) << 24u); 45fn unpack_24bit_normal(packed: u32) -> vec2<f32> { 46 let unorm1 = packed & 0xFFFu; 47 let unorm2 = (packed >> 12u) & 0xFFFu; 48 return vec2(f32(unorm1) / U12MAXF, f32(unorm2) / U12MAXF); 51fn unpack_flags(packed: u32) -> u32 { 52 return (packed >> 24u) & 0xFFu; 58fn unpack_unorm4x8_(v: u32) -> vec4<f32> { 61 f32((v >> 8u) & 0xFFu), 62 f32((v >> 16u) & 0xFFu), 63 f32((v >> 24u) & 0xFFu) 69fn pack_unorm4x8_(values: vec4<f32>) -> u32 { 70 let v = vec4<u32>(saturate(values) * 255.0 + 0.5); 71 return (v.w << 24u) | (v.z << 16u) | (v.y << 8u) | v.x; 75fn pack_unorm3x4_plus_unorm_20_(v: vec4<f32>) -> u32 { 76 let sm = vec3<u32>(saturate(v.xyz) * 15.0 + 0.5); 77 let bg = u32(saturate(v.w) * U20MAXF + 0.5); 78 return (bg << 12u) | (sm.z << 8u) | (sm.y << 4u) | sm.x; 82fn unpack_unorm3x4_plus_unorm_20_(v: u32) -> vec4<f32> { 85 f32((v >> 4u) & 0xFu) / 15.0, 86 f32((v >> 8u) & 0xFu) / 15.0, 87 f32((v >> 12u) & 0xFFFFFFu) / U20MAXF,