Fix panic when using globals uniform in wasm builds (#6460)
# Objective Fixes #5393 ## Solution - Add padding to `GlobalsUniform` / `Globals` to make it 16-byte aligned. Still not super clear on whether this is a `naga` thing or an `encase` thing or what. But now that we're offering `globals` up to users and #5393 is not just breaking an example, maybe we should do this sort of workaround?
This commit is contained in:
		
							parent
							
								
									0aab699a84
								
							
						
					
					
						commit
						1170b30785
					
				@ -95,4 +95,8 @@ struct Globals {
 | 
			
		||||
    // Frame count since the start of the app.
 | 
			
		||||
    // It wraps to zero when it reaches the maximum value of a u32.
 | 
			
		||||
    frame_count: u32,
 | 
			
		||||
#ifdef SIXTEEN_BYTE_ALIGNMENT
 | 
			
		||||
    // WebGL2 structs must be 16 byte aligned.
 | 
			
		||||
    _wasm_padding: f32
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -41,6 +41,9 @@ pub struct GlobalsUniform {
 | 
			
		||||
    /// Frame count since the start of the app.
 | 
			
		||||
    /// It wraps to zero when it reaches the maximum value of a u32.
 | 
			
		||||
    frame_count: u32,
 | 
			
		||||
    /// WebGL2 structs must be 16 byte aligned.
 | 
			
		||||
    #[cfg(feature = "webgl")]
 | 
			
		||||
    _wasm_padding: f32,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// The buffer containing the [`GlobalsUniform`]
 | 
			
		||||
 | 
			
		||||
@ -151,7 +151,10 @@ impl ShaderCache {
 | 
			
		||||
            Entry::Vacant(entry) => {
 | 
			
		||||
                let mut shader_defs = shader_defs.to_vec();
 | 
			
		||||
                #[cfg(feature = "webgl")]
 | 
			
		||||
                shader_defs.push(String::from("NO_ARRAY_TEXTURES_SUPPORT"));
 | 
			
		||||
                {
 | 
			
		||||
                    shader_defs.push(String::from("NO_ARRAY_TEXTURES_SUPPORT"));
 | 
			
		||||
                    shader_defs.push(String::from("SIXTEEN_BYTE_ALIGNMENT"));
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                // TODO: 3 is the value from CLUSTERED_FORWARD_STORAGE_BUFFER_COUNT declared in bevy_pbr
 | 
			
		||||
                // consider exposing this in shaders in a more generally useful way, such as:
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user