(), flags) == Result.Ok;
}
}
///
/// Copy the entire contents of the source resource to the destination resource using the GPU.
///
///
/// This method is unusual in that it causes the GPU to perform the copy operation (similar to a memcpy by the CPU). As a result, it has a few restrictions designed for improving performance. For instance, the source and destination resources: Must be different resources. Must be the same type. Must have identical dimensions (including width, height, depth, and size as appropriate). Will only be copied. CopyResource does not support any stretch, color key, blend, or format conversions. Must have compatible DXGI formats, which means the formats must be identical or at least from the same type group. For example, a DXGI_FORMAT_R32G32B32_FLOAT texture can be copied to an DXGI_FORMAT_R32G32B32_UINT texture since both of these formats are in the DXGI_FORMAT_R32G32B32_TYPELESS group. Might not be currently mapped. You cannot use an {{Immutable}} resource as a destination. You can use a {{depth-stencil}} resource as either a source or a destination. Resources created with multisampling capability (see ) can be used as source and destination only if both source and destination have identical multisampled count and quality. If source and destination differ in multisampled count and quality or if one is multisampled and the other is not multisampled the call to ID3D11DeviceContext::CopyResource fails. The method is an asynchronous call which may be added to the command-buffer queue. This attempts to remove pipeline stalls that may occur when copying data. An application that only needs to copy a portion of the data in a resource should use instead.
///
/// A reference to the source resource (see ).
/// A reference to the destination resource (see ).
/// void ID3D11DeviceContext::CopyResource([In] ID3D11Resource* pDstResource,[In] ID3D11Resource* pSrcResource)
/// ff476392
/// void ID3D11DeviceContext::CopyResource([In] ID3D11Resource* pDstResource,[In] ID3D11Resource* pSrcResource)
/// ID3D11DeviceContext::CopyResource
public void CopyResource(Resource source, Resource destination)
{
CopyResource_(destination, source);
}
///
/// Copy a region from a source resource to a destination resource.
///
///
/// The source box must be within the size of the source resource. The destination offsets, (x, y, and z) allow the source box to be offset when writing into the destination resource; however, the dimensions of the source box and the offsets must be within the size of the resource. If the resources are buffers, all coordinates are in bytes; if the resources are textures, all coordinates are in texels. {{D3D11CalcSubresource}} is a helper function for calculating subresource indexes. CopySubresourceRegion performs the copy on the GPU (similar to a memcpy by the CPU). As a consequence, the source and destination resources: Must be different subresources (although they can be from the same resource). Must be the same type. Must have compatible DXGI formats (identical or from the same type group). For example, a DXGI_FORMAT_R32G32B32_FLOAT texture can be copied to an DXGI_FORMAT_R32G32B32_UINT texture since both of these formats are in the DXGI_FORMAT_R32G32B32_TYPELESS group. May not be currently mapped. CopySubresourceRegion only supports copy; it does not support any stretch, color key, blend, or format conversions. An application that needs to copy an entire resource should use instead. CopySubresourceRegion is an asynchronous call which may be added to the command-buffer queue, this attempts to remove pipeline stalls that may occur when copying data. See performance considerations for more details. Note??If you use CopySubresourceRegion with a depth-stencil buffer or a multisampled resource, you must copy the whole subresource. In this situation, you must pass 0 to the DstX, DstY, and DstZ parameters and NULL to the pSrcBox parameter. In addition, source and destination resources, which are represented by the pSrcResource and pDstResource parameters, should have identical sample count values. Example The following code snippet copies a box (located at (120,100),(200,220)) from a source texture into a region (10,20),(90,140) in a destination texture.
/// D3D11_BOX sourceRegion;
/// sourceRegion.left = 120;
/// sourceRegion.right = 200;
/// sourceRegion.top = 100;
/// sourceRegion.bottom = 220;
/// sourceRegion.front = 0;
/// sourceRegion.back = 1; pd3dDeviceContext->CopySubresourceRegion( pDestTexture, 0, 10, 20, 0, pSourceTexture, 0, &sourceRegion );
///
/// Notice, that for a 2D texture, front and back are set to 0 and 1 respectively.
///
/// A reference to the source resource (see ).
/// Source subresource index.
/// A reference to a 3D box (see ) that defines the source subresources that can be copied. If NULL, the entire source subresource is copied. The box must fit within the source resource.
/// A reference to the destination resource (see ).
/// Destination subresource index.
/// The x-coordinate of the upper left corner of the destination region.
/// The y-coordinate of the upper left corner of the destination region. For a 1D subresource, this must be zero.
/// The z-coordinate of the upper left corner of the destination region. For a 1D or 2D subresource, this must be zero.
/// ff476394
/// void ID3D11DeviceContext::CopySubresourceRegion([In] ID3D11Resource* pDstResource,[In] unsigned int DstSubresource,[In] unsigned int DstX,[In] unsigned int DstY,[In] unsigned int DstZ,[In] ID3D11Resource* pSrcResource,[In] unsigned int SrcSubresource,[In, Optional] const D3D11_BOX* pSrcBox)
/// ID3D11DeviceContext::CopySubresourceRegion
public void CopySubresourceRegion(SharpDX.Direct3D11.Resource source, int sourceSubresource, SharpDX.Direct3D11.ResourceRegion? sourceRegion, SharpDX.Direct3D11.Resource destination, int destinationSubResource, int dstX = 0, int dstY = 0, int dstZ = 0)
{
CopySubresourceRegion_(destination, destinationSubResource, dstX, dstY, dstZ, source, sourceSubresource, sourceRegion);
}
///
/// Copy a multisampled resource into a non-multisampled resource.
///
///
/// This API is most useful when re-using the resulting render target of one render pass as an input to a second render pass. The source and destination resources must be the same resource type and have the same dimensions. In addition, they must have compatible formats. There are three scenarios for this: ScenarioRequirements Source and destination are prestructured and typedBoth the source and destination must have identical formats and that format must be specified in the Format parameter. One resource is prestructured and typed and the other is prestructured and typelessThe typed resource must have a format that is compatible with the typeless resource (i.e. the typed resource is DXGI_FORMAT_R32_FLOAT and the typeless resource is DXGI_FORMAT_R32_TYPELESS). The format of the typed resource must be specified in the Format parameter. Source and destination are prestructured and typelessBoth the source and destination must have the same typeless format (i.e. both must have DXGI_FORMAT_R32_TYPELESS), and the Format parameter must specify a format that is compatible with the source and destination (i.e. if both are DXGI_FORMAT_R32_TYPELESS then DXGI_FORMAT_R32_FLOAT could be specified in the Format parameter). For example, given the DXGI_FORMAT_R16G16B16A16_TYPELESS format: The source (or dest) format could be DXGI_FORMAT_R16G16B16A16_UNORM The dest (or source) format could be DXGI_FORMAT_R16G16B16A16_FLOAT ?
///
/// Source resource. Must be multisampled.
/// >The source subresource of the source resource.
/// Destination resource. Must be a created with the flag and be single-sampled. See .
/// A zero-based index, that identifies the destination subresource. Use {{D3D11CalcSubresource}} to calculate the index.
/// A that indicates how the multisampled resource will be resolved to a single-sampled resource. See remarks.
/// void ID3D11DeviceContext::ResolveSubresource([In] ID3D11Resource* pDstResource,[In] int DstSubresource,[In] ID3D11Resource* pSrcResource,[In] int SrcSubresource,[In] DXGI_FORMAT Format)
public void ResolveSubresource(SharpDX.Direct3D11.Resource source, int sourceSubresource, SharpDX.Direct3D11.Resource destination, int destinationSubresource, SharpDX.DXGI.Format format)
{
ResolveSubresource_(destination, destinationSubresource, source, sourceSubresource, format);
}
///
/// Maps the data contained in a subresource to a memory pointer, and denies the GPU access to that subresource.
///
/// The resource.
/// The mip slice.
/// The array slice.
/// The mode.
/// The flags.
/// The output stream containing the pointer.
///
/// The locked
///
/// HRESULT ID3D11DeviceContext::Map([In] ID3D11Resource* pResource,[In] unsigned int Subresource,[In] D3D11_MAP MapType,[In] D3D11_MAP_FLAG MapFlags,[Out] D3D11_MAPPED_SUBRESOURCE* pMappedResource)
public DataBox MapSubresource(Texture1D resource, int mipSlice, int arraySlice, MapMode mode, MapFlags flags, out DataStream stream)
{
int mipSize;
var box = MapSubresource(resource, mipSlice, arraySlice, mode, flags, out mipSize);
stream = new DataStream(box.DataPointer, mipSize * (int)DXGI.FormatHelper.SizeOfInBytes(resource.Description.Format), true, true);
return box;
}
///
/// Maps the data contained in a subresource to a memory pointer, and denies the GPU access to that subresource.
///
/// The resource.
/// The mip slice.
/// The array slice.
/// The mode.
/// The flags.
/// The output stream containing the pointer.
///
/// The locked
///
/// HRESULT ID3D11DeviceContext::Map([In] ID3D11Resource* pResource,[In] unsigned int Subresource,[In] D3D11_MAP MapType,[In] D3D11_MAP_FLAG MapFlags,[Out] D3D11_MAPPED_SUBRESOURCE* pMappedResource)
public DataBox MapSubresource(Texture2D resource, int mipSlice, int arraySlice, MapMode mode, MapFlags flags, out DataStream stream)
{
int mipSize;
var box = MapSubresource(resource, mipSlice, arraySlice, mode, flags, out mipSize);
stream = new DataStream(box.DataPointer, mipSize * box.RowPitch, true, true);
return box;
}
///
/// Maps the data contained in a subresource to a memory pointer, and denies the GPU access to that subresource.
///
/// The resource.
/// The mip slice.
/// The array slice.
/// The mode.
/// The flags.
/// The output stream containing the pointer.
///
/// The locked
///
/// HRESULT ID3D11DeviceContext::Map([In] ID3D11Resource* pResource,[In] unsigned int Subresource,[In] D3D11_MAP MapType,[In] D3D11_MAP_FLAG MapFlags,[Out] D3D11_MAPPED_SUBRESOURCE* pMappedResource)
public DataBox MapSubresource(Texture3D resource, int mipSlice, int arraySlice, MapMode mode, MapFlags flags, out DataStream stream)
{
int mipSize;
var box = MapSubresource(resource, mipSlice, arraySlice, mode, flags, out mipSize);
stream = new DataStream(box.DataPointer, mipSize * box.SlicePitch, true, true);
return box;
}
///
/// Maps the data contained in a subresource to a memory pointer, and denies the GPU access to that subresource.
///
/// The resource.
/// The mode.
/// The flags.
/// The output stream containing the pointer.
///
/// The locked
///
/// HRESULT ID3D11DeviceContext::Map([In] ID3D11Resource* pResource,[In] unsigned int Subresource,[In] D3D11_MAP MapType,[In] D3D11_MAP_FLAG MapFlags,[Out] D3D11_MAPPED_SUBRESOURCE* pMappedResource)
public DataBox MapSubresource(Buffer resource, MapMode mode, MapFlags flags, out DataStream stream)
{
var box = MapSubresource(resource, 0, mode, flags);
stream = new DataStream(box.DataPointer, resource.Description.SizeInBytes, true, true);
return box;
}
///
/// Maps the data contained in a subresource to a memory pointer, and denies the GPU access to that subresource.
///
/// The resource.
/// The mip slice.
/// The array slice.
/// The mode.
/// The flags.
/// Size of the selected miplevel.
///
/// The locked
///
/// HRESULT ID3D11DeviceContext::Map([In] ID3D11Resource* pResource,[In] unsigned int Subresource,[In] D3D11_MAP MapType,[In] D3D11_MAP_FLAG MapFlags,[Out] D3D11_MAPPED_SUBRESOURCE* pMappedResource)
public DataBox MapSubresource(Resource resource, int mipSlice, int arraySlice, MapMode mode, MapFlags flags, out int mipSize)
{
int subresource = resource.CalculateSubResourceIndex(mipSlice, arraySlice, out mipSize);
var box = MapSubresource(resource, subresource, mode, flags);
return box;
}
///
/// Maps the data contained in a subresource to a memory pointer, and denies the GPU access to that subresource.
///
/// The resource.
/// The subresource.
/// The mode.
/// The flags.
/// The output stream containing the pointer.
/// The locked
/// HRESULT ID3D11DeviceContext::Map([In] ID3D11Resource* pResource,[In] unsigned int Subresource,[In] D3D11_MAP MapType,[In] D3D11_MAP_FLAG MapFlags,[Out] D3D11_MAPPED_SUBRESOURCE* pMappedResource)
public SharpDX.DataBox MapSubresource(SharpDX.Direct3D11.Resource resource, int subresource, SharpDX.Direct3D11.MapMode mode, SharpDX.Direct3D11.MapFlags flags, out DataStream stream)
{
int mipLevels;
switch (resource.Dimension)
{
case ResourceDimension.Buffer:
return MapSubresource((Buffer)resource, mode, flags, out stream);
case ResourceDimension.Texture1D:
var texture1D = (Texture1D)resource;
mipLevels = texture1D.Description.MipLevels;
return MapSubresource(texture1D, subresource % mipLevels, subresource / mipLevels, mode, flags, out stream);
case ResourceDimension.Texture2D:
var texture2D = (Texture2D)resource;
mipLevels = texture2D.Description.MipLevels;
return MapSubresource(texture2D, subresource % mipLevels, subresource / mipLevels, mode, flags, out stream);
case ResourceDimension.Texture3D:
var texture3D = (Texture3D)resource;
mipLevels = texture3D.Description.MipLevels;
return MapSubresource(texture3D, subresource % mipLevels, subresource / mipLevels, mode, flags, out stream);
default:
throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, "MapSubresource is not supported for Resource [{0}]", resource.Dimension));
}
}
///
/// Gets a reference to the data contained in a subresource, and denies the GPU access to that subresource.
///
/// A reference to a interface.
/// Index number of the subresource.
/// Specifies the CPU's read and write permissions for a resource. For possible values, see .
/// Flag that specifies what the CPU should do when the GPU is busy. This flag is optional.
/// A reference to the mapped subresource (see ).
/// The mapped subresource (see ). If is used and the resource is still being used by the GPU, this method return an empty DataBox whose property returns true.This method also throws an exception with the code if MapType allows any CPU read access and the video card has been removed.
For more information about these error codes, see DXGI_ERROR.
///
/// If you call Map on a deferred context, you can only pass , , or both to the MapType parameter. Other -typed values are not supported for a deferred context.
The Direct3D 11.1 runtime, which is available starting with Windows Developer Preview, can map shader resource views (SRVs) of dynamic buffers with . The Direct3D 11 and earlier runtimes limited mapping to vertex or index buffers.
/// If is used and the resource is still being used by the GPU, this method return an empty DataBox whose property returns true.
///
/// ff476457
/// HRESULT ID3D11DeviceContext::Map([In] ID3D11Resource* pResource,[In] unsigned int Subresource,[In] D3D11_MAP MapType,[In] D3D11_MAP_FLAG MapFlags,[Out] D3D11_MAPPED_SUBRESOURCE* pMappedResource)
/// ID3D11DeviceContext::Map
public SharpDX.DataBox MapSubresource(SharpDX.Direct3D11.Resource resourceRef, int subresource, SharpDX.Direct3D11.MapMode mapType, SharpDX.Direct3D11.MapFlags mapFlags)
{
var box = default(DataBox);
var result = MapSubresource(resourceRef, subresource, mapType, mapFlags, out box);
if((mapFlags & MapFlags.DoNotWait) != 0 && result == DXGI.ResultCode.WasStillDrawing)
{
return box;
}
result.CheckError();
return box;
}
///
/// Copies data from the CPU to to a non-mappable subresource region.
///
/// Type of the data to upload
/// A reference to the data to upload.
/// The destination resource.
/// The destination subresource.
/// The row pitch.
/// The depth pitch.
/// The region
///
/// This method is implementing the workaround for deferred context.
///
/// ff476486
/// void ID3D11DeviceContext::UpdateSubresource([In] ID3D11Resource* pDstResource,[In] unsigned int DstSubresource,[In, Optional] const D3D11_BOX* pDstBox,[In] const void* pSrcData,[In] unsigned int SrcRowPitch,[In] unsigned int SrcDepthPitch)
/// ID3D11DeviceContext::UpdateSubresource
public void UpdateSubresource(ref T data, Resource resource, int subresource = 0, int rowPitch = 0, int depthPitch = 0, ResourceRegion? region = null) where T : struct
{
unsafe
{
UpdateSubresource(resource, subresource, region, (IntPtr)Interop.Fixed(ref data), rowPitch, depthPitch);
}
}
///
/// Copies data from the CPU to to a non-mappable subresource region.
///
/// Type of the data to upload
/// A reference to the data to upload.
/// The destination resource.
/// The destination subresource.
/// The row pitch.
/// The depth pitch.
/// A region that defines the portion of the destination subresource to copy the resource data into. Coordinates are in bytes for buffers and in texels for textures.
/// ff476486
/// void ID3D11DeviceContext::UpdateSubresource([In] ID3D11Resource* pDstResource,[In] unsigned int DstSubresource,[In, Optional] const D3D11_BOX* pDstBox,[In] const void* pSrcData,[In] unsigned int SrcRowPitch,[In] unsigned int SrcDepthPitch)
/// ID3D11DeviceContext::UpdateSubresource
/// This method is implementing the workaround for deferred context.
public void UpdateSubresource(T[] data, Resource resource, int subresource = 0, int rowPitch = 0, int depthPitch = 0, ResourceRegion? region = null) where T : struct
{
unsafe
{
UpdateSubresource(resource, subresource, region, (IntPtr)Interop.Fixed(data), rowPitch, depthPitch);
}
}
///
/// Copies data from the CPU to to a non-mappable subresource region.
///
/// The source data.
/// The destination resource.
/// The destination subresource.
///
/// This method is implementing the workaround for deferred context.
///
/// void ID3D11DeviceContext::UpdateSubresource([In] ID3D11Resource* pDstResource,[In] unsigned int DstSubresource,[In, Optional] const D3D11_BOX* pDstBox,[In] const void* pSrcData,[In] unsigned int SrcRowPitch,[In] unsigned int SrcDepthPitch)
public void UpdateSubresource(DataBox source, Resource resource, int subresource = 0)
{
UpdateSubresource(resource, subresource, null, source.DataPointer, source.RowPitch, source.SlicePitch);
}
///
/// Copies data from the CPU to to a non-mappable subresource region.
///
/// The source data.
/// The destination resource.
/// The destination subresource.
/// The destination region within the resource.
///
/// This method is implementing the workaround for deferred context.
///
/// void ID3D11DeviceContext::UpdateSubresource([In] ID3D11Resource* pDstResource,[In] unsigned int DstSubresource,[In, Optional] const D3D11_BOX* pDstBox,[In] const void* pSrcData,[In] unsigned int SrcRowPitch,[In] unsigned int SrcDepthPitch)
public void UpdateSubresource(DataBox source, Resource resource, int subresource, ResourceRegion region)
{
UpdateSubresource(resource, subresource, region, source.DataPointer, source.RowPitch, source.SlicePitch);
}
///
/// Copies data from the CPU to to a non-mappable subresource region.
///
/// Type of the data to upload
/// A reference to the data to upload.
/// The destination resource.
/// The size in bytes per pixel/block element.
/// The destination subresource.
/// The row pitch.
/// The depth pitch.
/// if set to true the resource is a block/compressed resource
/// void ID3D11DeviceContext::UpdateSubresource([In] ID3D11Resource* pDstResource,[In] unsigned int DstSubresource,[In, Optional] const D3D11_BOX* pDstBox,[In] const void* pSrcData,[In] unsigned int SrcRowPitch,[In] unsigned int SrcDepthPitch)
///
/// This method is implementing the workaround for deferred context.
///
public void UpdateSubresourceSafe(ref T data, Resource resource, int srcBytesPerElement, int subresource = 0, int rowPitch = 0, int depthPitch = 0, bool isCompressedResource = false) where T : struct
{
unsafe
{
UpdateSubresourceSafe(resource, subresource, null, (IntPtr)Interop.Fixed(ref data), rowPitch, depthPitch, srcBytesPerElement, isCompressedResource);
}
}
///
/// Copies data from the CPU to to a non-mappable subresource region.
///
/// Type of the data to upload
/// A reference to the data to upload.
/// The destination resource.
/// The size in bytes per pixel/block element.
/// The destination subresource.
/// The row pitch.
/// The depth pitch.
/// if set to true the resource is a block/compressed resource
///
/// This method is implementing the workaround for deferred context.
///
/// void ID3D11DeviceContext::UpdateSubresource([In] ID3D11Resource* pDstResource,[In] unsigned int DstSubresource,[In, Optional] const D3D11_BOX* pDstBox,[In] const void* pSrcData,[In] unsigned int SrcRowPitch,[In] unsigned int SrcDepthPitch)
public void UpdateSubresourceSafe(T[] data, Resource resource, int srcBytesPerElement, int subresource = 0, int rowPitch = 0, int depthPitch = 0, bool isCompressedResource = false) where T : struct
{
unsafe
{
UpdateSubresourceSafe(resource, subresource, null, (IntPtr)Interop.Fixed(data), rowPitch, depthPitch, srcBytesPerElement, isCompressedResource);
}
}
///
/// Copies data from the CPU to to a non-mappable subresource region.
///
/// The source data.
/// The destination resource.
/// The size in bytes per pixel/block element.
/// The destination subresource.
/// if set to true the resource is a block/compressed resource
///
/// This method is implementing the workaround for deferred context.
///
/// void ID3D11DeviceContext::UpdateSubresource([In] ID3D11Resource* pDstResource,[In] unsigned int DstSubresource,[In, Optional] const D3D11_BOX* pDstBox,[In] const void* pSrcData,[In] unsigned int SrcRowPitch,[In] unsigned int SrcDepthPitch)
public void UpdateSubresourceSafe(DataBox source, Resource resource, int srcBytesPerElement, int subresource = 0, bool isCompressedResource = false)
{
UpdateSubresourceSafe(resource, subresource, null, source.DataPointer, source.RowPitch, source.SlicePitch, srcBytesPerElement, isCompressedResource);
}
///
/// Copies data from the CPU to to a non-mappable subresource region.
///
/// The source data.
/// The destination resource.
/// The size in bytes per pixel/block element.
/// The destination subresource.
/// The destination region within the resource.
/// if set to true the resource is a block/compressed resource
///
/// This method is implementing the workaround for deferred context.
///
/// void ID3D11DeviceContext::UpdateSubresource([In] ID3D11Resource* pDstResource,[In] unsigned int DstSubresource,[In, Optional] const D3D11_BOX* pDstBox,[In] const void* pSrcData,[In] unsigned int SrcRowPitch,[In] unsigned int SrcDepthPitch)
public void UpdateSubresourceSafe(DataBox source, Resource resource, int srcBytesPerElement, int subresource, ResourceRegion region, bool isCompressedResource = false)
{
UpdateSubresourceSafe(resource, subresource, region, source.DataPointer, source.RowPitch, source.SlicePitch, srcBytesPerElement, isCompressedResource);
}
///
/// Updates the subresource safe method.
///
/// The DST resource ref.
/// The DST subresource.
/// The DST box ref.
/// The p SRC data.
/// The SRC row pitch.
/// The SRC depth pitch.
/// The size in bytes per pixel/block element.
/// if set to true the resource is a block/compressed resource
///
///
/// This method is implementing the workaround for deferred context.
///
internal unsafe bool UpdateSubresourceSafe(SharpDX.Direct3D11.Resource dstResourceRef, int dstSubresource, SharpDX.Direct3D11.ResourceRegion? dstBoxRef, System.IntPtr pSrcData, int srcRowPitch, int srcDepthPitch, int srcBytesPerElement, bool isCompressedResource)
{
bool needWorkaround = false;
// Check thread support just once as it won't change during the life of this instance.
if (!isCheckThreadingSupport)
{
bool supportsConcurrentResources;
Device.CheckThreadingSupport(out supportsConcurrentResources, out supportsCommandLists);
isCheckThreadingSupport = true;
}
if ( dstBoxRef.HasValue)
{
if (TypeInfo == DeviceContextType.Deferred)
{
// If this deferred context doesn't support command list, we need to perform the workaround
needWorkaround = !supportsCommandLists;
}
}
// Adjust the pSrcData pointer if needed
IntPtr pAdjustedSrcData = pSrcData;
if( needWorkaround )
{
var alignedBox = dstBoxRef.Value;
// convert from pixels to blocks
if (isCompressedResource)
{
alignedBox.Left /= 4;
alignedBox.Right /= 4;
alignedBox.Top /= 4;
alignedBox.Bottom /= 4;
}
pAdjustedSrcData = (IntPtr)(((byte*)pSrcData) - (alignedBox.Front * srcDepthPitch) - (alignedBox.Top * srcRowPitch) - (alignedBox.Left * srcBytesPerElement));
}
UpdateSubresource( dstResourceRef, dstSubresource, dstBoxRef, pAdjustedSrcData, srcRowPitch, srcDepthPitch );
return needWorkaround;
}
private bool isCheckThreadingSupport;
private bool supportsCommandLists;
}
}