vulkan-3.26.1: Bindings to the Vulkan graphics API.
Safe HaskellSafe-Inferred
LanguageHaskell2010

Vulkan.Extensions.VK_EXT_conservative_rasterization

Description

Name

VK_EXT_conservative_rasterization - device extension

VK_EXT_conservative_rasterization

Name String
VK_EXT_conservative_rasterization
Extension Type
Device extension
Registered Extension Number
102
Revision
1
Ratification Status
Not ratified
Extension and Version Dependencies
VK_KHR_get_physical_device_properties2 or Version 1.1
Contact

Other Extension Metadata

Last Modified Date
2020-06-09
Interactions and External Dependencies
Contributors
  • Daniel Koch, NVIDIA
  • Daniel Rakos, AMD
  • Jeff Bolz, NVIDIA
  • Slawomir Grajewski, Intel
  • Stu Smith, Imagination Technologies

Description

This extension adds a new rasterization mode called conservative rasterization. There are two modes of conservative rasterization; overestimation and underestimation.

When overestimation is enabled, if any part of the primitive, including its edges, covers any part of the rectangular pixel area, including its sides, then a fragment is generated with all coverage samples turned on. This extension allows for some variation in implementations by accounting for differences in overestimation, where the generating primitive size is increased at each of its edges by some sub-pixel amount to further increase conservative pixel coverage. Implementations can allow the application to specify an extra overestimation beyond the base overestimation the implementation already does. It also allows implementations to either cull degenerate primitives or rasterize them.

When underestimation is enabled, fragments are only generated if the rectangular pixel area is fully covered by the generating primitive. If supported by the implementation, when a pixel rectangle is fully covered the fragment shader input variable builtin called FullyCoveredEXT is set to true. The shader variable works in either overestimation or underestimation mode.

Implementations can process degenerate triangles and lines by either discarding them or generating conservative fragments for them. Degenerate triangles are those that end up with zero area after the rasterizer quantizes them to the fixed-point pixel grid. Degenerate lines are those with zero length after quantization.

New Structures

New Enums

New Bitmasks

New Enum Constants

New Built-In Variables

New SPIR-V Capabilities

Version History

  • Revision 1.1, 2020-09-06 (Piers Daniell)

    • Add missing SPIR-V and GLSL dependencies.
  • Revision 1, 2017-08-28 (Piers Daniell)

    • Internal revisions

See Also

ConservativeRasterizationModeEXT, PhysicalDeviceConservativeRasterizationPropertiesEXT, PipelineRasterizationConservativeStateCreateFlagsEXT, PipelineRasterizationConservativeStateCreateInfoEXT

Document Notes

For more information, see the Vulkan Specification

This page is a generated document. Fixes and changes should be made to the generator scripts, not directly.

Synopsis

Documentation

data PhysicalDeviceConservativeRasterizationPropertiesEXT Source #

VkPhysicalDeviceConservativeRasterizationPropertiesEXT - Structure describing conservative raster properties that can be supported by an implementation

Description

If the PhysicalDeviceConservativeRasterizationPropertiesEXT structure is included in the pNext chain of the PhysicalDeviceProperties2 structure passed to getPhysicalDeviceProperties2, it is filled in with each corresponding implementation-dependent property.

Valid Usage (Implicit)

See Also

VK_EXT_conservative_rasterization, Bool32, StructureType

Constructors

PhysicalDeviceConservativeRasterizationPropertiesEXT 

Fields

  • primitiveOverestimationSize :: Float

    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 :: Float

    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 :: Float

    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 :: Bool

    primitiveUnderestimation is TRUE if the implementation supports the CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT conservative rasterization mode in addition to CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT. Otherwise the implementation only supports CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT.

  • conservativePointAndLineRasterization :: Bool

    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 :: Bool

    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 :: Bool

    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 :: Bool

    fullyCoveredFragmentShaderInputVariable is TRUE if the implementation supports the SPIR-V builtin fragment shader input variable FullyCoveredEXT specifying that conservative rasterization is enabled and the fragment area is fully covered by the generating primitive.

  • conservativeRasterizationPostDepthCoverage :: Bool

    conservativeRasterizationPostDepthCoverage is TRUE if the implementation supports conservative rasterization with the PostDepthCoverage execution mode enabled. Otherwise the PostDepthCoverage execution mode must not be used when conservative rasterization is enabled.

