modify readback API
parent
c84752f38c
commit
3c832550d0
|
@ -1 +1 @@
|
||||||
Subproject commit 7465d4d4de1a0f2c5de5a2d0b3240671e83776d1
|
Subproject commit 859675dbab86e6eeda662ef9bdb0c688cce4cec3
|
|
@ -1950,100 +1950,6 @@ namespace MoonWorks.Graphics
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Downloads data from a Texture to a TransferBuffer.
|
|
||||||
/// This copy occurs on the GPU timeline.
|
|
||||||
///
|
|
||||||
/// You MAY NOT assume that the data in the TransferBuffer is
|
|
||||||
/// fully copied until the command buffer has finished execution.
|
|
||||||
/// </summary>
|
|
||||||
public void DownloadFromTexture(
|
|
||||||
in TextureRegion textureRegion,
|
|
||||||
TransferBuffer transferBuffer,
|
|
||||||
in BufferImageCopy copyParams,
|
|
||||||
TransferOptions option
|
|
||||||
) {
|
|
||||||
#if DEBUG
|
|
||||||
AssertNotSubmitted();
|
|
||||||
AssertInCopyPass("Cannot download from texture outside of copy pass!");
|
|
||||||
AssertBufferBoundsCheck(transferBuffer.Size, copyParams.BufferOffset, textureRegion.Size);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
Refresh.Refresh_DownloadFromTexture(
|
|
||||||
Device.Handle,
|
|
||||||
Handle,
|
|
||||||
textureRegion.ToRefreshTextureRegion(),
|
|
||||||
transferBuffer.Handle,
|
|
||||||
copyParams.ToRefresh(),
|
|
||||||
(Refresh.TransferOptions) option
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Downloads the contents of a Texture with no mips into a TransferBuffer.
|
|
||||||
/// </summary>
|
|
||||||
public void DownloadFromTexture(
|
|
||||||
Texture texture,
|
|
||||||
TransferBuffer transferBuffer,
|
|
||||||
TransferOptions option
|
|
||||||
) {
|
|
||||||
DownloadFromTexture(
|
|
||||||
new TextureRegion(texture),
|
|
||||||
transferBuffer,
|
|
||||||
new BufferImageCopy(0, 0, 0),
|
|
||||||
option
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Downloads data from a GpuBuffer to a TransferBuffer.
|
|
||||||
/// This copy occurs on the GPU timeline.
|
|
||||||
///
|
|
||||||
/// You MAY NOT assume that the data in the TransferBuffer is
|
|
||||||
/// fully copied until the command buffer has finished execution.
|
|
||||||
/// </summary>
|
|
||||||
public void DownloadFromBuffer(
|
|
||||||
GpuBuffer gpuBuffer,
|
|
||||||
TransferBuffer transferBuffer,
|
|
||||||
in BufferCopy copyParams,
|
|
||||||
TransferOptions option
|
|
||||||
) {
|
|
||||||
#if DEBUG
|
|
||||||
AssertNotSubmitted();
|
|
||||||
AssertInCopyPass("Cannot download from texture outside of copy pass!");
|
|
||||||
AssertBufferBoundsCheck(transferBuffer.Size, copyParams.DstOffset, copyParams.Size);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
Refresh.Refresh_DownloadFromBuffer(
|
|
||||||
Device.Handle,
|
|
||||||
Handle,
|
|
||||||
gpuBuffer.Handle,
|
|
||||||
transferBuffer.Handle,
|
|
||||||
copyParams.ToRefresh(),
|
|
||||||
(Refresh.TransferOptions) option
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Downloads data from a GpuBuffer to a TransferBuffer.
|
|
||||||
/// This copy occurs on the GPU timeline.
|
|
||||||
///
|
|
||||||
/// You MAY NOT assume that the data in the TransferBuffer is
|
|
||||||
/// fully copied until the command buffer has finished execution.
|
|
||||||
/// </summary>
|
|
||||||
public void DownloadFromBuffer(
|
|
||||||
GpuBuffer gpuBuffer,
|
|
||||||
TransferBuffer transferBuffer,
|
|
||||||
TransferOptions option
|
|
||||||
) {
|
|
||||||
DownloadFromBuffer(
|
|
||||||
gpuBuffer,
|
|
||||||
transferBuffer,
|
|
||||||
new BufferCopy(0, 0, gpuBuffer.Size),
|
|
||||||
option
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Copies the contents of a TextureSlice to another TextureSlice.
|
/// Copies the contents of a TextureSlice to another TextureSlice.
|
||||||
/// The slices must have the same dimensions.
|
/// The slices must have the same dimensions.
|
||||||
|
|
|
@ -467,6 +467,118 @@ namespace MoonWorks.Graphics
|
||||||
FencePool.Return(fence);
|
FencePool.Return(fence);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ⚠️⚠️⚠️ <br/>
|
||||||
|
/// Downloads data from a Texture to a TransferBuffer.
|
||||||
|
/// This copy occurs immediately on the CPU timeline.<br/>
|
||||||
|
///
|
||||||
|
/// If you modify this texture in a command buffer and then call this function without calling
|
||||||
|
/// SubmitAndAcquireFence and WaitForFences first, the results will not be what you expect.<br/>
|
||||||
|
///
|
||||||
|
/// This method forces a sync point and is generally a bad thing to do.
|
||||||
|
/// Only use it if you have exhausted all other options.<br/>
|
||||||
|
///
|
||||||
|
/// Remember: friends don't let friends readback.<br/>
|
||||||
|
/// ⚠️⚠️⚠️
|
||||||
|
/// </summary>
|
||||||
|
public void DownloadFromTexture(
|
||||||
|
in TextureRegion textureRegion,
|
||||||
|
TransferBuffer transferBuffer,
|
||||||
|
in BufferImageCopy copyParams,
|
||||||
|
TransferOptions transferOption
|
||||||
|
) {
|
||||||
|
Refresh.Refresh_DownloadFromTexture(
|
||||||
|
Handle,
|
||||||
|
textureRegion.ToRefreshTextureRegion(),
|
||||||
|
transferBuffer.Handle,
|
||||||
|
copyParams.ToRefresh(),
|
||||||
|
(Refresh.TransferOptions) transferOption
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ⚠️⚠️⚠️ <br/>
|
||||||
|
/// Downloads all data from a 2D texture with no mips to a TransferBuffer.
|
||||||
|
/// This copy occurs immediately on the CPU timeline.<br/>
|
||||||
|
///
|
||||||
|
/// If you modify this texture in a command buffer and then call this function without calling
|
||||||
|
/// SubmitAndAcquireFence and WaitForFences first, the results will not be what you expect.<br/>
|
||||||
|
///
|
||||||
|
/// This method forces a sync point and is generally a bad thing to do.
|
||||||
|
/// Only use it if you have exhausted all other options.<br/>
|
||||||
|
///
|
||||||
|
/// Remember: friends don't let friends readback.<br/>
|
||||||
|
/// ⚠️⚠️⚠️
|
||||||
|
/// </summary>
|
||||||
|
public void DownloadFromTexture(
|
||||||
|
Texture texture,
|
||||||
|
TransferBuffer transferBuffer,
|
||||||
|
TransferOptions transferOption
|
||||||
|
) {
|
||||||
|
DownloadFromTexture(
|
||||||
|
new TextureRegion(texture),
|
||||||
|
transferBuffer,
|
||||||
|
new BufferImageCopy(0, 0, 0),
|
||||||
|
transferOption
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ⚠️⚠️⚠️ <br/>
|
||||||
|
/// Downloads data from a GpuBuffer to a TransferBuffer.
|
||||||
|
/// This copy occurs immediately on the CPU timeline.<br/>
|
||||||
|
///
|
||||||
|
/// If you modify this GpuBuffer in a command buffer and then call this function without calling
|
||||||
|
/// SubmitAndAcquireFence and WaitForFences first, the results will not be what you expect.<br/>
|
||||||
|
///
|
||||||
|
/// This method forces a sync point and is generally a bad thing to do.
|
||||||
|
/// Only use it if you have exhausted all other options.<br/>
|
||||||
|
///
|
||||||
|
/// Remember: friends don't let friends readback.<br/>
|
||||||
|
/// ⚠️⚠️⚠️
|
||||||
|
/// </summary>
|
||||||
|
public void DownloadFromBuffer(
|
||||||
|
GpuBuffer gpuBuffer,
|
||||||
|
TransferBuffer transferBuffer,
|
||||||
|
in BufferCopy copyParams,
|
||||||
|
TransferOptions transferOption
|
||||||
|
) {
|
||||||
|
Refresh.Refresh_DownloadFromBuffer(
|
||||||
|
Handle,
|
||||||
|
gpuBuffer.Handle,
|
||||||
|
transferBuffer.Handle,
|
||||||
|
copyParams.ToRefresh(),
|
||||||
|
(Refresh.TransferOptions) transferOption
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ⚠️⚠️⚠️ <br/>
|
||||||
|
/// Downloads all data in a GpuBuffer to a TransferBuffer.
|
||||||
|
/// This copy occurs immediately on the CPU timeline.<br/>
|
||||||
|
///
|
||||||
|
/// If you modify this GpuBuffer in a command buffer and then call this function without calling
|
||||||
|
/// SubmitAndAcquireFence and WaitForFences first, the results will not be what you expect.<br/>
|
||||||
|
///
|
||||||
|
/// This method forces a sync point and is generally a bad thing to do.
|
||||||
|
/// Only use it if you have exhausted all other options.<br/>
|
||||||
|
///
|
||||||
|
/// Remember: friends don't let friends readback.<br/>
|
||||||
|
/// ⚠️⚠️⚠️
|
||||||
|
/// </summary>
|
||||||
|
public void DownloadFromBuffer(
|
||||||
|
GpuBuffer gpuBuffer,
|
||||||
|
TransferBuffer transferBuffer,
|
||||||
|
TransferOptions option
|
||||||
|
) {
|
||||||
|
DownloadFromBuffer(
|
||||||
|
gpuBuffer,
|
||||||
|
transferBuffer,
|
||||||
|
new BufferCopy(0, 0, gpuBuffer.Size),
|
||||||
|
option
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
private TextureFormat GetSwapchainFormat(Window window)
|
private TextureFormat GetSwapchainFormat(Window window)
|
||||||
{
|
{
|
||||||
return (TextureFormat) Refresh.Refresh_GetSwapchainFormat(Handle, window.Handle);
|
return (TextureFormat) Refresh.Refresh_GetSwapchainFormat(Handle, window.Handle);
|
||||||
|
|
Loading…
Reference in New Issue