vulkan-2.1.0.0: src/Graphics/Vulkan/Extensions/VK_EXT_conservative_rasterization.hs
{-# language Strict #-}
{-# language CPP #-}
{-# language GeneralizedNewtypeDeriving #-}
{-# language PatternSynonyms #-}
{-# language OverloadedStrings #-}
{-# language DuplicateRecordFields #-}
module Graphics.Vulkan.Extensions.VK_EXT_conservative_rasterization
( VkConservativeRasterizationModeEXT(..)
, pattern VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT
, pattern VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT
, pattern VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT
, VkPipelineRasterizationConservativeStateCreateFlagsEXT(..)
, pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT
, pattern VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT
, pattern VK_EXT_CONSERVATIVE_RASTERIZATION_SPEC_VERSION
, pattern VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME
, VkPhysicalDeviceConservativeRasterizationPropertiesEXT(..)
, VkPipelineRasterizationConservativeStateCreateInfoEXT(..)
) where
import Data.Bits
( Bits
, FiniteBits
)
import Data.Int
( Int32
)
import Data.String
( IsString
)
import Foreign.C.Types
( CFloat(..)
)
import Foreign.Ptr
( Ptr
, plusPtr
)
import Foreign.Storable
( Storable
, Storable(..)
)
import GHC.Read
( choose
, expectP
)
import Text.ParserCombinators.ReadPrec
( (+++)
, prec
, step
)
import Text.Read
( Read(..)
, parens
)
import Text.Read.Lex
( Lexeme(Ident)
)
import Graphics.Vulkan.Core10.Core
( VkBool32(..)
, VkStructureType(..)
, VkFlags
)
-- ** VkConservativeRasterizationModeEXT
-- | VkConservativeRasterizationModeEXT - Specify the conservative
-- rasterization mode
--
-- = See Also
--
-- 'VkPipelineRasterizationConservativeStateCreateInfoEXT'
newtype VkConservativeRasterizationModeEXT = VkConservativeRasterizationModeEXT Int32
deriving (Eq, Ord, Storable)
instance Show VkConservativeRasterizationModeEXT where
showsPrec _ VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT = showString "VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT"
showsPrec _ VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT = showString "VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT"
showsPrec _ VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT = showString "VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT"
showsPrec p (VkConservativeRasterizationModeEXT x) = showParen (p >= 11) (showString "VkConservativeRasterizationModeEXT " . showsPrec 11 x)
instance Read VkConservativeRasterizationModeEXT where
readPrec = parens ( choose [ ("VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT", pure VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT)
, ("VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT", pure VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT)
, ("VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT", pure VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT)
] +++
prec 10 (do
expectP (Ident "VkConservativeRasterizationModeEXT")
v <- step readPrec
pure (VkConservativeRasterizationModeEXT v)
)
)
-- | @VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT@ specifies that
-- conservative rasterization is disabled and rasterization proceeds as
-- normal.
pattern VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT :: VkConservativeRasterizationModeEXT
pattern VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT = VkConservativeRasterizationModeEXT 0
-- | @VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT@ specifies that
-- conservative rasterization is enabled in overestimation mode.
pattern VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT :: VkConservativeRasterizationModeEXT
pattern VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT = VkConservativeRasterizationModeEXT 1
-- | @VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT@ specifies that
-- conservative rasterization is enabled in underestimation mode.
pattern VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT :: VkConservativeRasterizationModeEXT
pattern VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT = VkConservativeRasterizationModeEXT 2
-- ** VkPipelineRasterizationConservativeStateCreateFlagsEXT
-- | VkPipelineRasterizationConservativeStateCreateFlagsEXT - Reserved for
-- future use
--
-- = Description
--
-- @VkPipelineRasterizationConservativeStateCreateFlagsEXT@ is a bitmask
-- type for setting a mask, but is currently reserved for future use.
--
-- = See Also
--
-- 'VkPipelineRasterizationConservativeStateCreateInfoEXT'
newtype VkPipelineRasterizationConservativeStateCreateFlagsEXT = VkPipelineRasterizationConservativeStateCreateFlagsEXT VkFlags
deriving (Eq, Ord, Storable, Bits, FiniteBits)
instance Show VkPipelineRasterizationConservativeStateCreateFlagsEXT where
showsPrec p (VkPipelineRasterizationConservativeStateCreateFlagsEXT x) = showParen (p >= 11) (showString "VkPipelineRasterizationConservativeStateCreateFlagsEXT " . showsPrec 11 x)
instance Read VkPipelineRasterizationConservativeStateCreateFlagsEXT where
readPrec = parens ( choose [
] +++
prec 10 (do
expectP (Ident "VkPipelineRasterizationConservativeStateCreateFlagsEXT")
v <- step readPrec
pure (VkPipelineRasterizationConservativeStateCreateFlagsEXT v)
)
)
-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT"
pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT :: VkStructureType
pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT = VkStructureType 1000101000
-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT"
pattern VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT :: VkStructureType
pattern VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT = VkStructureType 1000101001
-- No documentation found for TopLevel "VK_EXT_CONSERVATIVE_RASTERIZATION_SPEC_VERSION"
pattern VK_EXT_CONSERVATIVE_RASTERIZATION_SPEC_VERSION :: Integral a => a
pattern VK_EXT_CONSERVATIVE_RASTERIZATION_SPEC_VERSION = 1
-- No documentation found for TopLevel "VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME"
pattern VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME :: (Eq a ,IsString a) => a
pattern VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME = "VK_EXT_conservative_rasterization"
-- | VkPhysicalDeviceConservativeRasterizationPropertiesEXT - Structure
-- describing conservative raster properties that can be supported by an
-- implementation
--
-- = Members
--
-- The members of the
-- @VkPhysicalDeviceConservativeRasterizationPropertiesEXT@ structure
-- describe the following implementation-dependent limits:
--
-- = Description
--
-- - @primitiveOverestimationSize@ is the size in pixels the generating
-- primitive is increased at each of its edges during conservative
-- rasterization overestimation mode. Even with a size of 0.0,
-- conservative rasterization overestimation rules still apply and if
-- any part of the pixel rectangle is covered by the generating
-- primitive, fragments are generated for the entire pixel. However
-- implementations /may/ make the pixel coverage area even more
-- conservative by increasing the size of the generating primitive.
--
-- - @maxExtraPrimitiveOverestimationSize@ is the maximum size in pixels
-- of extra overestimation the implementation supports in the pipeline
-- state. A value of 0.0 means the implementation does not support any
-- additional overestimation of the generating primitive during
-- conservative rasterization. A value above 0.0 allows the application
-- to further increase the size of the generating primitive during
-- conservative rasterization overestimation.
--
-- - @extraPrimitiveOverestimationSizeGranularity@ is the granularity of
-- extra overestimation that can be specified in the pipeline state
-- between 0.0 and @maxExtraPrimitiveOverestimationSize@ inclusive. A
-- value of 0.0 means the implementation can use the smallest
-- representable non-zero value in the screen space pixel fixed-point
-- grid.
--
-- - @primitiveUnderestimation@ is true if the implementation supports
-- the @VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT@
-- conservative rasterization mode in addition to
-- @VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT@. Otherwise the
-- implementation only supports
-- @VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT@.
--
-- - @conservativePointAndLineRasterization@ is true if the
-- implementation supports conservative rasterization of point and line
-- primitives as well as triangle primitives. Otherwise the
-- implementation only supports triangle primitives.
--
-- - @degenerateTrianglesRasterized@ is false if the implementation culls
-- primitives generated from triangles that become zero area after they
-- are quantized to the fixed-point rasterization pixel grid.
-- @degenerateTrianglesRasterized@ is true if these primitives are not
-- culled and the provoking vertex attributes and depth value are used
-- for the fragments. The primitive area calculation is done on the
-- primitive generated from the clipped triangle if applicable. Zero
-- area primitives are backfacing and the application /can/ enable
-- backface culling if desired.
--
-- - @degenerateLinesRasterized@ is false if the implementation culls
-- lines that become zero length after they are quantized to the
-- fixed-point rasterization pixel grid. @degenerateLinesRasterized@ is
-- true if zero length lines are not culled and the provoking vertex
-- attributes and depth value are used for the fragments.
--
-- - @fullyCoveredFragmentShaderInputVariable@ is true if the
-- implementation supports the SPIR-V builtin fragment shader input
-- variable FullyCoveredEXT which specifies that conservative
-- rasterization is enabled and the fragment pixel square is fully
-- covered by the generating primitive.
--
-- - @conservativeRasterizationPostDepthCoverage@ is true if the
-- implementation supports conservative rasterization with the
-- [@PostDepthCoverage@](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#shaders-fragment-earlytest-postdepthcoverage)
-- execution mode enabled. When supported the @SampleMask@ built-in
-- input variable will reflect the coverage after the early
-- per-fragment depth and stencil tests are applied even when
-- conservative rasterization is enabled. Otherwise
-- [@PostDepthCoverage@](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#shaders-fragment-earlytest-postdepthcoverage)
-- execution mode /must/ not be used when conservative rasterization is
-- enabled.
--
-- == Valid Usage (Implicit)
--
-- - @sType@ /must/ be
-- @VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT@
--
-- If the @VkPhysicalDeviceConservativeRasterizationPropertiesEXT@
-- structure is included in the @pNext@ chain of
-- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.VkPhysicalDeviceProperties2KHR',
-- it is filled with the implementation-dependent limits and properties.
--
-- = See Also
--
-- @VkBool32@, 'Graphics.Vulkan.Core10.Core.VkStructureType'
data VkPhysicalDeviceConservativeRasterizationPropertiesEXT = VkPhysicalDeviceConservativeRasterizationPropertiesEXT
{ -- No documentation found for Nested "VkPhysicalDeviceConservativeRasterizationPropertiesEXT" "sType"
vkSType :: VkStructureType
, -- No documentation found for Nested "VkPhysicalDeviceConservativeRasterizationPropertiesEXT" "pNext"
vkPNext :: Ptr ()
, -- No documentation found for Nested "VkPhysicalDeviceConservativeRasterizationPropertiesEXT" "primitiveOverestimationSize"
vkPrimitiveOverestimationSize :: CFloat
, -- No documentation found for Nested "VkPhysicalDeviceConservativeRasterizationPropertiesEXT" "maxExtraPrimitiveOverestimationSize"
vkMaxExtraPrimitiveOverestimationSize :: CFloat
, -- No documentation found for Nested "VkPhysicalDeviceConservativeRasterizationPropertiesEXT" "extraPrimitiveOverestimationSizeGranularity"
vkExtraPrimitiveOverestimationSizeGranularity :: CFloat
, -- No documentation found for Nested "VkPhysicalDeviceConservativeRasterizationPropertiesEXT" "primitiveUnderestimation"
vkPrimitiveUnderestimation :: VkBool32
, -- No documentation found for Nested "VkPhysicalDeviceConservativeRasterizationPropertiesEXT" "conservativePointAndLineRasterization"
vkConservativePointAndLineRasterization :: VkBool32
, -- No documentation found for Nested "VkPhysicalDeviceConservativeRasterizationPropertiesEXT" "degenerateTrianglesRasterized"
vkDegenerateTrianglesRasterized :: VkBool32
, -- No documentation found for Nested "VkPhysicalDeviceConservativeRasterizationPropertiesEXT" "degenerateLinesRasterized"
vkDegenerateLinesRasterized :: VkBool32
, -- No documentation found for Nested "VkPhysicalDeviceConservativeRasterizationPropertiesEXT" "fullyCoveredFragmentShaderInputVariable"
vkFullyCoveredFragmentShaderInputVariable :: VkBool32
, -- No documentation found for Nested "VkPhysicalDeviceConservativeRasterizationPropertiesEXT" "conservativeRasterizationPostDepthCoverage"
vkConservativeRasterizationPostDepthCoverage :: VkBool32
}
deriving (Eq, Show)
instance Storable VkPhysicalDeviceConservativeRasterizationPropertiesEXT where
sizeOf ~_ = 56
alignment ~_ = 8
peek ptr = VkPhysicalDeviceConservativeRasterizationPropertiesEXT <$> 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` 32)
<*> peek (ptr `plusPtr` 36)
<*> peek (ptr `plusPtr` 40)
<*> peek (ptr `plusPtr` 44)
<*> peek (ptr `plusPtr` 48)
poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPhysicalDeviceConservativeRasterizationPropertiesEXT))
*> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPhysicalDeviceConservativeRasterizationPropertiesEXT))
*> poke (ptr `plusPtr` 16) (vkPrimitiveOverestimationSize (poked :: VkPhysicalDeviceConservativeRasterizationPropertiesEXT))
*> poke (ptr `plusPtr` 20) (vkMaxExtraPrimitiveOverestimationSize (poked :: VkPhysicalDeviceConservativeRasterizationPropertiesEXT))
*> poke (ptr `plusPtr` 24) (vkExtraPrimitiveOverestimationSizeGranularity (poked :: VkPhysicalDeviceConservativeRasterizationPropertiesEXT))
*> poke (ptr `plusPtr` 28) (vkPrimitiveUnderestimation (poked :: VkPhysicalDeviceConservativeRasterizationPropertiesEXT))
*> poke (ptr `plusPtr` 32) (vkConservativePointAndLineRasterization (poked :: VkPhysicalDeviceConservativeRasterizationPropertiesEXT))
*> poke (ptr `plusPtr` 36) (vkDegenerateTrianglesRasterized (poked :: VkPhysicalDeviceConservativeRasterizationPropertiesEXT))
*> poke (ptr `plusPtr` 40) (vkDegenerateLinesRasterized (poked :: VkPhysicalDeviceConservativeRasterizationPropertiesEXT))
*> poke (ptr `plusPtr` 44) (vkFullyCoveredFragmentShaderInputVariable (poked :: VkPhysicalDeviceConservativeRasterizationPropertiesEXT))
*> poke (ptr `plusPtr` 48) (vkConservativeRasterizationPostDepthCoverage (poked :: VkPhysicalDeviceConservativeRasterizationPropertiesEXT))
-- | VkPipelineRasterizationConservativeStateCreateInfoEXT - Structure
-- specifying conservative raster state
--
-- == Valid Usage
--
-- - @extraPrimitiveOverestimationSize@ /must/ be in the range of @0.0@
-- to
-- @VkPhysicalDeviceConservativeRasterizationPropertiesEXT@::@maxExtraPrimitiveOverestimationSize@
-- inclusive
--
-- == Valid Usage (Implicit)
--
-- - @sType@ /must/ be
-- @VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT@
--
-- - @flags@ /must/ be @0@
--
-- - @conservativeRasterizationMode@ /must/ be a valid
-- 'VkConservativeRasterizationModeEXT' value
--
-- = See Also
--
-- 'VkConservativeRasterizationModeEXT',
-- 'VkPipelineRasterizationConservativeStateCreateFlagsEXT',
-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
data VkPipelineRasterizationConservativeStateCreateInfoEXT = VkPipelineRasterizationConservativeStateCreateInfoEXT
{ -- | @sType@ is the type of this structure.
vkSType :: VkStructureType
, -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
vkPNext :: Ptr ()
, -- | @flags@ is reserved for future use.
vkFlags :: VkPipelineRasterizationConservativeStateCreateFlagsEXT
, -- | @conservativeRasterizationMode@ is the conservative rasterization mode
-- to use.
vkConservativeRasterizationMode :: VkConservativeRasterizationModeEXT
, -- | @extraPrimitiveOverestimationSize@ is the extra size in pixels to
-- increase the generating primitive during conservative rasterization at
-- each of its edges in @X@ and @Y@ equally in screen space beyond the base
-- overestimation specified in
-- @VkPhysicalDeviceConservativeRasterizationPropertiesEXT@::@primitiveOverestimationSize@.
vkExtraPrimitiveOverestimationSize :: CFloat
}
deriving (Eq, Show)
instance Storable VkPipelineRasterizationConservativeStateCreateInfoEXT where
sizeOf ~_ = 32
alignment ~_ = 8
peek ptr = VkPipelineRasterizationConservativeStateCreateInfoEXT <$> peek (ptr `plusPtr` 0)
<*> peek (ptr `plusPtr` 8)
<*> peek (ptr `plusPtr` 16)
<*> peek (ptr `plusPtr` 20)
<*> peek (ptr `plusPtr` 24)
poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineRasterizationConservativeStateCreateInfoEXT))
*> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineRasterizationConservativeStateCreateInfoEXT))
*> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineRasterizationConservativeStateCreateInfoEXT))
*> poke (ptr `plusPtr` 20) (vkConservativeRasterizationMode (poked :: VkPipelineRasterizationConservativeStateCreateInfoEXT))
*> poke (ptr `plusPtr` 24) (vkExtraPrimitiveOverestimationSize (poked :: VkPipelineRasterizationConservativeStateCreateInfoEXT))