diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # Changelog for keid-core
 
+## 0.1.5.1
+
+- Fixed `VMA.AllocatorCreateInfo` for `vulkan-3.15` and newer.
+
 ## 0.1.5.0
 
 - Removed `allocateRenderpass_` from `RenderPass` class.
diff --git a/keid-core.cabal b/keid-core.cabal
--- a/keid-core.cabal
+++ b/keid-core.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           keid-core
-version:        0.1.5.0
+version:        0.1.5.1
 synopsis:       Core parts of Keid engine.
 category:       Game Engine
 author:         IC Rainbow
diff --git a/src/Engine/Frame.hs b/src/Engine/Frame.hs
--- a/src/Engine/Frame.hs
+++ b/src/Engine/Frame.hs
@@ -33,8 +33,7 @@
 import Engine.Vulkan.Types (HasVulkan(..), MonadVulkan, RenderPass(..), Queues)
 
 initial
-  :: (RenderPass rp)
-  => Maybe SwapchainResources
+  :: Maybe SwapchainResources
   -> DumpResource (RecycledResources rr)
   -> Stage rp p rr st
   -> StageRIO st (Frame rp p rr)
diff --git a/src/Engine/Setup.hs b/src/Engine/Setup.hs
--- a/src/Engine/Setup.hs
+++ b/src/Engine/Setup.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE CPP #-}
+
 module Engine.Setup where
 
 import RIO
@@ -14,6 +16,11 @@
 import Vulkan.Zero (zero)
 import VulkanMemoryAllocator qualified as VMA
 
+#if MIN_VERSION_vulkan(3,15,0)
+import Foreign.Ptr (castFunPtr)
+import Vulkan.Dynamic qualified as VkDynamic
+#endif
+
 import Engine.Camera qualified as Camera
 import Engine.Setup.Device (allocatePhysical, allocateLogical)
 import Engine.Setup.Window qualified as Window
@@ -60,9 +67,10 @@
   let
     allocatorCI :: VMA.AllocatorCreateInfo
     allocatorCI = zero
-      { VMA.physicalDevice = Vk.physicalDeviceHandle ghPhysicalDevice
-      , VMA.device         = Vk.deviceHandle ghDevice
-      , VMA.instance'      = Vk.instanceHandle ghInstance
+      { VMA.physicalDevice  = Vk.physicalDeviceHandle ghPhysicalDevice
+      , VMA.device          = Vk.deviceHandle ghDevice
+      , VMA.instance'       = Vk.instanceHandle ghInstance
+      , VMA.vulkanFunctions = Just $ vmaVulkanFunctions ghDevice ghInstance
       }
   (_vmaKey, ghAllocator) <- VMA.withAllocator allocatorCI Resource.allocate
   toIO (logDebug "Releasing VMA") >>= Resource.register
@@ -80,6 +88,22 @@
   ghStageSwitch <- newStageSwitchVar
 
   pure (GlobalHandles{..}, Nothing)
+
+vmaVulkanFunctions
+  :: Vk.Device
+  -> Vk.Instance
+  -> VMA.VulkanFunctions
+#if MIN_VERSION_vulkan(3,15,0)
+vmaVulkanFunctions Vk.Device{deviceCmds} Vk.Instance{instanceCmds} =
+  zero
+    { VMA.vkGetInstanceProcAddr =
+        castFunPtr $ VkDynamic.pVkGetInstanceProcAddr instanceCmds
+    , VMA.vkGetDeviceProcAddr =
+        castFunPtr $ VkDynamic.pVkGetDeviceProcAddr deviceCmds
+    }
+#else
+vmaVulkanFunctions _device _instance = zero
+#endif
 
 setupHeadless
   :: ( HasLogFunc env
