1#define_import_path bevy_gaussian_splatting::bindings 3#import bevy_pbr::prepass_bindings::PreviousViewUniforms 4#import bevy_render::globals::Globals 5#import bevy_render::view::View 7@group(0) @binding(0) var<uniform> view: View; 8@group(0) @binding(1) var<uniform> globals: Globals; 9@group(0) @binding(2) var<uniform> previous_view_uniforms: PreviousViewUniforms; 11@group(0) @binding(14) var<storage> visibility_ranges: array<vec4<f32>>; 13struct GaussianUniforms { 14 transform: mat4x4<f32>, 26@group(1) @binding(0) var<uniform> gaussian_uniforms: GaussianUniforms; 28#ifdef GAUSSIAN_3D_STRUCTURE 31 @location(0) rotation: vec4<f32>, 32 @location(1) position_visibility: vec4<f32>, 33 @location(2) scale_opacity: vec4<f32>, 34 sh: array<f32, #{SH_COEFF_COUNT}>, 37 #ifdef READ_WRITE_POINTS 38 @group(2) @binding(0) var<storage, read_write> points: array<Gaussian>; 40 @group(2) @binding(0) var<storage, read> points: array<Gaussian>; 43 #ifdef BINARY_GAUSSIAN_OP 44 #ifdef READ_WRITE_POINTS 45 @group(3) @binding(0) var<storage, read_write> rhs_points: array<Gaussian>; 47 @group(3) @binding(0) var<storage, read> rhs_points: array<Gaussian>; 50 @group(4) @binding(0) var<storage, read_write> out_points: array<Gaussian>; 55 #ifdef READ_WRITE_POINTS 56 @group(2) @binding(0) var<storage, read_write> position_visibility: array<vec4<f32>>; 58 @group(2) @binding(0) var<storage, read> position_visibility: array<vec4<f32>>; 61 @group(2) @binding(1) var<storage, read> spherical_harmonics: array<array<f32, #{SH_COEFF_COUNT}>>; 63 #ifdef BINARY_GAUSSIAN_OP 64 #ifdef READ_WRITE_POINTS 65 @group(3) @binding(0) var<storage, read_write> rhs_position_visibility: array<vec4<f32>>; 67 @group(3) @binding(0) var<storage, read> rhs_position_visibility: array<vec4<f32>>; 70 @group(3) @binding(1) var<storage, read> rhs_spherical_harmonics: array<array<f32, #{SH_COEFF_COUNT}>>; 72 #ifdef PRECOMPUTE_COVARIANCE_3D 73 @group(3) @binding(2) var<storage, read> rhs_covariance_3d_opacity: array<array<f32, 8>>; 75 @group(3) @binding(2) var<storage, read> rhs_rotation: array<vec4<f32>>; 76 @group(3) @binding(3) var<storage, read> rhs_scale_opacity: array<vec4<f32>>; 81 #ifdef BINARY_GAUSSIAN_OP 82 @group(4) @binding(0) var<storage, read_write> out_position_visibility: array<vec4<f32>>; 83 @group(4) @binding(1) var<storage, read_write> out_spherical_harmonics: array<array<f32, #{SH_COEFF_COUNT}>>; 85 #ifdef PRECOMPUTE_COVARIANCE_3D 86 @group(4) @binding(2) var<storage, read_write> out_covariance_3d_opacity: array<array<f32, 8>>; 88 @group(4) @binding(2) var<storage, read_write> out_rotation: array<vec4<f32>>; 89 @group(4) @binding(3) var<storage, read_write> out_scale_opacity: array<vec4<f32>>; 93 #ifdef PRECOMPUTE_COVARIANCE_3D 94 @group(2) @binding(2) var<storage, read> covariance_3d_opacity: array<array<f32, 8>>; 96 @group(2) @binding(2) var<storage, read> rotation: array<vec4<f32>>; 97 @group(2) @binding(3) var<storage, read> scale_opacity: array<vec4<f32>>; 102 #ifdef READ_WRITE_POINTS 103 @group(2) @binding(0) var<storage, read_write> position_visibility: array<vec4<f32>>; 105 @group(2) @binding(0) var<storage, read> position_visibility: array<vec4<f32>>; 108 @group(2) @binding(1) var<storage, read> spherical_harmonics: array<array<u32, #{HALF_SH_COEFF_COUNT}>>; 110 #ifdef BINARY_GAUSSIAN_OP 111 #ifdef READ_WRITE_POINTS 112 @group(3) @binding(0) var<storage, read_write> rhs_position_visibility: array<vec4<f32>>; 114 @group(3) @binding(0) var<storage, read> rhs_position_visibility: array<vec4<f32>>; 117 @group(3) @binding(1) var<storage, read> rhs_spherical_harmonics: array<array<u32, #{HALF_SH_COEFF_COUNT}>>; 119 #ifdef PRECOMPUTE_COVARIANCE_3D 120 @group(3) @binding(2) var<storage, read> rhs_covariance_3d_opacity: array<vec4<u32>>; 122 @group(3) @binding(2) var<storage, read> rhs_rotation_scale_opacity: array<vec4<u32>>; 125 @group(4) @binding(0) var<storage, read_write> out_position_visibility: array<vec4<f32>>; 126 @group(4) @binding(1) var<storage, read_write> out_spherical_harmonics: array<array<u32, #{HALF_SH_COEFF_COUNT}>>; 128 #ifdef PRECOMPUTE_COVARIANCE_3D 129 @group(4) @binding(2) var<storage, read_write> out_covariance_3d_opacity: array<vec4<u32>>; 131 @group(4) @binding(2) var<storage, read_write> out_rotation_scale_opacity: array<vec4<u32>>; 135 #ifdef PRECOMPUTE_COVARIANCE_3D 136 @group(2) @binding(2) var<storage, read> covariance_3d_opacity: array<vec4<u32>>; 138 @group(2) @binding(2) var<storage, read> rotation_scale_opacity: array<vec4<u32>>; 142 #ifdef PLANAR_TEXTURE_F16 143 @group(2) @binding(0) var position_visibility: texture_2d<f32>; 145 #if SH_VEC4_PLANES == 1 146 @group(2) @binding(1) var spherical_harmonics: texture_2d<u32>; 148 @group(2) @binding(1) var spherical_harmonics: texture_2d_array<u32>; 151 #ifdef PRECOMPUTE_COVARIANCE_3D 152 @group(2) @binding(2) var covariance_3d_opacity: texture_2d<u32>; 154 @group(2) @binding(2) var rotation_scale_opacity: texture_2d<u32>; 157 #ifdef BINARY_GAUSSIAN_OP 158 @group(3) @binding(0) var rhs_position_visibility: texture_2d<f32>; 160 #if SH_VEC4_PLANES == 1 161 @group(3) @binding(1) var rhs_spherical_harmonics: texture_2d<u32>; 163 @group(3) @binding(1) var rhs_spherical_harmonics: texture_2d_array<u32>; 166 #ifdef PRECOMPUTE_COVARIANCE_3D 167 @group(3) @binding(2) var rhs_covariance_3d_opacity: texture_2d<u32>; 169 @group(3) @binding(2) var rhs_rotation_scale_opacity: texture_2d<u32>; 174 #ifdef PLANAR_TEXTURE_F32 175 @group(2) @binding(0) var position_visibility: texture_2d<f32>; 177 #if SH_VEC4_PLANES == 1 178 @group(2) @binding(1) var spherical_harmonics: texture_2d<f32>; 180 @group(2) @binding(1) var spherical_harmonics: texture_2d_array<f32>; 185 @group(2) @binding(2) var rotation_scale_opacity: texture_2d<f32>; 187 #ifdef BINARY_GAUSSIAN_OP 188 @group(3) @binding(0) var rhs_position_visibility: texture_2d<f32>; 190 #if SH_VEC4_PLANES == 1 191 @group(3) @binding(1) var rhs_spherical_harmonics: texture_2d<f32>; 193 @group(3) @binding(1) var rhs_spherical_harmonics: texture_2d_array<f32>; 196 @group(3) @binding(2) var rhs_rotation_scale_opacity: texture_2d<f32>; 199#else ifdef GAUSSIAN_4D 201 #ifdef READ_WRITE_POINTS 202 @group(2) @binding(0) var<storage, read_write> position_visibility: array<vec4<f32>>; 204 @group(2) @binding(0) var<storage, read> position_visibility: array<vec4<f32>>; 207 @group(2) @binding(1) var<storage, read> spherindrical_harmonics: array<array<f32, #{SH_4D_COEFF_COUNT}>>; 209 @group(2) @binding(2) var<storage, read> isotropic_rotations: array<array<f32, 8>>; 210 @group(2) @binding(3) var<storage, read> scale_opacity: array<vec4<f32>>; 211 @group(2) @binding(4) var<storage, read> timestamp_timescale: array<vec4<f32>>; 213 #ifdef BINARY_GAUSSIAN_OP 214 @group(3) @binding(0) var<storage, read> rhs_position_visibility: array<vec4<f32>>; 215 @group(3) @binding(1) var<storage, read> rhs_spherindrical_harmonics: array<array<f32, #{SH_4D_COEFF_COUNT}>>; 216 @group(3) @binding(2) var<storage, read> rhs_isotropic_rotations: array<array<f32, 8>>; 217 @group(3) @binding(3) var<storage, read> rhs_scale_opacity: array<vec4<f32>>; 218 @group(3) @binding(4) var<storage, read> rhs_timestamp_timescale: array<vec4<f32>>; 225 instance_count: atomic<u32>,