Instances

Instances details
Storable PhysicalDeviceConservativeRasterizationPropertiesEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_conservative_rasterization

Show PhysicalDeviceConservativeRasterizationPropertiesEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_conservative_rasterization

Eq PhysicalDeviceConservativeRasterizationPropertiesEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_conservative_rasterization

FromCStruct PhysicalDeviceConservativeRasterizationPropertiesEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_conservative_rasterization

ToCStruct PhysicalDeviceConservativeRasterizationPropertiesEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_conservative_rasterization

Zero PhysicalDeviceConservativeRasterizationPropertiesEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_conservative_rasterization

data PipelineRasterizationConservativeStateCreateInfoEXT Source #

VkPipelineRasterizationConservativeStateCreateInfoEXT - Structure specifying conservative raster state

Description

If this structure is not included in the pNext chain, conservativeRasterizationMode is considered to be CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT, and and conservative rasterization is disabled.

Polygon rasterization can be made conservative by setting conservativeRasterizationMode to CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT or CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT in PipelineRasterizationConservativeStateCreateInfoEXT.

Note

If conservativePointAndLineRasterization is supported, conservative rasterization can be applied to line and point primitives, otherwise it must be disabled.

Valid Usage (Implicit)

See Also

VK_EXT_conservative_rasterization, ConservativeRasterizationModeEXT, PipelineRasterizationConservativeStateCreateFlagsEXT, StructureType

Constructors

PipelineRasterizationConservativeStateCreateInfoEXT 

Fields

Instances

Instances details
Storable PipelineRasterizationConservativeStateCreateInfoEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_conservative_rasterization

Show PipelineRasterizationConservativeStateCreateInfoEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_conservative_rasterization

Eq PipelineRasterizationConservativeStateCreateInfoEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_conservative_rasterization

FromCStruct PipelineRasterizationConservativeStateCreateInfoEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_conservative_rasterization

ToCStruct PipelineRasterizationConservativeStateCreateInfoEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_conservative_rasterization

Zero PipelineRasterizationConservativeStateCreateInfoEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_conservative_rasterization

newtype PipelineRasterizationConservativeStateCreateFlagsEXT Source #

VkPipelineRasterizationConservativeStateCreateFlagsEXT - Reserved for future use

Description

PipelineRasterizationConservativeStateCreateFlagsEXT is a bitmask type for setting a mask, but is currently reserved for future use.

See Also

VK_EXT_conservative_rasterization, PipelineRasterizationConservativeStateCreateInfoEXT

Instances

Instances details
Storable PipelineRasterizationConservativeStateCreateFlagsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_conservative_rasterization

Bits PipelineRasterizationConservativeStateCreateFlagsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_conservative_rasterization

Methods

(.&.) :: PipelineRasterizationConservativeStateCreateFlagsEXT -> PipelineRasterizationConservativeStateCreateFlagsEXT -> PipelineRasterizationConservativeStateCreateFlagsEXT #

(.|.) :: PipelineRasterizationConservativeStateCreateFlagsEXT -> PipelineRasterizationConservativeStateCreateFlagsEXT -> PipelineRasterizationConservativeStateCreateFlagsEXT #

xor :: PipelineRasterizationConservativeStateCreateFlagsEXT -> PipelineRasterizationConservativeStateCreateFlagsEXT -> PipelineRasterizationConservativeStateCreateFlagsEXT #

complement :: PipelineRasterizationConservativeStateCreateFlagsEXT -> PipelineRasterizationConservativeStateCreateFlagsEXT #

shift :: PipelineRasterizationConservativeStateCreateFlagsEXT -> Int -> PipelineRasterizationConservativeStateCreateFlagsEXT #

