Beispiel #1
0
        public static void MemcpySubresource([NativeTypeName("const D3D12_MEMCPY_DEST *")] D3D12_MEMCPY_DEST *pDest, [NativeTypeName("const void *")] void *pResourceData, [NativeTypeName("const D3D12_SUBRESOURCE_INFO *")] D3D12_SUBRESOURCE_INFO *pSrc, [NativeTypeName("SIZE_T")] nuint RowSizeInBytes, [NativeTypeName("UINT")] uint NumRows, [NativeTypeName("UINT")] uint NumSlices)
        {
            for (var z = 0u; z < NumSlices; ++z)
            {
                var pDestSlice = (byte *)pDest->pData + pDest->SlicePitch * z;
                var pSrcSlice  = ((byte *)pResourceData + pSrc->Offset) + pSrc->DepthPitch * (nint)z;

                for (var y = 0u; y < NumRows; ++y)
                {
                    Buffer.MemoryCopy(
                        pSrcSlice + pSrc->RowPitch * (nint)y,
                        pDestSlice + pDest->RowPitch * y,
                        (ulong)RowSizeInBytes,
                        (ulong)RowSizeInBytes
                        );
                }
            }
        }
Beispiel #2
0
        public static void MemcpySubresource(D3D12_MEMCPY_DEST *pDest, D3D12_SUBRESOURCE_DATA *pSrc, UIntPtr RowSizeInBytes, uint NumRows, uint NumSlices)
        {
            for (var z = 0u; z < NumSlices; ++z)
            {
                byte *pDestSlice = (byte *)(pDest->pData);
                byte *pSrcSlice  = (byte *)(pSrc->pData);
                if (IntPtr.Size == 4)
                {
                    pDestSlice += (uint)pDest->SlicePitch * z;
                    pSrcSlice  += (uint)pSrc->SlicePitch * z;
                }
                else
                {
                    pDestSlice += (ulong)pDest->SlicePitch * z;
                    pSrcSlice  += (ulong)pSrc->SlicePitch * z;
                }
                for (var y = 0u; y < NumRows; ++y)
                {
                    byte *pTempDest = pDestSlice;
                    byte *pTempSrc  = pSrcSlice;

                    if (IntPtr.Size == 4)
                    {
                        pDestSlice += (uint)pDest->RowPitch * y;
                        pSrcSlice  += (uint)pDest->RowPitch * y;
                    }
                    else
                    {
                        pDestSlice += (ulong)pDest->RowPitch * y;
                        pSrcSlice  += (ulong)pDest->RowPitch * y;
                    }

                    Buffer.MemoryCopy(pTempSrc, pTempDest, (long)RowSizeInBytes, (long)RowSizeInBytes);
                }
            }
        }