{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE Strict #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module Graphics.Vulkan.Image where
import Graphics.Vulkan.Device( VkDevice(..)
)
import Data.Word( Word64
, Word32
)
import Foreign.Ptr( Ptr
, plusPtr
)
import Data.Int( Int32
)
import Data.Bits( Bits
, FiniteBits
)
import Foreign.Storable( Storable(..)
)
import Data.Void( Void
)
import Graphics.Vulkan.Memory( VkInternalAllocationType(..)
, PFN_vkAllocationFunction
, PFN_vkReallocationFunction
, PFN_vkInternalAllocationNotification
, VkAllocationCallbacks(..)
, VkSystemAllocationScope(..)
, PFN_vkFreeFunction
, PFN_vkInternalFreeNotification
)
import Graphics.Vulkan.Sampler( VkSampleCountFlagBits(..)
)
import Graphics.Vulkan.Core( VkExtent3D(..)
, VkResult(..)
, VkDeviceSize(..)
, VkFlags(..)
, VkFormat(..)
, VkStructureType(..)
, VkSharingMode(..)
)
import Foreign.C.Types( CSize(..)
)
foreign import ccall "vkCreateImage" vkCreateImage ::
VkDevice ->
Ptr VkImageCreateInfo ->
Ptr VkAllocationCallbacks -> Ptr VkImage -> IO VkResult
newtype VkImageCreateFlagBits = VkImageCreateFlagBits VkFlags
deriving (Eq, Storable, Bits, FiniteBits)
type VkImageCreateFlags = VkImageCreateFlagBits
pattern VK_IMAGE_CREATE_SPARSE_BINDING_BIT = VkImageCreateFlagBits 0x1
pattern VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT = VkImageCreateFlagBits 0x2
pattern VK_IMAGE_CREATE_SPARSE_ALIASED_BIT = VkImageCreateFlagBits 0x4
pattern VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT = VkImageCreateFlagBits 0x8
pattern VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT = VkImageCreateFlagBits 0x10
newtype VkImageUsageFlagBits = VkImageUsageFlagBits VkFlags
deriving (Eq, Storable, Bits, FiniteBits)
type VkImageUsageFlags = VkImageUsageFlagBits
pattern VK_IMAGE_USAGE_TRANSFER_SRC_BIT = VkImageUsageFlagBits 0x1
pattern VK_IMAGE_USAGE_TRANSFER_DST_BIT = VkImageUsageFlagBits 0x2
pattern VK_IMAGE_USAGE_SAMPLED_BIT = VkImageUsageFlagBits 0x4
pattern VK_IMAGE_USAGE_STORAGE_BIT = VkImageUsageFlagBits 0x8
pattern VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT = VkImageUsageFlagBits 0x10
pattern VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT = VkImageUsageFlagBits 0x20
pattern VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT = VkImageUsageFlagBits 0x40
pattern VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT = VkImageUsageFlagBits 0x80
newtype VkImage = VkImage Word64
deriving (Eq, Storable)
newtype VkImageAspectFlagBits = VkImageAspectFlagBits VkFlags
deriving (Eq, Storable, Bits, FiniteBits)
type VkImageAspectFlags = VkImageAspectFlagBits
pattern VK_IMAGE_ASPECT_COLOR_BIT = VkImageAspectFlagBits 0x1
pattern VK_IMAGE_ASPECT_DEPTH_BIT = VkImageAspectFlagBits 0x2
pattern VK_IMAGE_ASPECT_STENCIL_BIT = VkImageAspectFlagBits 0x4
pattern VK_IMAGE_ASPECT_METADATA_BIT = VkImageAspectFlagBits 0x8
data VkSubresourceLayout =
VkSubresourceLayout{ vkOffset :: VkDeviceSize
, vkSize :: VkDeviceSize
, vkRowPitch :: VkDeviceSize
, vkArrayPitch :: VkDeviceSize
, vkDepthPitch :: VkDeviceSize
}
deriving (Eq)
instance Storable VkSubresourceLayout where
sizeOf ~_ = 40
alignment ~_ = 8
peek ptr = VkSubresourceLayout <$> peek (ptr `plusPtr` 0)
<*> peek (ptr `plusPtr` 8)
<*> peek (ptr `plusPtr` 16)
<*> peek (ptr `plusPtr` 24)
<*> peek (ptr `plusPtr` 32)
poke ptr poked = poke (ptr `plusPtr` 0) (vkOffset (poked :: VkSubresourceLayout))
*> poke (ptr `plusPtr` 8) (vkSize (poked :: VkSubresourceLayout))
*> poke (ptr `plusPtr` 16) (vkRowPitch (poked :: VkSubresourceLayout))
*> poke (ptr `plusPtr` 24) (vkArrayPitch (poked :: VkSubresourceLayout))
*> poke (ptr `plusPtr` 32) (vkDepthPitch (poked :: VkSubresourceLayout))
newtype VkImageTiling = VkImageTiling Int32
deriving (Eq, Storable)
pattern VK_IMAGE_TILING_OPTIMAL = VkImageTiling 0
pattern VK_IMAGE_TILING_LINEAR = VkImageTiling 1
newtype VkImageLayout = VkImageLayout Int32
deriving (Eq, Storable)
pattern VK_IMAGE_LAYOUT_UNDEFINED = VkImageLayout 0
pattern VK_IMAGE_LAYOUT_GENERAL = VkImageLayout 1
pattern VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL = VkImageLayout 2
pattern VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL = VkImageLayout 3
pattern VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL = VkImageLayout 4
pattern VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL = VkImageLayout 5
pattern VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL = VkImageLayout 6
pattern VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL = VkImageLayout 7
pattern VK_IMAGE_LAYOUT_PREINITIALIZED = VkImageLayout 8
newtype VkImageType = VkImageType Int32
deriving (Eq, Storable)
pattern VK_IMAGE_TYPE_1D = VkImageType 0
pattern VK_IMAGE_TYPE_2D = VkImageType 1
pattern VK_IMAGE_TYPE_3D = VkImageType 2
foreign import ccall "vkDestroyImage" vkDestroyImage ::
VkDevice -> VkImage -> Ptr VkAllocationCallbacks -> IO ()
data VkImageSubresource =
VkImageSubresource{ vkAspectMask :: VkImageAspectFlags
, vkMipLevel :: Word32
, vkArrayLayer :: Word32
}
deriving (Eq)
instance Storable VkImageSubresource where
sizeOf ~_ = 12
alignment ~_ = 4
peek ptr = VkImageSubresource <$> peek (ptr `plusPtr` 0)
<*> peek (ptr `plusPtr` 4)
<*> peek (ptr `plusPtr` 8)
poke ptr poked = poke (ptr `plusPtr` 0) (vkAspectMask (poked :: VkImageSubresource))
*> poke (ptr `plusPtr` 4) (vkMipLevel (poked :: VkImageSubresource))
*> poke (ptr `plusPtr` 8) (vkArrayLayer (poked :: VkImageSubresource))
data VkImageSubresourceRange =
VkImageSubresourceRange{ vkAspectMask :: VkImageAspectFlags
, vkBaseMipLevel :: Word32
, vkLevelCount :: Word32
, vkBaseArrayLayer :: Word32
, vkLayerCount :: Word32
}
deriving (Eq)
instance Storable VkImageSubresourceRange where
sizeOf ~_ = 20
alignment ~_ = 4
peek ptr = VkImageSubresourceRange <$> peek (ptr `plusPtr` 0)
<*> peek (ptr `plusPtr` 4)
<*> peek (ptr `plusPtr` 8)
<*> peek (ptr `plusPtr` 12)
<*> peek (ptr `plusPtr` 16)
poke ptr poked = poke (ptr `plusPtr` 0) (vkAspectMask (poked :: VkImageSubresourceRange))
*> poke (ptr `plusPtr` 4) (vkBaseMipLevel (poked :: VkImageSubresourceRange))
*> poke (ptr `plusPtr` 8) (vkLevelCount (poked :: VkImageSubresourceRange))
*> poke (ptr `plusPtr` 12) (vkBaseArrayLayer (poked :: VkImageSubresourceRange))
*> poke (ptr `plusPtr` 16) (vkLayerCount (poked :: VkImageSubresourceRange))
foreign import ccall "vkGetImageSubresourceLayout" vkGetImageSubresourceLayout ::
VkDevice ->
VkImage ->
Ptr VkImageSubresource -> Ptr VkSubresourceLayout -> IO ()
data VkImageCreateInfo =
VkImageCreateInfo{ vkSType :: VkStructureType
, vkPNext :: Ptr Void
, vkFlags :: VkImageCreateFlags
, vkImageType :: VkImageType
, vkFormat :: VkFormat
, vkExtent :: VkExtent3D
, vkMipLevels :: Word32
, vkArrayLayers :: Word32
, vkSamples :: VkSampleCountFlagBits
, vkTiling :: VkImageTiling
, vkUsage :: VkImageUsageFlags
, vkSharingMode :: VkSharingMode
, vkQueueFamilyIndexCount :: Word32
, vkPQueueFamilyIndices :: Ptr Word32
, vkInitialLayout :: VkImageLayout
}
deriving (Eq)
instance Storable VkImageCreateInfo where
sizeOf ~_ = 88
alignment ~_ = 8
peek ptr = VkImageCreateInfo <$> peek (ptr `plusPtr` 0)
<*> peek (ptr `plusPtr` 8)
<*> peek (ptr `plusPtr` 16)
<*> peek (ptr `plusPtr` 20)
<*> peek (ptr `plusPtr` 24)
<*> peek (ptr `plusPtr` 28)
<*> peek (ptr `plusPtr` 40)
<*> peek (ptr `plusPtr` 44)
<*> peek (ptr `plusPtr` 48)
<*> peek (ptr `plusPtr` 52)
<*> peek (ptr `plusPtr` 56)
<*> peek (ptr `plusPtr` 60)
<*> peek (ptr `plusPtr` 64)
<*> peek (ptr `plusPtr` 72)
<*> peek (ptr `plusPtr` 80)
poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkImageCreateInfo))
*> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkImageCreateInfo))
*> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkImageCreateInfo))
*> poke (ptr `plusPtr` 20) (vkImageType (poked :: VkImageCreateInfo))
*> poke (ptr `plusPtr` 24) (vkFormat (poked :: VkImageCreateInfo))
*> poke (ptr `plusPtr` 28) (vkExtent (poked :: VkImageCreateInfo))
*> poke (ptr `plusPtr` 40) (vkMipLevels (poked :: VkImageCreateInfo))
*> poke (ptr `plusPtr` 44) (vkArrayLayers (poked :: VkImageCreateInfo))
*> poke (ptr `plusPtr` 48) (vkSamples (poked :: VkImageCreateInfo))
*> poke (ptr `plusPtr` 52) (vkTiling (poked :: VkImageCreateInfo))
*> poke (ptr `plusPtr` 56) (vkUsage (poked :: VkImageCreateInfo))
*> poke (ptr `plusPtr` 60) (vkSharingMode (poked :: VkImageCreateInfo))
*> poke (ptr `plusPtr` 64) (vkQueueFamilyIndexCount (poked :: VkImageCreateInfo))
*> poke (ptr `plusPtr` 72) (vkPQueueFamilyIndices (poked :: VkImageCreateInfo))
*> poke (ptr `plusPtr` 80) (vkInitialLayout (poked :: VkImageCreateInfo))