rotate :: PipelineRasterizationConservativeStateCreateFlagsEXT -> Int -> PipelineRasterizationConservativeStateCreateFlagsEXT #

zeroBits :: PipelineRasterizationConservativeStateCreateFlagsEXT #

bit :: Int -> PipelineRasterizationConservativeStateCreateFlagsEXT #

setBit :: PipelineRasterizationConservativeStateCreateFlagsEXT -> Int -> PipelineRasterizationConservativeStateCreateFlagsEXT #

clearBit :: PipelineRasterizationConservativeStateCreateFlagsEXT -> Int -> PipelineRasterizationConservativeStateCreateFlagsEXT #

complementBit :: PipelineRasterizationConservativeStateCreateFlagsEXT -> Int -> PipelineRasterizationConservativeStateCreateFlagsEXT #

testBit :: PipelineRasterizationConservativeStateCreateFlagsEXT -> Int -> Bool #

bitSizeMaybe :: PipelineRasterizationConservativeStateCreateFlagsEXT -> Maybe Int #

bitSize :: PipelineRasterizationConservativeStateCreateFlagsEXT -> Int #

isSigned :: PipelineRasterizationConservativeStateCreateFlagsEXT -> Bool #

shiftL :: PipelineRasterizationConservativeStateCreateFlagsEXT -> Int -> PipelineRasterizationConservativeStateCreateFlagsEXT #

unsafeShiftL :: PipelineRasterizationConservativeStateCreateFlagsEXT -> Int -> PipelineRasterizationConservativeStateCreateFlagsEXT #

shiftR :: PipelineRasterizationConservativeStateCreateFlagsEXT -> Int -> PipelineRasterizationConservativeStateCreateFlagsEXT #

unsafeShiftR :: PipelineRasterizationConservativeStateCreateFlagsEXT -> Int -> PipelineRasterizationConservativeStateCreateFlagsEXT #

rotateL :: PipelineRasterizationConservativeStateCreateFlagsEXT -> Int -> PipelineRasterizationConservativeStateCreateFlagsEXT #

rotateR :: PipelineRasterizationConservativeStateCreateFlagsEXT -> Int -> PipelineRasterizationConservativeStateCreateFlagsEXT #

popCount :: PipelineRasterizationConservativeStateCreateFlagsEXT -> Int #

FiniteBits PipelineRasterizationConservativeStateCreateFlagsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_conservative_rasterization

Read PipelineRasterizationConservativeStateCreateFlagsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_conservative_rasterization

Show PipelineRasterizationConservativeStateCreateFlagsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_conservative_rasterization

Eq PipelineRasterizationConservativeStateCreateFlagsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_conservative_rasterization

Ord PipelineRasterizationConservativeStateCreateFlagsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_conservative_rasterization

Zero PipelineRasterizationConservativeStateCreateFlagsEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_conservative_rasterization

newtype ConservativeRasterizationModeEXT Source #

VkConservativeRasterizationModeEXT - Specify the conservative rasterization mode

See Also

VK_EXT_conservative_rasterization, PipelineRasterizationConservativeStateCreateInfoEXT, cmdSetConservativeRasterizationModeEXT

Bundled Patterns

pattern CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT :: ConservativeRasterizationModeEXT

CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT specifies that conservative rasterization is disabled and rasterization proceeds as normal.

pattern CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT :: ConservativeRasterizationModeEXT

CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT specifies that conservative rasterization is enabled in overestimation mode.

pattern CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT :: ConservativeRasterizationModeEXT

CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT specifies that conservative rasterization is enabled in underestimation mode.

Instances

Instances details
Storable ConservativeRasterizationModeEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_conservative_rasterization

Read ConservativeRasterizationModeEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_conservative_rasterization

Show ConservativeRasterizationModeEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_conservative_rasterization

Eq ConservativeRasterizationModeEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_conservative_rasterization

Ord ConservativeRasterizationModeEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_conservative_rasterization

Zero ConservativeRasterizationModeEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_conservative_rasterization

type EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME = "VK_EXT_conservative_rasterization" Source #