{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE DuplicateRecordFields #-} {-# LANGUAGE DataKinds #-} module Memory where import Control.Monad.Trans.Resource import qualified VulkanMemoryAllocator as VMA import qualified Vulkan.Core10 as Vk import qualified Vulkan.Zero as Vk initAllocator :: (MonadResource m, MonadFail m) => Vk.PhysicalDevice -> Vk.Device -> Vk.Instance -> m VMA.Allocator initAllocator physicalDevice device instance' = do let allocatorInfo = Vk.zero { VMA.physicalDevice = Vk.physicalDeviceHandle physicalDevice , VMA.device = Vk.deviceHandle device , VMA.instance' = Vk.instanceHandle instance' } :: VMA.AllocatorCreateInfo (_, allocator) <- allocate (VMA.createAllocator allocatorInfo) (\allocator -> do print ("destroying allocator" :: String) VMA.destroyAllocator allocator ) return allocator