diff --git a/src/Graphics/Vulkan/Marshal/Create.hs b/src/Graphics/Vulkan/Marshal/Create.hs
--- a/src/Graphics/Vulkan/Marshal/Create.hs
+++ b/src/Graphics/Vulkan/Marshal/Create.hs
@@ -25,6 +25,7 @@
     , createVk, (&*)
     , set, setAt, setVk, setVkRef, setStr, setStrRef, setStrListRef, setListRef
     , SetOptionalFields (..), HandleRemainingFields (..), HandleRemFields
+    , unsafeIOCreate
     ) where
 
 import           Data.Coerce
@@ -69,6 +70,11 @@
 
            , a)
     }
+
+-- | Unsafe perform arbitrary IO action with a pointer to data under construction.
+--   This is used to add more functionality to this monad.
+unsafeIOCreate :: (Ptr x -> IO a) -> CreateVkStruct x fs a
+unsafeIOCreate k = CreateVkStruct $ fmap ((,) ([],[])) . k
 
 instance Functor (CreateVkStruct x fs) where
   fmap f = CreateVkStruct . fmap (fmap $ fmap f) . unCreateVkStruct
diff --git a/vulkan-api.cabal b/vulkan-api.cabal
--- a/vulkan-api.cabal
+++ b/vulkan-api.cabal
@@ -3,7 +3,7 @@
 -- it is autogenerated at genvulkan/src/Write/Cabal.hs
 --
 name:                vulkan-api
-version:             1.1.2.0
+version:             1.1.2.1
 synopsis:            Low-level low-overhead vulkan api bindings
 description:
     Haskell bindings for vulkan api as described in vk.xml.
