vulkan-3.26.6: src/Vulkan/Extensions/VK_ANDROID_external_format_resolve.hs
{-# language CPP #-}
-- | = Name
--
-- VK_ANDROID_external_format_resolve - device extension
--
-- = VK_ANDROID_external_format_resolve
--
-- [__Name String__]
-- @VK_ANDROID_external_format_resolve@
--
-- [__Extension Type__]
-- Device extension
--
-- [__Registered Extension Number__]
-- 469
--
-- [__Revision__]
-- 1
--
-- [__Ratification Status__]
-- Not ratified
--
-- [__Extension and Version Dependencies__]
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ANDROID_external_memory_android_hardware_buffer VK_ANDROID_external_memory_android_hardware_buffer>
--
-- [__API Interactions__]
--
-- - Interacts with VK_VERSION_1_3
--
-- - Interacts with VK_KHR_dynamic_rendering
--
-- [__Special Use__]
--
-- - <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-compatibility-specialuse OpenGL \/ ES support>
--
-- [__Contact__]
--
-- - Chris Forbes
-- <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?body=[VK_ANDROID_external_format_resolve] @chrisforbes%0A*Here describe the issue or question you have about the VK_ANDROID_external_format_resolve extension* >
--
-- [__Extension Proposal__]
-- <https://github.com/KhronosGroup/Vulkan-Docs/tree/main/proposals/VK_ANDROID_external_format_resolve.adoc VK_ANDROID_external_format_resolve>
--
-- == Other Extension Metadata
--
-- [__Last Modified Date__]
-- 2023-05-03
--
-- [__IP Status__]
-- No known IP claims.
--
-- [__Contributors__]
--
-- - Tobias Hector, AMD
--
-- - Chris Forbes, Google
--
-- - Jan-Harald Fredriksen, Arm
--
-- - Shahbaz Youssefi, Google
--
-- - Matthew Netsch, Qualcomm
--
-- - Tony Zlatsinki, Nvidia
--
-- - Daniel Koch, Nvidia
--
-- - Jeff Leger, Qualcomm
--
-- - Alex Walters, Imagination
--
-- - Andrew Garrard, Imagination
--
-- - Ralph Potter, Samsung
--
-- - Ian Elliott, Google
--
-- == Description
--
-- This extension enables rendering to Android Hardware Buffers with
-- external formats which cannot be directly represented as renderable in
-- Vulkan, including Y′CBCR formats.
--
-- == New Structures
--
-- - Extending
-- 'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.AndroidHardwareBufferPropertiesANDROID':
--
-- - 'AndroidHardwareBufferFormatResolvePropertiesANDROID'
--
-- - Extending
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
-- 'Vulkan.Core10.Device.DeviceCreateInfo':
--
-- - 'PhysicalDeviceExternalFormatResolveFeaturesANDROID'
--
-- - Extending
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2':
--
-- - 'PhysicalDeviceExternalFormatResolvePropertiesANDROID'
--
-- == New Enum Constants
--
-- - 'ANDROID_EXTERNAL_FORMAT_RESOLVE_EXTENSION_NAME'
--
-- - 'ANDROID_EXTERNAL_FORMAT_RESOLVE_SPEC_VERSION'
--
-- - Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
--
-- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_RESOLVE_PROPERTIES_ANDROID'
--
-- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FORMAT_RESOLVE_FEATURES_ANDROID'
--
-- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FORMAT_RESOLVE_PROPERTIES_ANDROID'
--
-- If
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_dynamic_rendering VK_KHR_dynamic_rendering>
-- or
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#versions-1.3 Vulkan Version 1.3>
-- is supported:
--
-- - Extending
-- 'Vulkan.Core12.Enums.ResolveModeFlagBits.ResolveModeFlagBits':
--
-- - 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID'
--
-- == Version History
--
-- - Revision 1, 2023-05-34 (Tobias Hector)
--
-- - Initial version
--
-- == See Also
--
-- No cross-references are available
--
-- == Document Notes
--
-- For more information, see the
-- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VK_ANDROID_external_format_resolve Vulkan Specification>
--
-- This page is a generated document. Fixes and changes should be made to
-- the generator scripts, not directly.
module Vulkan.Extensions.VK_ANDROID_external_format_resolve ( PhysicalDeviceExternalFormatResolveFeaturesANDROID(..)
, PhysicalDeviceExternalFormatResolvePropertiesANDROID(..)
, AndroidHardwareBufferFormatResolvePropertiesANDROID(..)
, ANDROID_EXTERNAL_FORMAT_RESOLVE_SPEC_VERSION
, pattern ANDROID_EXTERNAL_FORMAT_RESOLVE_SPEC_VERSION
, ANDROID_EXTERNAL_FORMAT_RESOLVE_EXTENSION_NAME
, pattern ANDROID_EXTERNAL_FORMAT_RESOLVE_EXTENSION_NAME
) where
import Foreign.Marshal.Alloc (allocaBytes)
import Foreign.Ptr (nullPtr)
import Foreign.Ptr (plusPtr)
import Vulkan.CStruct (FromCStruct)
import Vulkan.CStruct (FromCStruct(..))
import Vulkan.CStruct (ToCStruct)
import Vulkan.CStruct (ToCStruct(..))
import Vulkan.Zero (Zero(..))
import Data.String (IsString)
import Data.Typeable (Typeable)
import Foreign.Storable (Storable)
import Foreign.Storable (Storable(peek))
import Foreign.Storable (Storable(poke))
import qualified Foreign.Storable (Storable(..))
import GHC.Generics (Generic)
import Foreign.Ptr (Ptr)
import Data.Kind (Type)
import Vulkan.Core10.FundamentalTypes (bool32ToBool)
import Vulkan.Core10.FundamentalTypes (boolToBool32)
import Vulkan.Core10.FundamentalTypes (Bool32)
import Vulkan.Core11.Enums.ChromaLocation (ChromaLocation)
import Vulkan.Core10.Enums.Format (Format)
import Vulkan.Core10.Enums.StructureType (StructureType)
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_RESOLVE_PROPERTIES_ANDROID))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FORMAT_RESOLVE_FEATURES_ANDROID))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FORMAT_RESOLVE_PROPERTIES_ANDROID))
-- | VkPhysicalDeviceExternalFormatResolveFeaturesANDROID - Structure
-- describing whether external format resolves are supported
--
-- = Description
--
-- If the 'PhysicalDeviceExternalFormatResolveFeaturesANDROID' structure is
-- included in the @pNext@ chain of the
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2'
-- structure passed to
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceFeatures2',
-- it is filled in to indicate whether each corresponding feature is
-- supported. 'PhysicalDeviceExternalFormatResolveFeaturesANDROID' /can/
-- also be used in the @pNext@ chain of
-- 'Vulkan.Core10.Device.DeviceCreateInfo' to selectively enable these
-- features.
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ANDROID_external_format_resolve VK_ANDROID_external_format_resolve>,
-- 'Vulkan.Core10.FundamentalTypes.Bool32',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data PhysicalDeviceExternalFormatResolveFeaturesANDROID = PhysicalDeviceExternalFormatResolveFeaturesANDROID
{ -- | #features-externalFormatResolve# @externalFormatResolve@ specifies
-- whether external format resolves are supported.
externalFormatResolve :: Bool }
deriving (Typeable, Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PhysicalDeviceExternalFormatResolveFeaturesANDROID)
#endif
deriving instance Show PhysicalDeviceExternalFormatResolveFeaturesANDROID
instance ToCStruct PhysicalDeviceExternalFormatResolveFeaturesANDROID where
withCStruct x f = allocaBytes 24 $ \p -> pokeCStruct p x (f p)
pokeCStruct p PhysicalDeviceExternalFormatResolveFeaturesANDROID{..} f = do
poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FORMAT_RESOLVE_FEATURES_ANDROID)
poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (externalFormatResolve))
f
cStructSize = 24
cStructAlignment = 8
pokeZeroCStruct p f = do
poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FORMAT_RESOLVE_FEATURES_ANDROID)
poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
f
instance FromCStruct PhysicalDeviceExternalFormatResolveFeaturesANDROID where
peekCStruct p = do
externalFormatResolve <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
pure $ PhysicalDeviceExternalFormatResolveFeaturesANDROID
(bool32ToBool externalFormatResolve)
instance Storable PhysicalDeviceExternalFormatResolveFeaturesANDROID where
sizeOf ~_ = 24
alignment ~_ = 8
peek = peekCStruct
poke ptr poked = pokeCStruct ptr poked (pure ())
instance Zero PhysicalDeviceExternalFormatResolveFeaturesANDROID where
zero = PhysicalDeviceExternalFormatResolveFeaturesANDROID
zero
-- | VkPhysicalDeviceExternalFormatResolvePropertiesANDROID - Structure
-- describing external format resolve supported by an implementation
--
-- = Description
--
-- If the 'PhysicalDeviceExternalFormatResolvePropertiesANDROID' structure
-- is included in the @pNext@ chain of the
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2'
-- structure passed to
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceProperties2',
-- it is filled in with each corresponding implementation-dependent
-- property.
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ANDROID_external_format_resolve VK_ANDROID_external_format_resolve>,
-- 'Vulkan.Core10.FundamentalTypes.Bool32',
-- 'Vulkan.Core11.Enums.ChromaLocation.ChromaLocation',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data PhysicalDeviceExternalFormatResolvePropertiesANDROID = PhysicalDeviceExternalFormatResolvePropertiesANDROID
{ -- | #limits-nullColorAttachmentWithExternalFormatResolve#
-- @nullColorAttachmentWithExternalFormatResolve@ indicates that there
-- /must/ be no color attachment image when performing external format
-- resolves if it is 'Vulkan.Core10.FundamentalTypes.TRUE'.
nullColorAttachmentWithExternalFormatResolve :: Bool
, -- | #limits-externalFormatResolveChromaOffsetX#
-- @externalFormatResolveChromaOffsetX@ indicates the
-- 'Vulkan.Core11.Enums.ChromaLocation.ChromaLocation' that an
-- implementation uses in the X axis for accesses to an external format
-- image as a resolve attachment. This /must/ be consistent between
-- external format resolves and load operations from external format
-- resolve attachments to color attachments when
-- @nullColorAttachmentWithExternalFormatResolve@ is
-- 'Vulkan.Core10.FundamentalTypes.TRUE'.
externalFormatResolveChromaOffsetX :: ChromaLocation
, -- | #limits-externalFormatResolveChromaOffsetY#
-- @externalFormatResolveChromaOffsetY@ indicates the
-- 'Vulkan.Core11.Enums.ChromaLocation.ChromaLocation' that an
-- implementation uses in the Y axis for accesses to an external format
-- image as a resolve attachment. This /must/ be consistent between
-- external format resolves and load operations from external format
-- resolve attachments to color attachments when
-- @nullColorAttachmentWithExternalFormatResolve@ is
-- 'Vulkan.Core10.FundamentalTypes.TRUE'.
externalFormatResolveChromaOffsetY :: ChromaLocation
}
deriving (Typeable, Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PhysicalDeviceExternalFormatResolvePropertiesANDROID)
#endif
deriving instance Show PhysicalDeviceExternalFormatResolvePropertiesANDROID
instance ToCStruct PhysicalDeviceExternalFormatResolvePropertiesANDROID where
withCStruct x f = allocaBytes 32 $ \p -> pokeCStruct p x (f p)
pokeCStruct p PhysicalDeviceExternalFormatResolvePropertiesANDROID{..} f = do
poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FORMAT_RESOLVE_PROPERTIES_ANDROID)
poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (nullColorAttachmentWithExternalFormatResolve))
poke ((p `plusPtr` 20 :: Ptr ChromaLocation)) (externalFormatResolveChromaOffsetX)
poke ((p `plusPtr` 24 :: Ptr ChromaLocation)) (externalFormatResolveChromaOffsetY)
f
cStructSize = 32
cStructAlignment = 8
pokeZeroCStruct p f = do
poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FORMAT_RESOLVE_PROPERTIES_ANDROID)
poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
poke ((p `plusPtr` 20 :: Ptr ChromaLocation)) (zero)
poke ((p `plusPtr` 24 :: Ptr ChromaLocation)) (zero)
f
instance FromCStruct PhysicalDeviceExternalFormatResolvePropertiesANDROID where
peekCStruct p = do
nullColorAttachmentWithExternalFormatResolve <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
externalFormatResolveChromaOffsetX <- peek @ChromaLocation ((p `plusPtr` 20 :: Ptr ChromaLocation))
externalFormatResolveChromaOffsetY <- peek @ChromaLocation ((p `plusPtr` 24 :: Ptr ChromaLocation))
pure $ PhysicalDeviceExternalFormatResolvePropertiesANDROID
(bool32ToBool nullColorAttachmentWithExternalFormatResolve)
externalFormatResolveChromaOffsetX
externalFormatResolveChromaOffsetY
instance Storable PhysicalDeviceExternalFormatResolvePropertiesANDROID where
sizeOf ~_ = 32
alignment ~_ = 8
peek = peekCStruct
poke ptr poked = pokeCStruct ptr poked (pure ())
instance Zero PhysicalDeviceExternalFormatResolvePropertiesANDROID where
zero = PhysicalDeviceExternalFormatResolvePropertiesANDROID
zero
zero
zero
-- | VkAndroidHardwareBufferFormatResolvePropertiesANDROID - Structure
-- defining properties of resolves using an external format
--
-- = Description
--
-- Any Android hardware buffer created with the @GRALLOC_USAGE_HW_RENDER@
-- flag /must/ be renderable in some way in Vulkan, either:
--
-- - 'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.AndroidHardwareBufferFormatPropertiesANDROID'::@format@
-- /must/ be a format that supports
-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT'
-- or
-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT'
-- in
-- 'Vulkan.Core10.DeviceInitialization.FormatProperties'::@optimalTilingFeatures@;
-- or
--
-- - @colorAttachmentFormat@ /must/ be a format that supports
-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT'
-- in
-- 'Vulkan.Core10.DeviceInitialization.FormatProperties'::@optimalTilingFeatures@.
--
-- == Valid Usage (Implicit)
--
-- - #VUID-VkAndroidHardwareBufferFormatResolvePropertiesANDROID-sType-sType#
-- @sType@ /must/ be
-- 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_RESOLVE_PROPERTIES_ANDROID'
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ANDROID_external_format_resolve VK_ANDROID_external_format_resolve>,
-- 'Vulkan.Core10.Enums.Format.Format',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data AndroidHardwareBufferFormatResolvePropertiesANDROID = AndroidHardwareBufferFormatResolvePropertiesANDROID
{ -- | @colorAttachmentFormat@ is a 'Vulkan.Core10.Enums.Format.Format'
-- specifying the format of color attachment images that /must/ be used for
-- color attachments when resolving to the specified external format. If
-- the implementation supports external format resolves for the specified
-- external format, this value will be a color format supporting the
-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT'
-- in
-- 'Vulkan.Core10.DeviceInitialization.FormatProperties'::@optimalTilingFeatures@
-- as returned by
-- 'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceFormatProperties'
-- with @format@ equal to @colorAttachmentFormat@ If external format
-- resolves are not supported, this value will be
-- 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED'.
colorAttachmentFormat :: Format }
deriving (Typeable, Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (AndroidHardwareBufferFormatResolvePropertiesANDROID)
#endif
deriving instance Show AndroidHardwareBufferFormatResolvePropertiesANDROID
instance ToCStruct AndroidHardwareBufferFormatResolvePropertiesANDROID where
withCStruct x f = allocaBytes 24 $ \p -> pokeCStruct p x (f p)
pokeCStruct p AndroidHardwareBufferFormatResolvePropertiesANDROID{..} f = do
poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_RESOLVE_PROPERTIES_ANDROID)
poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
poke ((p `plusPtr` 16 :: Ptr Format)) (colorAttachmentFormat)
f
cStructSize = 24
cStructAlignment = 8
pokeZeroCStruct p f = do
poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_RESOLVE_PROPERTIES_ANDROID)
poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
poke ((p `plusPtr` 16 :: Ptr Format)) (zero)
f
instance FromCStruct AndroidHardwareBufferFormatResolvePropertiesANDROID where
peekCStruct p = do
colorAttachmentFormat <- peek @Format ((p `plusPtr` 16 :: Ptr Format))
pure $ AndroidHardwareBufferFormatResolvePropertiesANDROID
colorAttachmentFormat
instance Storable AndroidHardwareBufferFormatResolvePropertiesANDROID where
sizeOf ~_ = 24
alignment ~_ = 8
peek = peekCStruct
poke ptr poked = pokeCStruct ptr poked (pure ())
instance Zero AndroidHardwareBufferFormatResolvePropertiesANDROID where
zero = AndroidHardwareBufferFormatResolvePropertiesANDROID
zero
type ANDROID_EXTERNAL_FORMAT_RESOLVE_SPEC_VERSION = 1
-- No documentation found for TopLevel "VK_ANDROID_EXTERNAL_FORMAT_RESOLVE_SPEC_VERSION"
pattern ANDROID_EXTERNAL_FORMAT_RESOLVE_SPEC_VERSION :: forall a . Integral a => a
pattern ANDROID_EXTERNAL_FORMAT_RESOLVE_SPEC_VERSION = 1
type ANDROID_EXTERNAL_FORMAT_RESOLVE_EXTENSION_NAME = "VK_ANDROID_external_format_resolve"
-- No documentation found for TopLevel "VK_ANDROID_EXTERNAL_FORMAT_RESOLVE_EXTENSION_NAME"
pattern ANDROID_EXTERNAL_FORMAT_RESOLVE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
pattern ANDROID_EXTERNAL_FORMAT_RESOLVE_EXTENSION_NAME = "VK_ANDROID_external_format_resolve"