{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE Strict #-}
module Graphics.Vulkan.MemoryManagement where
import Graphics.Vulkan.Device( VkDevice(..)
)
import Graphics.Vulkan.Buffer( VkBuffer(..)
)
import Data.Word( Word64
, Word32
)
import Foreign.Ptr( Ptr
, plusPtr
)
import Foreign.Storable( Storable(..)
)
import Data.Void( Void
)
import Graphics.Vulkan.Memory( VkDeviceMemory(..)
)
import Graphics.Vulkan.Image( VkImage(..)
)
import Graphics.Vulkan.Core( VkResult(..)
, VkDeviceSize(..)
)
foreign import ccall "vkGetImageMemoryRequirements" vkGetImageMemoryRequirements ::
VkDevice -> VkImage -> Ptr VkMemoryRequirements -> IO ()
data VkMemoryRequirements =
VkMemoryRequirements{ vkSize :: VkDeviceSize
, vkAlignment :: VkDeviceSize
, vkMemoryTypeBits :: Word32
}
deriving (Eq)
instance Storable VkMemoryRequirements where
sizeOf ~_ = 24
alignment ~_ = 8
peek ptr = VkMemoryRequirements <$> peek (ptr `plusPtr` 0)
<*> peek (ptr `plusPtr` 8)
<*> peek (ptr `plusPtr` 16)
poke ptr poked = poke (ptr `plusPtr` 0) (vkSize (poked :: VkMemoryRequirements))
*> poke (ptr `plusPtr` 8) (vkAlignment (poked :: VkMemoryRequirements))
*> poke (ptr `plusPtr` 16) (vkMemoryTypeBits (poked :: VkMemoryRequirements))
foreign import ccall "vkGetBufferMemoryRequirements" vkGetBufferMemoryRequirements ::
VkDevice -> VkBuffer -> Ptr VkMemoryRequirements -> IO ()
foreign import ccall "vkBindBufferMemory" vkBindBufferMemory ::
VkDevice ->
VkBuffer -> VkDeviceMemory -> VkDeviceSize -> IO VkResult
foreign import ccall "vkBindImageMemory" vkBindImageMemory ::
VkDevice ->
VkImage -> VkDeviceMemory -> VkDeviceSize -> IO VkResult