public void Allocate_UploadTexture3D_Copy_Full(Device device) { using UploadTexture3D <int> uploadTexture3D = device.Get().AllocateUploadTexture3D <int>(256, 256, 16); for (int i = 0; i < uploadTexture3D.Depth; i++) { for (int j = 0; j < uploadTexture3D.Height; j++) { new Random(i * 5381 + j).NextBytes(uploadTexture3D.View.GetRowSpan(j, i).AsBytes()); } } using ReadOnlyTexture3D <int> readOnlyTexture3D = device.Get().AllocateReadOnlyTexture3D <int>(uploadTexture3D.Width, uploadTexture3D.Height, uploadTexture3D.Depth); uploadTexture3D.CopyTo(readOnlyTexture3D); int[,,] result = readOnlyTexture3D.ToArray(); Assert.AreEqual(uploadTexture3D.Width, result.GetLength(2)); Assert.AreEqual(uploadTexture3D.Height, result.GetLength(1)); Assert.AreEqual(uploadTexture3D.Depth, result.GetLength(0)); for (int i = 0; i < uploadTexture3D.Depth; i++) { for (int j = 0; j < uploadTexture3D.Height; j++) { Span <int> sourceRow = uploadTexture3D.View.GetRowSpan(j, i); Span <int> destinationRow = result.AsSpan2D(i).GetRowSpan(j); Assert.IsTrue(sourceRow.SequenceEqual(destinationRow)); } } }
public void Allocate_UploadTexture3D_Copy_Range(Device device, int x, int y, int z, int width, int height, int depth) { using UploadTexture3D <int> uploadTexture3D = device.Get().AllocateUploadTexture3D <int>(256, 256, 16); for (int i = 0; i < uploadTexture3D.Depth; i++) { for (int j = 0; j < uploadTexture3D.Height; j++) { new Random(i * 5381 + j).NextBytes(uploadTexture3D.View.GetRowSpan(j, i).AsBytes()); } } using ReadOnlyTexture3D <int> readOnlyTexture3D = device.Get().AllocateReadOnlyTexture3D <int>(uploadTexture3D.Width, uploadTexture3D.Height, uploadTexture3D.Depth); uploadTexture3D.CopyTo(readOnlyTexture3D, x, y, z, width, height, depth); int[,,] result = readOnlyTexture3D.ToArray(); for (int i = 0; i < depth; i++) { for (int j = 0; j < height; j++) { Span <int> sourceRow = uploadTexture3D.View.GetRowSpan(j + y, i + z).Slice(x, width); Span <int> destinationRow = result.AsSpan2D(i).GetRowSpan(j).Slice(0, width); Assert.IsTrue(sourceRow.SequenceEqual(destinationRow)); } } }