Save 16 bytes per MeshUniform in uniform/storage buffers (#11999)
# Objective - Save 16 bytes per MeshUniform in uniform/storage buffers. ## Solution - Reorder members of MeshUniform to capitalise on alignment and size rules for tighter data packing. Before the size of a MeshUniform was 160 bytes, and after it is 144 bytes, saving 16 bytes of unused padding for alignment. --- ## Changelog - Reduced the size of MeshUniform by 16 bytes.
This commit is contained in:
		
							parent
							
								
									7e782f1edf
								
							
						
					
					
						commit
						1d0ea78f36
					
				| @ -201,6 +201,13 @@ pub struct MeshUniform { | |||||||
|     // Affine 4x3 matrices transposed to 3x4
 |     // Affine 4x3 matrices transposed to 3x4
 | ||||||
|     pub transform: [Vec4; 3], |     pub transform: [Vec4; 3], | ||||||
|     pub previous_transform: [Vec4; 3], |     pub previous_transform: [Vec4; 3], | ||||||
|  |     // 3x3 matrix packed in mat2x4 and f32 as:
 | ||||||
|  |     //   [0].xyz, [1].x,
 | ||||||
|  |     //   [1].yz, [2].xy
 | ||||||
|  |     //   [2].z
 | ||||||
|  |     pub inverse_transpose_model_a: [Vec4; 2], | ||||||
|  |     pub inverse_transpose_model_b: f32, | ||||||
|  |     pub flags: u32, | ||||||
|     // Four 16-bit unsigned normalized UV values packed into a `UVec2`:
 |     // Four 16-bit unsigned normalized UV values packed into a `UVec2`:
 | ||||||
|     //
 |     //
 | ||||||
|     //                         <--- MSB                   LSB --->
 |     //                         <--- MSB                   LSB --->
 | ||||||
| @ -211,13 +218,6 @@ pub struct MeshUniform { | |||||||
|     //
 |     //
 | ||||||
|     // (MSB: most significant bit; LSB: least significant bit.)
 |     // (MSB: most significant bit; LSB: least significant bit.)
 | ||||||
|     pub lightmap_uv_rect: UVec2, |     pub lightmap_uv_rect: UVec2, | ||||||
|     // 3x3 matrix packed in mat2x4 and f32 as:
 |  | ||||||
|     //   [0].xyz, [1].x,
 |  | ||||||
|     //   [1].yz, [2].xy
 |  | ||||||
|     //   [2].z
 |  | ||||||
|     pub inverse_transpose_model_a: [Vec4; 2], |  | ||||||
|     pub inverse_transpose_model_b: f32, |  | ||||||
|     pub flags: u32, |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| impl MeshUniform { | impl MeshUniform { | ||||||
|  | |||||||
| @ -5,7 +5,6 @@ struct Mesh { | |||||||
|     // Use bevy_render::maths::affine_to_square to unpack |     // Use bevy_render::maths::affine_to_square to unpack | ||||||
|     model: mat3x4<f32>, |     model: mat3x4<f32>, | ||||||
|     previous_model: mat3x4<f32>, |     previous_model: mat3x4<f32>, | ||||||
|     lightmap_uv_rect: vec2<u32>, |  | ||||||
|     // 3x3 matrix packed in mat2x4 and f32 as: |     // 3x3 matrix packed in mat2x4 and f32 as: | ||||||
|     // [0].xyz, [1].x, |     // [0].xyz, [1].x, | ||||||
|     // [1].yz, [2].xy |     // [1].yz, [2].xy | ||||||
| @ -15,6 +14,7 @@ struct Mesh { | |||||||
|     inverse_transpose_model_b: f32, |     inverse_transpose_model_b: f32, | ||||||
|     // 'flags' is a bit field indicating various options. u32 is 32 bits so we have up to 32 options. |     // 'flags' is a bit field indicating various options. u32 is 32 bits so we have up to 32 options. | ||||||
|     flags: u32, |     flags: u32, | ||||||
|  |     lightmap_uv_rect: vec2<u32>, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| #ifdef SKINNED | #ifdef SKINNED | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Robert Swain
						Robert Swain