forked from MoonsideGames/MoonWorks
				
			add debug check for zero length buffer copy
							parent
							
								
									f298a5ec11
								
							
						
					
					
						commit
						088e7c4b6f
					
				| 
						 | 
					@ -1718,10 +1718,6 @@ namespace MoonWorks.Graphics
 | 
				
			||||||
			uint bufferOffsetInBytes = 0
 | 
								uint bufferOffsetInBytes = 0
 | 
				
			||||||
		) where T : unmanaged
 | 
							) where T : unmanaged
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
#if DEBUG
 | 
					 | 
				
			||||||
			AssertRenderPassInactive("Cannot copy during render pass!");
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			SetBufferData(
 | 
								SetBufferData(
 | 
				
			||||||
				buffer,
 | 
									buffer,
 | 
				
			||||||
				data,
 | 
									data,
 | 
				
			||||||
| 
						 | 
					@ -1770,6 +1766,7 @@ namespace MoonWorks.Graphics
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
#if DEBUG
 | 
					#if DEBUG
 | 
				
			||||||
			AssertRenderPassInactive("Cannot copy during render pass!");
 | 
								AssertRenderPassInactive("Cannot copy during render pass!");
 | 
				
			||||||
 | 
								AssertNonEmptyCopy(dataLengthInBytes);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			Refresh.Refresh_SetBufferData(
 | 
								Refresh.Refresh_SetBufferData(
 | 
				
			||||||
| 
						 | 
					@ -1799,13 +1796,15 @@ namespace MoonWorks.Graphics
 | 
				
			||||||
			uint numElements
 | 
								uint numElements
 | 
				
			||||||
		) where T : unmanaged
 | 
							) where T : unmanaged
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
 | 
								var elementSize = Marshal.SizeOf<T>();
 | 
				
			||||||
 | 
								var dataLengthInBytes = (uint) (elementSize * numElements);
 | 
				
			||||||
 | 
								var dataOffsetInBytes = (int) startElement * elementSize;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if DEBUG
 | 
					#if DEBUG
 | 
				
			||||||
			AssertRenderPassInactive("Cannot copy during render pass!");
 | 
								AssertRenderPassInactive("Cannot copy during render pass!");
 | 
				
			||||||
 | 
								AssertNonEmptyCopy(dataLengthInBytes);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			var elementSize = Marshal.SizeOf<T>();
 | 
					 | 
				
			||||||
			var dataOffsetInBytes = (int) startElement * elementSize;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			fixed (T* ptr = data)
 | 
								fixed (T* ptr = data)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				Refresh.Refresh_SetBufferData(
 | 
									Refresh.Refresh_SetBufferData(
 | 
				
			||||||
| 
						 | 
					@ -1814,7 +1813,7 @@ namespace MoonWorks.Graphics
 | 
				
			||||||
					buffer.Handle,
 | 
										buffer.Handle,
 | 
				
			||||||
					bufferOffsetInBytes,
 | 
										bufferOffsetInBytes,
 | 
				
			||||||
					(IntPtr) ptr + dataOffsetInBytes,
 | 
										(IntPtr) ptr + dataOffsetInBytes,
 | 
				
			||||||
					(uint) (numElements * elementSize)
 | 
										dataLengthInBytes
 | 
				
			||||||
				);
 | 
									);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
| 
						 | 
					@ -1844,18 +1843,23 @@ namespace MoonWorks.Graphics
 | 
				
			||||||
			IntPtr dataPtr,
 | 
								IntPtr dataPtr,
 | 
				
			||||||
			uint bufferOffsetInElements,
 | 
								uint bufferOffsetInElements,
 | 
				
			||||||
			uint numElements
 | 
								uint numElements
 | 
				
			||||||
		) where T : unmanaged {
 | 
							) where T : unmanaged
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								var elementSize = Marshal.SizeOf<T>();
 | 
				
			||||||
 | 
								var dataLengthInBytes = (uint) (elementSize * numElements);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if DEBUG
 | 
					#if DEBUG
 | 
				
			||||||
			AssertRenderPassInactive("Cannot copy during render pass!");
 | 
								AssertRenderPassInactive("Cannot copy during render pass!");
 | 
				
			||||||
 | 
								AssertNonEmptyCopy((uint) (elementSize * numElements));
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			Refresh.Refresh_SetBufferData(
 | 
								Refresh.Refresh_SetBufferData(
 | 
				
			||||||
				Device.Handle,
 | 
									Device.Handle,
 | 
				
			||||||
				Handle,
 | 
									Handle,
 | 
				
			||||||
				buffer.Handle,
 | 
									buffer.Handle,
 | 
				
			||||||
				(uint) Marshal.SizeOf<T>() * bufferOffsetInElements,
 | 
									(uint) elementSize * bufferOffsetInElements,
 | 
				
			||||||
				dataPtr,
 | 
									dataPtr,
 | 
				
			||||||
				(uint) Marshal.SizeOf<T>() * numElements
 | 
									dataLengthInBytes
 | 
				
			||||||
			);
 | 
								);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2197,6 +2201,14 @@ namespace MoonWorks.Graphics
 | 
				
			||||||
				throw new System.ArgumentException("The bound Texture's UsageFlags must include TextureUsageFlags.Sampler!");
 | 
									throw new System.ArgumentException("The bound Texture's UsageFlags must include TextureUsageFlags.Sampler!");
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							private void AssertNonEmptyCopy(uint dataLengthInBytes)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								if (dataLengthInBytes == 0)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									throw new System.InvalidOperationException("SetBufferData must have a length greater than 0 bytes!");
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue