private void CopyUnsafe(GraphicsTextureView destination, GraphicsBufferView source) { var d3d12DestinationTextureCopyLocation = new D3D12_TEXTURE_COPY_LOCATION(destination.Resource.D3D12Resource, Sub: destination.D3D12SubresourceIndex); var d3d12SourceTextureCopyLocation = new D3D12_TEXTURE_COPY_LOCATION(source.Resource.D3D12Resource, in destination.D3D12PlacedSubresourceFootprints[0]); d3d12SourceTextureCopyLocation.PlacedFootprint.Offset = source.ByteOffset; D3D12GraphicsCommandList->CopyTextureRegion(&d3d12DestinationTextureCopyLocation, DstX: 0, DstY: 0, DstZ: 0, &d3d12SourceTextureCopyLocation, pSrcBox: null); }
/// <summary>Copies the contents from a buffer view to a texture view.</summary> /// <param name="destination">The destination texture view.</param> /// <param name="source">The source buffer view.</param> /// <exception cref="ArgumentNullException"><paramref name="destination" /> is <c>null</c>.</exception> /// <exception cref="ArgumentNullException"><paramref name="source" /> is <c>null</c>.</exception> /// <exception cref="ArgumentOutOfRangeException">The size <paramref name="destination" /> is less than the size of <paramref name="source" />.</exception> /// <exception cref="ObjectDisposedException">The copy context has been disposed.</exception> public void Copy(GraphicsTextureView destination, GraphicsBufferView source) { ThrowIfDisposed(); ThrowIfNull(destination); ThrowIfNull(source); ThrowIfNotInInsertBounds(source.ByteLength, destination.ByteLength); CopyUnsafe(destination, source); }