gpu-vulkan-core 0.1.0.8 → 0.1.0.11
raw patch · 7 files changed
+234/−6 lines, 7 filesPVP: minor bump suggested
API additions: PVP suggests at least a minor version bump
API changes (from Hackage documentation)
+ Gpu.Vulkan.Image.Core: data Subresource
+ Gpu.Vulkan.Image.Core: instance Foreign.Storable.Storable Gpu.Vulkan.Image.Core.Subresource
+ Gpu.Vulkan.Image.Core: instance GHC.Show.Show Gpu.Vulkan.Image.Core.Subresource
+ Gpu.Vulkan.Image.Core: pattern Subresource :: Word32 -> Word32 -> Word32 -> Subresource
+ Gpu.Vulkan.Image.Core: subresourceArrayLayer :: Subresource -> Word32
+ Gpu.Vulkan.Image.Core: subresourceAspectMask :: Subresource -> Word32
+ Gpu.Vulkan.Image.Core: subresourceMipLevel :: Subresource -> Word32
+ Gpu.Vulkan.Queue.Core: bindSparse :: Q -> Word32 -> Ptr BindSparseInfo -> F -> IO Int32
+ Gpu.Vulkan.Queue.Core: bindSparseInfoBufferBindCount :: BindSparseInfo -> Word32
+ Gpu.Vulkan.Queue.Core: bindSparseInfoImageBindCount :: BindSparseInfo -> Word32
+ Gpu.Vulkan.Queue.Core: bindSparseInfoImageOpaqueBindCount :: BindSparseInfo -> Word32
+ Gpu.Vulkan.Queue.Core: bindSparseInfoPBufferBinds :: BindSparseInfo -> PtrMemoryBindInfo
+ Gpu.Vulkan.Queue.Core: bindSparseInfoPImageBinds :: BindSparseInfo -> PtrMemoryBindInfo
+ Gpu.Vulkan.Queue.Core: bindSparseInfoPImageOpaqueBinds :: BindSparseInfo -> PtrOpaqueMemoryBindInfo
+ Gpu.Vulkan.Queue.Core: bindSparseInfoPNext :: BindSparseInfo -> PtrVoid
+ Gpu.Vulkan.Queue.Core: bindSparseInfoPSignalSemaphores :: BindSparseInfo -> PtrS
+ Gpu.Vulkan.Queue.Core: bindSparseInfoPWaitSemaphores :: BindSparseInfo -> PtrS
+ Gpu.Vulkan.Queue.Core: bindSparseInfoSType :: BindSparseInfo -> ()
+ Gpu.Vulkan.Queue.Core: bindSparseInfoSignalSemaphoreCount :: BindSparseInfo -> Word32
+ Gpu.Vulkan.Queue.Core: bindSparseInfoWaitSemaphoreCount :: BindSparseInfo -> Word32
+ Gpu.Vulkan.Queue.Core: data BindSparseInfo
+ Gpu.Vulkan.Queue.Core: instance Foreign.Storable.Storable Gpu.Vulkan.Queue.Core.BindSparseInfo
+ Gpu.Vulkan.Queue.Core: instance GHC.Show.Show Gpu.Vulkan.Queue.Core.BindSparseInfo
+ Gpu.Vulkan.Queue.Core: pattern BindSparseInfo :: () -> PtrVoid -> Word32 -> PtrS -> Word32 -> PtrMemoryBindInfo -> Word32 -> PtrOpaqueMemoryBindInfo -> Word32 -> PtrMemoryBindInfo -> Word32 -> PtrS -> BindSparseInfo
+ Gpu.Vulkan.Sparse.Buffer.Core: MemoryBindInfo_ :: ForeignPtr MemoryBindInfo -> MemoryBindInfo
+ Gpu.Vulkan.Sparse.Buffer.Core: instance Foreign.Storable.Storable Gpu.Vulkan.Sparse.Buffer.Core.MemoryBindInfo
+ Gpu.Vulkan.Sparse.Buffer.Core: instance GHC.Show.Show Gpu.Vulkan.Sparse.Buffer.Core.MemoryBindInfo
+ Gpu.Vulkan.Sparse.Buffer.Core: memoryBindInfo :: MemoryBindInfo -> (B, Word32, PtrMemoryBind)
+ Gpu.Vulkan.Sparse.Buffer.Core: newtype MemoryBindInfo
+ Gpu.Vulkan.Sparse.Buffer.Core: pattern MemoryBindInfo :: B -> Word32 -> PtrMemoryBind -> MemoryBindInfo
+ Gpu.Vulkan.Sparse.Buffer.Core: type PtrMemoryBindInfo = Ptr MemoryBindInfo
+ Gpu.Vulkan.Sparse.Core: MemoryBind_ :: ForeignPtr MemoryBind -> MemoryBind
+ Gpu.Vulkan.Sparse.Core: instance Foreign.Storable.Storable Gpu.Vulkan.Sparse.Core.MemoryBind
+ Gpu.Vulkan.Sparse.Core: instance GHC.Show.Show Gpu.Vulkan.Sparse.Core.MemoryBind
+ Gpu.Vulkan.Sparse.Core: memoryBind :: MemoryBind -> (Word64, Word64, M, Word64, Word32)
+ Gpu.Vulkan.Sparse.Core: newtype MemoryBind
+ Gpu.Vulkan.Sparse.Core: pattern MemoryBind :: Word64 -> Word64 -> M -> Word64 -> Word32 -> MemoryBind
+ Gpu.Vulkan.Sparse.Core: type PtrMemoryBind = Ptr MemoryBind
+ Gpu.Vulkan.Sparse.Image.Core: MemoryBindInfo_ :: ForeignPtr MemoryBindInfo -> MemoryBindInfo
+ Gpu.Vulkan.Sparse.Image.Core: MemoryBind_ :: ForeignPtr MemoryBind -> MemoryBind
+ Gpu.Vulkan.Sparse.Image.Core: OpaqueMemoryBindInfo_ :: ForeignPtr OpaqueMemoryBindInfo -> OpaqueMemoryBindInfo
+ Gpu.Vulkan.Sparse.Image.Core: instance Foreign.Storable.Storable Gpu.Vulkan.Sparse.Image.Core.MemoryBind
+ Gpu.Vulkan.Sparse.Image.Core: instance Foreign.Storable.Storable Gpu.Vulkan.Sparse.Image.Core.MemoryBindInfo
+ Gpu.Vulkan.Sparse.Image.Core: instance Foreign.Storable.Storable Gpu.Vulkan.Sparse.Image.Core.OpaqueMemoryBindInfo
+ Gpu.Vulkan.Sparse.Image.Core: instance GHC.Show.Show Gpu.Vulkan.Sparse.Image.Core.MemoryBind
+ Gpu.Vulkan.Sparse.Image.Core: instance GHC.Show.Show Gpu.Vulkan.Sparse.Image.Core.MemoryBindInfo
+ Gpu.Vulkan.Sparse.Image.Core: instance GHC.Show.Show Gpu.Vulkan.Sparse.Image.Core.OpaqueMemoryBindInfo
+ Gpu.Vulkan.Sparse.Image.Core: memoryBind :: MemoryBind -> (Subresource, Offset3d, Extent3d, M, Word64, Word32)
+ Gpu.Vulkan.Sparse.Image.Core: memoryBindInfo :: MemoryBindInfo -> (I, Word32, PtrMemoryBind)
+ Gpu.Vulkan.Sparse.Image.Core: newtype MemoryBind
+ Gpu.Vulkan.Sparse.Image.Core: newtype MemoryBindInfo
+ Gpu.Vulkan.Sparse.Image.Core: newtype OpaqueMemoryBindInfo
+ Gpu.Vulkan.Sparse.Image.Core: opaqueMemoryBindInfo :: OpaqueMemoryBindInfo -> (I, Word32, PtrMemoryBind)
+ Gpu.Vulkan.Sparse.Image.Core: pattern MemoryBind :: Subresource -> Offset3d -> Extent3d -> M -> Word64 -> Word32 -> MemoryBind
+ Gpu.Vulkan.Sparse.Image.Core: pattern MemoryBindInfo :: I -> Word32 -> PtrMemoryBind -> MemoryBindInfo
+ Gpu.Vulkan.Sparse.Image.Core: pattern OpaqueMemoryBindInfo :: I -> Word32 -> PtrMemoryBind -> OpaqueMemoryBindInfo
+ Gpu.Vulkan.Sparse.Image.Core: type PtrMemoryBind = Ptr MemoryBind
+ Gpu.Vulkan.Sparse.Image.Core: type PtrMemoryBindInfo = Ptr MemoryBindInfo
+ Gpu.Vulkan.Sparse.Image.Core: type PtrOpaqueMemoryBindInfo = Ptr OpaqueMemoryBindInfo
Files
- gpu-vulkan-core.cabal +5/−2
- src/Gpu/Vulkan/Buffer/Core.hsc +1/−1
- src/Gpu/Vulkan/Image/Core.hsc +20/−1
- src/Gpu/Vulkan/Queue/Core.hsc +67/−2
- src/Gpu/Vulkan/Sparse/Buffer/Core.hsc +32/−0
- src/Gpu/Vulkan/Sparse/Core.hsc +36/−0
- src/Gpu/Vulkan/Sparse/Image/Core.hsc +73/−0
gpu-vulkan-core.cabal view
@@ -5,14 +5,14 @@ -- see: https://github.com/sol/hpack name: gpu-vulkan-core-version: 0.1.0.8+version: 0.1.0.11 synopsis: Thin wrapper for Vulkan API description: Please see the README on GitHub at <https://github.com/YoshikuniJujo/gpu-vulkan-core#readme> category: GPU homepage: https://github.com/YoshikuniJujo/gpu-vulkan-core#readme bug-reports: https://github.com/YoshikuniJujo/gpu-vulkan-core/issues author: Yoshikuni Jujo-maintainer: example@example.com+maintainer: yoshikuni.jujo@gmail.com copyright: 2022 Yoshikuni Jujo license: BSD3 license-file: LICENSE@@ -78,6 +78,9 @@ Gpu.Vulkan.Subpass.Core Gpu.Vulkan.VertexInput.Core Gpu.Vulkan.TypeSynonyms.Core+ Gpu.Vulkan.Sparse.Core+ Gpu.Vulkan.Sparse.Buffer.Core+ Gpu.Vulkan.Sparse.Image.Core other-modules: Data.Text.Tools Paths_gpu_vulkan_core
src/Gpu/Vulkan/Buffer/Core.hsc view
@@ -44,7 +44,7 @@ import Gpu.Vulkan.Core import Gpu.Vulkan.TypeSynonyms.Core import Gpu.Vulkan.AllocationCallbacks.Core qualified as AllocationCallbacks-import Gpu.Vulkan.Device.Core qualified as Device+import {-# SOURCE #-} Gpu.Vulkan.Device.Core qualified as Device import Gpu.Vulkan.Memory.Core qualified as Memory import Gpu.Vulkan.Image.Core qualified as Image
src/Gpu/Vulkan/Image/Core.hsc view
@@ -46,6 +46,12 @@ subresourceLayersAspectMask, subresourceLayersMipLevel, subresourceLayersBaseArrayLayer, subresourceLayersLayerCount, + -- * Subresource++ Subresource, pattern Subresource,+ subresourceAspectMask, subresourceMipLevel,+ subresourceArrayLayer+ ) where import Foreign.Ptr@@ -59,7 +65,7 @@ import Gpu.Vulkan.Core import Gpu.Vulkan.TypeSynonyms.Core import Gpu.Vulkan.AllocationCallbacks.Core qualified as AllocationCallbacks-import Gpu.Vulkan.Device.Core qualified as Device+import {-# SOURCE #-} Gpu.Vulkan.Device.Core qualified as Device import Gpu.Vulkan.Memory.Core qualified as Memory #include <vulkan/vulkan.h>@@ -217,4 +223,17 @@ [| \p -> peekArray 2 (#{ptr VkImageBlit, dstOffsets} p) |], [| \p os -> pokeArray (#{ptr VkImageBlit, dstOffsets} p) $ take 2 os |]) ]+ [''Show, ''Storable]++struct "Subresource" #{size VkImageSubresource}+ #{alignment VkImageSubresource} [+ ("aspectMask", ''#{type VkImageAspectFlags},+ [| #{peek VkImageSubresource, aspectMask} |],+ [| #{poke VkImageSubresource, aspectMask} |]),+ ("mipLevel", ''#{type uint32_t},+ [| #{peek VkImageSubresource, mipLevel} |],+ [| #{poke VkImageSubresource, mipLevel} |]),+ ("arrayLayer", ''#{type uint32_t},+ [| #{peek VkImageSubresource, arrayLayer} |],+ [| #{poke VkImageSubresource, arrayLayer} |]) ] [''Show, ''Storable]
src/Gpu/Vulkan/Queue/Core.hsc view
@@ -1,21 +1,42 @@+{-# LANGUAGE ImportQualifiedPost #-}+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TupleSections #-}+{-# LAnGUAGE PatternSynonyms, ViewPatterns #-} {-# OPTIONS_GHC -Wall -fno-warn-tabs #-} module Gpu.Vulkan.Queue.Core ( - -- SUBMIT AND WAIT IDLE+ -- * SUBMIT AND WAIT IDLE - Q, submit, waitIdle+ Q, submit, waitIdle, + -- * BIND SPARSE++ bindSparse, BindSparseInfo, pattern BindSparseInfo,+ bindSparseInfoSType, bindSparseInfoPNext,+ bindSparseInfoWaitSemaphoreCount, bindSparseInfoPWaitSemaphores,+ bindSparseInfoBufferBindCount, bindSparseInfoPBufferBinds,+ bindSparseInfoImageOpaqueBindCount, bindSparseInfoPImageOpaqueBinds,+ bindSparseInfoImageBindCount, bindSparseInfoPImageBinds,+ bindSparseInfoSignalSemaphoreCount, bindSparseInfoPSignalSemaphores+ ) where import Foreign.Ptr+import Foreign.Storable+import Foreign.C.Struct+import Foreign.C.Struct.TypeSynonyms import Data.Word import Data.Int import Gpu.Vulkan.Core import {-# SOURCE #-} qualified Gpu.Vulkan.Fence.Core as Fence+import {-# SOURCE #-} Gpu.Vulkan.Semaphore.Core qualified as Semaphore +import Gpu.Vulkan.Sparse.Buffer.Core qualified as Spr.Bffr+import Gpu.Vulkan.Sparse.Image.Core qualified as Spr.Img+ #include <vulkan/vulkan.h> data QTag@@ -26,3 +47,47 @@ IO #{type VkResult} foreign import ccall "vkQueueWaitIdle" waitIdle :: Q -> IO #{type VkResult}++struct "BindSparseInfo" #{size VkBindSparseInfo} #{alignment VkBindSparseInfo} [+ ("sType", ''(), [| const $ pure () |],+ [| \p _ -> #{poke VkBufferCreateInfo, sType } p+ (#{const VK_STRUCTURE_TYPE_BIND_SPARSE_INFO} ::+ #{type VkStructureType}) |]),+ ("pNext", ''PtrVoid,+ [| #{peek VkBindSparseInfo, pNext} |],+ [| #{poke VkBindSparseInfo, pNext} |]),+ ("waitSemaphoreCount", ''#{type uint32_t},+ [| #{peek VkBindSparseInfo, waitSemaphoreCount} |],+ [| #{poke VkBindSparseInfo, waitSemaphoreCount} |]),+ ("pWaitSemaphores", ''Semaphore.PtrS,+ [| #{peek VkBindSparseInfo, pWaitSemaphores} |],+ [| #{poke VkBindSparseInfo, pWaitSemaphores} |]),+ ("bufferBindCount", ''#{type uint32_t},+ [| #{peek VkBindSparseInfo, bufferBindCount} |],+ [| #{poke VkBindSparseInfo, bufferBindCount} |]),+ ("pBufferBinds", ''Spr.Bffr.PtrMemoryBindInfo,+ [| #{peek VkBindSparseInfo, pBufferBinds} |],+ [| #{poke VkBindSparseInfo, pBufferBinds} |]),+ ("imageOpaqueBindCount", ''#{type uint32_t},+ [| #{peek VkBindSparseInfo, imageOpaqueBindCount} |],+ [| #{poke VkBindSparseInfo, imageOpaqueBindCount} |]),+ ("pImageOpaqueBinds", ''Spr.Img.PtrOpaqueMemoryBindInfo,+ [| #{peek VkBindSparseInfo, pImageOpaqueBinds} |],+ [| #{poke VkBindSparseInfo, pImageOpaqueBinds} |]),+ ("imageBindCount", ''#{type uint32_t},+ [| #{peek VkBindSparseInfo, imageBindCount} |],+ [| #{poke VkBindSparseInfo, imageBindCount} |]),+ ("pImageBinds", ''Spr.Img.PtrMemoryBindInfo,+ [| #{peek VkBindSparseInfo, pImageBinds} |],+ [| #{poke VkBindSparseInfo, pImageBinds} |]),+ ("signalSemaphoreCount", ''#{type uint32_t},+ [| #{peek VkBindSparseInfo, signalSemaphoreCount} |],+ [| #{poke VkBindSparseInfo, signalSemaphoreCount} |]),+ ("pSignalSemaphores", ''Semaphore.PtrS,+ [| #{peek VkBindSparseInfo, pSignalSemaphores} |],+ [| #{poke VkBindSparseInfo, pSignalSemaphores} |]) ]+ [''Show, ''Storable]++foreign import ccall "vkQueueBindSparse" bindSparse ::+ Q -> #{type uint32_t} -> Ptr BindSparseInfo -> Fence.F ->+ IO #{type VkResult}
+ src/Gpu/Vulkan/Sparse/Buffer/Core.hsc view
@@ -0,0 +1,32 @@+{-# LANGUAGE ImportQualifiedPost #-}+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TupleSections #-}+{-# LANGUAGE PatternSynonyms, ViewPatterns #-}+{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}++module Gpu.Vulkan.Sparse.Buffer.Core where++import Foreign.Ptr+import Foreign.Storable+import Foreign.C.Struct+import Data.Word++import Gpu.Vulkan.Buffer.Core qualified as Buffer+import Gpu.Vulkan.Sparse.Core++#include <vulkan/vulkan.h>++struct "MemoryBindInfo" #{size VkSparseBufferMemoryBindInfo}+ #{alignment VkSparseBufferMemoryBindInfo} [+ ("buffer", ''Buffer.B,+ [| #{peek VkSparseBufferMemoryBindInfo, buffer} |],+ [| #{poke VkSparseBufferMemoryBindInfo, buffer} |]),+ ("bindCount", ''#{type uint32_t},+ [| #{peek VkSparseBufferMemoryBindInfo, bindCount} |],+ [| #{poke VkSparseBufferMemoryBindInfo, bindCount} |]),+ ("pBinds", ''PtrMemoryBind,+ [| #{peek VkSparseBufferMemoryBindInfo, pBinds} |],+ [| #{poke VkSparseBufferMemoryBindInfo, pBinds} |]) ]+ [''Show, ''Storable]++type PtrMemoryBindInfo = Ptr MemoryBindInfo
+ src/Gpu/Vulkan/Sparse/Core.hsc view
@@ -0,0 +1,36 @@+{-# LANGUAGE ImportQualifiedPost #-}+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TupleSections #-}+{-# LANGUAGE PatternSynonyms, ViewPatterns #-}+{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}++module Gpu.Vulkan.Sparse.Core where++import Foreign.Ptr+import Foreign.Storable+import Foreign.C.Struct+import Data.Word++import Gpu.Vulkan.Memory.Core qualified as Memory++#include <vulkan/vulkan.h>++struct "MemoryBind" #{size VkSparseMemoryBind} #{alignment VkSparseMemoryBind} [+ ("resourceOffset", ''#{type VkDeviceSize},+ [| #{peek VkSparseMemoryBind, resourceOffset} |],+ [| #{poke VkSparseMemoryBind, resourceOffset} |]),+ ("size", ''#{type VkDeviceSize},+ [| #{peek VkSparseMemoryBind, size} |],+ [| #{poke VkSparseMemoryBind, size} |]),+ ("memory", ''Memory.M,+ [| #{peek VkSparseMemoryBind, memory} |],+ [| #{poke VkSparseMemoryBind, memory} |]),+ ("memoryOffset", ''#{type VkDeviceSize},+ [| #{peek VkSparseMemoryBind, memoryOffset} |],+ [| #{poke VkSparseMemoryBind, memoryOffset} |]),+ ("flags", ''#{type VkSparseMemoryBindFlags},+ [| #{peek VkSparseMemoryBind, flags} |],+ [| #{poke VkSparseMemoryBind, flags} |]) ]+ [''Show, ''Storable]++type PtrMemoryBind = Ptr MemoryBind
+ src/Gpu/Vulkan/Sparse/Image/Core.hsc view
@@ -0,0 +1,73 @@+{-# LANGUAGE ImportQualifiedPost #-}+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TupleSections #-}+{-# LANGUAGE PatternSynonyms, ViewPatterns #-}+{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}++module Gpu.Vulkan.Sparse.Image.Core where++import Foreign.Ptr+import Foreign.Storable+import Foreign.C.Struct+import Data.Word++import Gpu.Vulkan.Core+import Gpu.Vulkan.Memory.Core qualified as Memory+import Gpu.Vulkan.Image.Core qualified as Image+import Gpu.Vulkan.Sparse.Core qualified as S++#include <vulkan/vulkan.h>++struct "OpaqueMemoryBindInfo" #{size VkSparseImageOpaqueMemoryBindInfo}+ #{alignment VkSparseImageOpaqueMemoryBindInfo} [+ ("image", ''Image.I,+ [| #{peek VkSparseImageOpaqueMemoryBindInfo, image} |],+ [| #{poke VkSparseImageOpaqueMemoryBindInfo, image} |]),+ ("bindCount", ''#{type uint32_t},+ [| #{peek VkSparseImageOpaqueMemoryBindInfo, bindCount} |],+ [| #{poke VkSparseImageOpaqueMemoryBindInfo, bindCount} |]),+ ("pBinds", ''S.PtrMemoryBind,+ [| #{peek VkSparseImageOpaqueMemoryBindInfo, pBinds} |],+ [| #{poke VkSparseImageOpaqueMemoryBindInfo, pBinds} |]) ]+ [''Show, ''Storable]++type PtrOpaqueMemoryBindInfo = Ptr OpaqueMemoryBindInfo++struct "MemoryBind" #{size VkSparseImageMemoryBind}+ #{alignment VkSparseImageMemoryBind} [+ ("subresource", ''Image.Subresource,+ [| #{peek VkSparseImageMemoryBind, subresource} |],+ [| #{poke VkSparseImageMemoryBind, subresource} |]),+ ("offset", ''Offset3d,+ [| #{peek VkSparseImageMemoryBind, offset} |],+ [| #{poke VkSparseImageMemoryBind, offset} |]),+ ("extent", ''Extent3d,+ [| #{peek VkSparseImageMemoryBind, extent} |],+ [| #{poke VkSparseImageMemoryBind, extent} |]),+ ("memory", ''Memory.M,+ [| #{peek VkSparseImageMemoryBind, memory} |],+ [| #{poke VkSparseImageMemoryBind, memory} |]),+ ("memoryOffset", ''#{type VkDeviceSize},+ [| #{peek VkSparseImageMemoryBind, memoryOffset} |],+ [| #{poke VkSparseImageMemoryBind, memoryOffset} |]),+ ("flags", ''#{type VkSparseMemoryBindFlags},+ [| #{peek VkSparseImageMemoryBind, flags} |],+ [| #{poke VkSparseImageMemoryBind, flags} |]) ]+ [''Show, ''Storable]++type PtrMemoryBind = Ptr MemoryBind++struct "MemoryBindInfo" #{size VkSparseImageMemoryBindInfo}+ #{alignment VkSparseImageMemoryBindInfo} [+ ("image", ''Image.I,+ [| #{peek VkSparseImageMemoryBindInfo, image} |],+ [| #{poke VkSparseImageMemoryBindInfo, image} |]),+ ("bindCount", ''#{type uint32_t},+ [| #{peek VkSparseImageMemoryBindInfo, bindCount} |],+ [| #{poke VkSparseImageMemoryBindInfo, bindCount} |]),+ ("pBinds", ''PtrMemoryBind,+ [| #{peek VkSparseImageMemoryBindInfo, pBinds} |],+ [| #{poke VkSparseImageMemoryBindInfo, pBinds} |]) ]+ [''Show, ''Storable]++type PtrMemoryBindInfo = Ptr MemoryBindInfo