public static long GetRequiredIntermediateSize(Resource destResource, int firstSubResource, int numSubResource) { var desc = destResource.Description; long requiredSize = 0; destResource.GetDevice(Utilities.GetGuidFromType(typeof(Device)), out var ptr); //TODO : Verify that dispose don't release C++ PTR using (var device = new Device(ptr)) { device.GetCopyableFootprints(ref desc, firstSubResource, numSubResource, 0, null, null, null, out requiredSize); } return(requiredSize); }
public static long UpdateSubResources(GraphicsCommandList cmdList, Resource destResource, Resource intermediateResource, long intermediateOffset, int firstSubresource, int numSubresource, SubResourceInformation[] datas) { long memToAlloc = (Utilities.SizeOf <PlacedSubResourceFootprint>() + sizeof(uint) + sizeof(UInt64)) * numSubresource; var layouts = new PlacedSubResourceFootprint[numSubresource]; var numRows = new int[numSubresource]; var rowSizesInBytes = new long[numSubresource]; destResource.GetDevice(Utilities.GetGuidFromType(typeof(Device)), out var ptr); long result = 0; using (var device = new Device(ptr)) { var desc = destResource.Description; device.GetCopyableFootprints(ref desc, firstSubresource, numSubresource, intermediateOffset, layouts, numRows, rowSizesInBytes, out var requiredSize); result = UpdateSubResources(cmdList, destResource, intermediateResource, firstSubresource, numSubresource, requiredSize, layouts, rowSizesInBytes, datas); } return(result); }