| 54 | // Stack-allocating UpdateSubresources implementation |
| 55 | template <UINT MaxSubresources> |
| 56 | inline UINT64 UpdateSubresources( |
| 57 | _In_ ID3D12GraphicsCommandList* pCmdList, |
| 58 | _In_ ID3D12Resource* pDestinationResource, |
| 59 | _In_ ID3D12Resource* pIntermediate, |
| 60 | UINT64 IntermediateOffset, |
| 61 | _In_range_( 0, MaxSubresources ) UINT FirstSubresource, |
| 62 | _In_range_( 1, MaxSubresources - FirstSubresource ) UINT NumSubresources, |
| 63 | _In_reads_( NumSubresources ) const D3D12_SUBRESOURCE_DATA* pSrcData ) |
| 64 | { |
| 65 | UINT64 RequiredSize = 0; |
| 66 | D3D12_PLACED_SUBRESOURCE_FOOTPRINT Layouts[MaxSubresources]; |
| 67 | UINT NumRows[MaxSubresources]; |
| 68 | UINT64 RowSizesInBytes[MaxSubresources]; |
| 69 | |
| 70 | D3D12_RESOURCE_DESC Desc = pDestinationResource->GetDesc(); |
| 71 | ID3D12Device* pDevice; |
| 72 | pDestinationResource->GetDevice( __uuidof( ID3D12Device ), reinterpret_cast<void**>( &pDevice ) ); |
| 73 | pDevice->GetCopyableFootprints( &Desc, FirstSubresource, NumSubresources, IntermediateOffset, Layouts, NumRows, RowSizesInBytes, &RequiredSize ); |
| 74 | pDevice->Release(); |
| 75 | |
| 76 | return UpdateSubresources( pCmdList, pDestinationResource, pIntermediate, FirstSubresource, NumSubresources, RequiredSize, Layouts, NumRows, RowSizesInBytes, pSrcData ); |
| 77 | } |
| 78 | |
| 79 | UINT64 GetRequiredIntermediateSize( |
| 80 | _In_ ID3D12Resource* pDestinationResource, |