vulkan-2.0.0.1: src/Graphics/Vulkan/Core10/ExtensionDiscovery.hs
{-# language Strict #-}
{-# language CPP #-}
{-# language PatternSynonyms #-}
{-# language DataKinds #-}
{-# language TypeOperators #-}
{-# language DuplicateRecordFields #-}
module Graphics.Vulkan.Core10.ExtensionDiscovery
( VK_MAX_EXTENSION_NAME_SIZE
, pattern VK_MAX_EXTENSION_NAME_SIZE
, vkEnumerateInstanceExtensionProperties
, vkEnumerateDeviceExtensionProperties
, VkExtensionProperties(..)
) where
import Data.Vector.Storable.Sized
( Vector
)
import Data.Word
( Word32
)
import Foreign.C.Types
( CChar(..)
)
import Foreign.Ptr
( plusPtr
, Ptr
)
import Foreign.Storable
( Storable(..)
, Storable
)
import Graphics.Vulkan.NamedType
( (:::)
)
import Graphics.Vulkan.Core10.Core
( VkResult(..)
)
import Graphics.Vulkan.Core10.DeviceInitialization
( VkPhysicalDevice
)
-- No documentation found for TopLevel "VK_MAX_EXTENSION_NAME_SIZE"
type VK_MAX_EXTENSION_NAME_SIZE = 256
-- No documentation found for Nested "Integral a => a" "VK_MAX_EXTENSION_NAME_SIZE"
pattern VK_MAX_EXTENSION_NAME_SIZE :: Integral a => a
pattern VK_MAX_EXTENSION_NAME_SIZE = 256
-- | vkEnumerateInstanceExtensionProperties - Returns up to requested number
-- of global extension properties
--
-- = Parameters
--
-- - @pLayerName@ is either @NULL@ or a pointer to a null-terminated
-- UTF-8 string naming the layer to retrieve extensions from.
--
-- - @pPropertyCount@ is a pointer to an integer related to the number of
-- extension properties available or queried, as described below.
--
-- - @pProperties@ is either @NULL@ or a pointer to an array of
-- 'VkExtensionProperties' structures.
--
-- = Description
--
-- When @pLayerName@ parameter is @NULL@, only extensions provided by the
-- Vulkan implementation or by implicitly enabled layers are returned. When
-- @pLayerName@ is the name of a layer, the instance extensions provided by
-- that layer are returned.
--
-- If @pProperties@ is @NULL@, then the number of extensions properties
-- available is returned in @pPropertyCount@. Otherwise, @pPropertyCount@
-- /must/ point to a variable set by the user to the number of elements in
-- the @pProperties@ array, and on return the variable is overwritten with
-- the number of structures actually written to @pProperties@. If
-- @pPropertyCount@ is less than the number of extension properties
-- available, at most @pPropertyCount@ structures will be written. If
-- @pPropertyCount@ is smaller than the number of extensions available,
-- @VK_INCOMPLETE@ will be returned instead of @VK_SUCCESS@, to indicate
-- that not all the available properties were returned.
--
-- Because the list of available layers may change externally between calls
-- to @vkEnumerateInstanceExtensionProperties@, two calls may retrieve
-- different results if a @pLayerName@ is available in one call but not in
-- another. The extensions supported by a layer may also change between two
-- calls, e.g. if the layer implementation is replaced by a different
-- version between those calls.
--
-- == Valid Usage (Implicit)
--
-- - If @pLayerName@ is not @NULL@, @pLayerName@ /must/ be a
-- null-terminated UTF-8 string
--
-- - @pPropertyCount@ /must/ be a valid pointer to a @uint32_t@ value
--
-- - If the value referenced by @pPropertyCount@ is not @0@, and
-- @pProperties@ is not @NULL@, @pProperties@ /must/ be a valid pointer
-- to an array of @pPropertyCount@ @VkExtensionProperties@ structures
--
-- == Return Codes
--
-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
-- - @VK_SUCCESS@
--
-- - @VK_INCOMPLETE@
--
-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
-- - @VK_ERROR_OUT_OF_HOST_MEMORY@
--
-- - @VK_ERROR_OUT_OF_DEVICE_MEMORY@
--
-- - @VK_ERROR_LAYER_NOT_PRESENT@
--
-- = See Also
--
-- 'VkExtensionProperties'
foreign import ccall "vkEnumerateInstanceExtensionProperties" vkEnumerateInstanceExtensionProperties :: ("pLayerName" ::: Ptr CChar) -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr VkExtensionProperties) -> IO VkResult
-- | vkEnumerateDeviceExtensionProperties - Returns properties of available
-- physical device extensions
--
-- = Parameters
--
-- - @physicalDevice@ is the physical device that will be queried.
--
-- - @pLayerName@ is either @NULL@ or a pointer to a null-terminated
-- UTF-8 string naming the layer to retrieve extensions from.
--
-- - @pPropertyCount@ is a pointer to an integer related to the number of
-- extension properties available or queried, and is treated in the
-- same fashion as the
-- 'vkEnumerateInstanceExtensionProperties'::@pPropertyCount@
-- parameter.
--
-- - @pProperties@ is either @NULL@ or a pointer to an array of
-- 'VkExtensionProperties' structures.
--
-- = Description
--
-- When @pLayerName@ parameter is @NULL@, only extensions provided by the
-- Vulkan implementation or by implicitly enabled layers are returned. When
-- @pLayerName@ is the name of a layer, the device extensions provided by
-- that layer are returned.
--
-- == Valid Usage (Implicit)
--
-- - @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
--
-- - If @pLayerName@ is not @NULL@, @pLayerName@ /must/ be a
-- null-terminated UTF-8 string
--
-- - @pPropertyCount@ /must/ be a valid pointer to a @uint32_t@ value
--
-- - If the value referenced by @pPropertyCount@ is not @0@, and
-- @pProperties@ is not @NULL@, @pProperties@ /must/ be a valid pointer
-- to an array of @pPropertyCount@ @VkExtensionProperties@ structures
--
-- == Return Codes
--
-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
-- - @VK_SUCCESS@
--
-- - @VK_INCOMPLETE@
--
-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
-- - @VK_ERROR_OUT_OF_HOST_MEMORY@
--
-- - @VK_ERROR_OUT_OF_DEVICE_MEMORY@
--
-- - @VK_ERROR_LAYER_NOT_PRESENT@
--
-- = See Also
--
-- 'VkExtensionProperties',
-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice'
foreign import ccall "vkEnumerateDeviceExtensionProperties" vkEnumerateDeviceExtensionProperties :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pLayerName" ::: Ptr CChar) -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr VkExtensionProperties) -> IO VkResult
-- | VkExtensionProperties - Structure specifying a extension properties
--
-- = See Also
--
-- 'vkEnumerateDeviceExtensionProperties',
-- 'vkEnumerateInstanceExtensionProperties'
data VkExtensionProperties = VkExtensionProperties
{ -- | @extensionName@ is a null-terminated string specifying the name of the
-- extension.
vkExtensionName :: Vector VK_MAX_EXTENSION_NAME_SIZE CChar
, -- | @specVersion@ is the version of this extension. It is an integer,
-- incremented with backward compatible changes.
vkSpecVersion :: Word32
}
deriving (Eq, Show)
instance Storable VkExtensionProperties where
sizeOf ~_ = 260
alignment ~_ = 4
peek ptr = VkExtensionProperties <$> peek (ptr `plusPtr` 0)
<*> peek (ptr `plusPtr` 256)
poke ptr poked = poke (ptr `plusPtr` 0) (vkExtensionName (poked :: VkExtensionProperties))
*> poke (ptr `plusPtr` 256) (vkSpecVersion (poked :: VkExtensionProperties))