Пример #1
0
        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);
        }
Пример #2
0
        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);
        }