Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Name
VK_KHR_fragment_shading_rate - device extension
VK_KHR_fragment_shading_rate
- Name String
VK_KHR_fragment_shading_rate
- Extension Type
- Device extension
- Registered Extension Number
- 227
- Revision
- 2
- Ratification Status
- Ratified
- Extension and Version Dependencies
Version 1.2 and
VK_KHR_get_physical_device_properties2 or
- Contact
- Extension Proposal
- VK_KHR_fragment_shading_rate
Other Extension Metadata
- Last Modified Date
- 2021-09-30
- Interactions and External Dependencies
- This extension requires SPV_KHR_fragment_shading_rate.
- This extension provides API support for GL_EXT_fragment_shading_rate
- Contributors
- Tobias Hector, AMD
- Guennadi Riguer, AMD
- Matthaeus Chajdas, AMD
- Pat Brown, Nvidia
- Matthew Netsch, Qualcomm
- Slawomir Grajewski, Intel
- Jan-Harald Fredriksen, Arm
- Jeff Bolz, Nvidia
- Arseny Kapoulkine, Roblox
- Contributors to the VK_NV_shading_rate_image specification
- Contributors to the VK_EXT_fragment_density_map specification
Description
This extension adds the ability to change the rate at which fragments are shaded. Rather than the usual single fragment invocation for each pixel covered by a primitive, multiple pixels can be shaded by a single fragment shader invocation.
Up to three methods are available to the application to change the fragment shading rate:
- https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#primsrast-fragment-shading-rate-pipeline, which allows the specification of a rate per-draw.
- https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#primsrast-fragment-shading-rate-primitive, which allows the specification of a rate per primitive, specified during shading.
- https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#primsrast-fragment-shading-rate-attachment, which allows the specification of a rate per-region of the framebuffer, specified in a specialized image attachment.
Additionally, these rates can all be specified and combined in order to adjust the overall detail in the image at each point.
This functionality can be used to focus shading efforts where higher levels of detail are needed in some parts of a scene compared to others. This can be particularly useful in high resolution rendering, or for XR contexts.
This extension also adds support for the SPV_KHR_fragment_shading_rate
extension which enables setting the
primitive fragment shading rate,
and allows querying the final shading rate from a fragment shader.
New Commands
New Structures
Extending
GraphicsPipelineCreateInfo
:Extending
PhysicalDeviceFeatures2
,DeviceCreateInfo
:Extending
PhysicalDeviceProperties2
:Extending
SubpassDescription2
:
New Enums
New Enum Constants
KHR_FRAGMENT_SHADING_RATE_SPEC_VERSION
Extending
AccessFlagBits
:Extending
DynamicState
:Extending
FormatFeatureFlagBits
:Extending
ImageLayout
:Extending
ImageUsageFlagBits
:Extending
PipelineStageFlagBits
:Extending
StructureType
:STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR
STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR
STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_KHR
STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_PROPERTIES_KHR
STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_STATE_CREATE_INFO_KHR
If VK_KHR_format_feature_flags2 is supported:
Version History
Revision 1, 2020-05-06 (Tobias Hector)
- Initial revision
Revision 2, 2021-09-30 (Jon Leech)
- Add interaction with
VK_KHR_format_feature_flags2
tovk.xml
- Add interaction with
See Also
FragmentShadingRateAttachmentInfoKHR
,
FragmentShadingRateCombinerOpKHR
,
PhysicalDeviceFragmentShadingRateFeaturesKHR
,
PhysicalDeviceFragmentShadingRateKHR
,
PhysicalDeviceFragmentShadingRatePropertiesKHR
,
PipelineFragmentShadingRateStateCreateInfoKHR
,
cmdSetFragmentShadingRateKHR
,
getPhysicalDeviceFragmentShadingRatesKHR
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
- cmdSetFragmentShadingRateKHR :: forall io. MonadIO io => CommandBuffer -> ("fragmentSize" ::: Extent2D) -> ("combinerOps" ::: (FragmentShadingRateCombinerOpKHR, FragmentShadingRateCombinerOpKHR)) -> io ()
- getPhysicalDeviceFragmentShadingRatesKHR :: forall io. MonadIO io => PhysicalDevice -> io (Result, "fragmentShadingRates" ::: Vector PhysicalDeviceFragmentShadingRateKHR)
- data FragmentShadingRateAttachmentInfoKHR = FragmentShadingRateAttachmentInfoKHR {}
- data PipelineFragmentShadingRateStateCreateInfoKHR = PipelineFragmentShadingRateStateCreateInfoKHR {}
- data PhysicalDeviceFragmentShadingRateFeaturesKHR = PhysicalDeviceFragmentShadingRateFeaturesKHR {}
- data PhysicalDeviceFragmentShadingRatePropertiesKHR = PhysicalDeviceFragmentShadingRatePropertiesKHR {
- minFragmentShadingRateAttachmentTexelSize :: Extent2D
- maxFragmentShadingRateAttachmentTexelSize :: Extent2D
- maxFragmentShadingRateAttachmentTexelSizeAspectRatio :: Word32
- primitiveFragmentShadingRateWithMultipleViewports :: Bool
- layeredShadingRateAttachments :: Bool
- fragmentShadingRateNonTrivialCombinerOps :: Bool
- maxFragmentSize :: Extent2D
- maxFragmentSizeAspectRatio :: Word32
- maxFragmentShadingRateCoverageSamples :: Word32
- maxFragmentShadingRateRasterizationSamples :: SampleCountFlagBits
- fragmentShadingRateWithShaderDepthStencilWrites :: Bool
- fragmentShadingRateWithSampleMask :: Bool
- fragmentShadingRateWithShaderSampleMask :: Bool
- fragmentShadingRateWithConservativeRasterization :: Bool
- fragmentShadingRateWithFragmentShaderInterlock :: Bool
- fragmentShadingRateWithCustomSampleLocations :: Bool
- fragmentShadingRateStrictMultiplyCombiner :: Bool
- data PhysicalDeviceFragmentShadingRateKHR = PhysicalDeviceFragmentShadingRateKHR {}
- newtype FragmentShadingRateCombinerOpKHR where
- FragmentShadingRateCombinerOpKHR Int32
- pattern FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR :: FragmentShadingRateCombinerOpKHR
- pattern FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR :: FragmentShadingRateCombinerOpKHR
- pattern FRAGMENT_SHADING_RATE_COMBINER_OP_MIN_KHR :: FragmentShadingRateCombinerOpKHR
- pattern FRAGMENT_SHADING_RATE_COMBINER_OP_MAX_KHR :: FragmentShadingRateCombinerOpKHR
- pattern FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_KHR :: FragmentShadingRateCombinerOpKHR
- type KHR_FRAGMENT_SHADING_RATE_SPEC_VERSION = 2
- pattern KHR_FRAGMENT_SHADING_RATE_SPEC_VERSION :: forall a. Integral a => a
- type KHR_FRAGMENT_SHADING_RATE_EXTENSION_NAME = "VK_KHR_fragment_shading_rate"
- pattern KHR_FRAGMENT_SHADING_RATE_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a
Documentation
cmdSetFragmentShadingRateKHR Source #
:: forall io. MonadIO io | |
=> CommandBuffer |
|
-> ("fragmentSize" ::: Extent2D) |
|
-> ("combinerOps" ::: (FragmentShadingRateCombinerOpKHR, FragmentShadingRateCombinerOpKHR)) |
|
-> io () |
vkCmdSetFragmentShadingRateKHR - Set pipeline fragment shading rate and combiner operation dynamically for a command buffer
Description
This command sets the pipeline fragment shading rate and combiner
operation for subsequent drawing commands when drawing using
shader objects,
or when the graphics pipeline is created with
DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR
set in
PipelineDynamicStateCreateInfo
::pDynamicStates
.
Otherwise, this state is specified by the
PipelineFragmentShadingRateStateCreateInfoKHR
values used to create
the currently active pipeline.
Valid Usage
-
If
pipelineFragmentShadingRate
is not enabled,
pFragmentSize->width
must be1
-
If
pipelineFragmentShadingRate
is not enabled,
pFragmentSize->height
must be1
- One of pipelineFragmentShadingRate, primitiveFragmentShadingRate, or attachmentFragmentShadingRate must be enabled
-
If the
primitiveFragmentShadingRate
feature is not enabled,
combinerOps
[0] must beFRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR
-
If the
attachmentFragmentShadingRate
feature is not enabled,
combinerOps
[1] must beFRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR
-
If the
fragmentSizeNonTrivialCombinerOps
limit is not supported, elements of
combinerOps
must be eitherFRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR
orFRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR
-
pFragmentSize->width
must be greater than or equal to1
-
pFragmentSize->height
must be greater than or equal to1
-
pFragmentSize->width
must be a power-of-two value -
pFragmentSize->height
must be a power-of-two value -
pFragmentSize->width
must be less than or equal to4
-
pFragmentSize->height
must be less than or equal to4
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
pFragmentSize
must be a valid pointer to a validExtent2D
structure - Each
element of
combinerOps
must be a validFragmentShadingRateCombinerOpKHR
value -
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was allocated from must support graphics operations - This command must only be called outside of a video coding scope
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was allocated from must be externally synchronized
Command Properties
'
Command Buffer Levels | Render Pass Scope | Video Coding Scope | Supported Queue Types | Command Type |
---|---|---|---|---|
Primary Secondary | Both | Outside | Graphics | State |
See Also
VK_KHR_fragment_shading_rate,
CommandBuffer
,
Extent2D
,
FragmentShadingRateCombinerOpKHR
getPhysicalDeviceFragmentShadingRatesKHR Source #
:: forall io. MonadIO io | |
=> PhysicalDevice |
|
-> io (Result, "fragmentShadingRates" ::: Vector PhysicalDeviceFragmentShadingRateKHR) |
vkGetPhysicalDeviceFragmentShadingRatesKHR - Get available shading rates for a physical device
Description
If pFragmentShadingRates
is NULL
, then the number of fragment
shading rates available is returned in pFragmentShadingRateCount
.
Otherwise, pFragmentShadingRateCount
must point to a variable set by
the user to the number of elements in the pFragmentShadingRates
array,
and on return the variable is overwritten with the number of structures
actually written to pFragmentShadingRates
. If
pFragmentShadingRateCount
is less than the number of fragment shading
rates available, at most pFragmentShadingRateCount
structures will be
written, and INCOMPLETE
will be returned
instead of SUCCESS
, to indicate that not
all the available fragment shading rates were returned.
The returned array of fragment shading rates must be ordered from
largest fragmentSize.width
value to smallest, and each set of fragment
shading rates with the same fragmentSize.width
value must be ordered
from largest fragmentSize.height
to smallest. Any two entries in the
array must not have the same fragmentSize
values.
For any entry in the array, the following rules also apply:
- The value of
fragmentSize.width
must be less than or equal to maxFragmentSize.width. - The value of
fragmentSize.width
must be greater than or equal to1
. - The value of
fragmentSize.width
must be a power-of-two. - The value of
fragmentSize.height
must be less than or equal to maxFragmentSize.height. - The value of
fragmentSize.height
must be greater than or equal to1
. - The value of
fragmentSize.height
must be a power-of-two. - The highest sample count in
sampleCounts
must be less than or equal to maxFragmentShadingRateRasterizationSamples. - The product of
fragmentSize.width
,fragmentSize.height
, and the highest sample count insampleCounts
must be less than or equal to maxFragmentShadingRateCoverageSamples.
Implementations must support at least the following shading rates:
sampleCounts | fragmentSize |
---|---|
SAMPLE_COUNT_1_BIT
|
SAMPLE_COUNT_4_BIT | {2,2} |
SAMPLE_COUNT_1_BIT
|
SAMPLE_COUNT_4_BIT | {2,1} |
~0 | {1,1} |
If
framebufferColorSampleCounts,
includes SAMPLE_COUNT_2_BIT
,
the required rates must also include
SAMPLE_COUNT_2_BIT
.
Note
Including the {1,1} fragment size is done for completeness; it has no actual effect on the support of rendering without setting the fragment size. All sample counts and render pass transforms are supported for this rate.
The returned set of fragment shading rates must be returned in the
native (rotated) coordinate system. For rasterization using render pass
transform
not equal to
SURFACE_TRANSFORM_IDENTITY_BIT_KHR
,
the application must transform the returned fragment shading rates
into the current (unrotated) coordinate system to get the supported
rates for that transform.
Note
For example, consider an implementation returning support for 4x2, but
not 2x4 in the set of supported fragment shading rates. This means that
for transforms
SURFACE_TRANSFORM_ROTATE_90_BIT_KHR
and
SURFACE_TRANSFORM_ROTATE_270_BIT_KHR
,
2x4 is a supported rate, but 4x2 is an unsupported rate.
Valid Usage (Implicit)
-
physicalDevice
must be a validPhysicalDevice
handle
-
pFragmentShadingRateCount
must be a valid pointer to auint32_t
value -
If the value referenced by
pFragmentShadingRateCount
is not0
, andpFragmentShadingRates
is notNULL
,pFragmentShadingRates
must be a valid pointer to an array ofpFragmentShadingRateCount
PhysicalDeviceFragmentShadingRateKHR
structures
Return Codes
See Also
VK_KHR_fragment_shading_rate,
PhysicalDevice
,
PhysicalDeviceFragmentShadingRateKHR
data FragmentShadingRateAttachmentInfoKHR Source #
VkFragmentShadingRateAttachmentInfoKHR - Structure specifying a fragment shading rate attachment for a subpass
Description
If no shading rate attachment is specified, or if this structure is not specified, the implementation behaves as if a valid shading rate attachment was specified with all texels specifying a single pixel per fragment.
Valid Usage
-
If
pFragmentShadingRateAttachment
is notNULL
and itsattachment
member is notATTACHMENT_UNUSED
, itslayout
member must be equal toIMAGE_LAYOUT_GENERAL
orIMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR
-
If
pFragmentShadingRateAttachment
is notNULL
and itsattachment
member is notATTACHMENT_UNUSED
,shadingRateAttachmentTexelSize.width
must be a power of two value -
If
pFragmentShadingRateAttachment
is notNULL
and itsattachment
member is notATTACHMENT_UNUSED
,shadingRateAttachmentTexelSize.width
must be less than or equal to maxFragmentShadingRateAttachmentTexelSize.width -
If
pFragmentShadingRateAttachment
is notNULL
and itsattachment
member is notATTACHMENT_UNUSED
,shadingRateAttachmentTexelSize.width
must be greater than or equal to minFragmentShadingRateAttachmentTexelSize.width -
If
pFragmentShadingRateAttachment
is notNULL
and itsattachment
member is notATTACHMENT_UNUSED
,shadingRateAttachmentTexelSize.height
must be a power of two value -
If
pFragmentShadingRateAttachment
is notNULL
and itsattachment
member is notATTACHMENT_UNUSED
,shadingRateAttachmentTexelSize.height
must be less than or equal to maxFragmentShadingRateAttachmentTexelSize.height -
If
pFragmentShadingRateAttachment
is notNULL
and itsattachment
member is notATTACHMENT_UNUSED
,shadingRateAttachmentTexelSize.height
must be greater than or equal to minFragmentShadingRateAttachmentTexelSize.height -
If
pFragmentShadingRateAttachment
is notNULL
and itsattachment
member is notATTACHMENT_UNUSED
, the quotient ofshadingRateAttachmentTexelSize.width
andshadingRateAttachmentTexelSize.height
must be less than or equal to maxFragmentShadingRateAttachmentTexelSizeAspectRatio -
If
pFragmentShadingRateAttachment
is notNULL
and itsattachment
member is notATTACHMENT_UNUSED
, the quotient ofshadingRateAttachmentTexelSize.height
andshadingRateAttachmentTexelSize.width
must be less than or equal to maxFragmentShadingRateAttachmentTexelSizeAspectRatio
Valid Usage (Implicit)
-
sType
must beSTRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR
-
If
pFragmentShadingRateAttachment
is notNULL
,pFragmentShadingRateAttachment
must be a valid pointer to a validAttachmentReference2
structure
See Also
VK_KHR_fragment_shading_rate,
AttachmentReference2
,
Extent2D
,
StructureType
FragmentShadingRateAttachmentInfoKHR | |
|
Instances
data PipelineFragmentShadingRateStateCreateInfoKHR Source #
VkPipelineFragmentShadingRateStateCreateInfoKHR - Structure specifying parameters controlling the fragment shading rate
Description
If the pNext
chain of
GraphicsPipelineCreateInfo
includes a
PipelineFragmentShadingRateStateCreateInfoKHR
structure, then that
structure includes parameters controlling the pipeline fragment shading
rate.
If this structure is not present, fragmentSize
is considered to be
equal to (1,1), and both elements of combinerOps
are considered to be
equal to FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR
.
Valid Usage (Implicit)
See Also
VK_KHR_fragment_shading_rate,
Extent2D
,
FragmentShadingRateCombinerOpKHR
,
StructureType
PipelineFragmentShadingRateStateCreateInfoKHR | |
|
Instances
data PhysicalDeviceFragmentShadingRateFeaturesKHR Source #
VkPhysicalDeviceFragmentShadingRateFeaturesKHR - Structure indicating support for variable rate fragment shading
Members
This structure describes the following features:
Description
If the PhysicalDeviceFragmentShadingRateFeaturesKHR
structure is
included in the pNext
chain of the
PhysicalDeviceFeatures2
structure passed to
getPhysicalDeviceFeatures2
,
it is filled in to indicate whether each corresponding feature is
supported. PhysicalDeviceFragmentShadingRateFeaturesKHR
can also be
used in the pNext
chain of DeviceCreateInfo
to
selectively enable these features.
Valid Usage (Implicit)
See Also
PhysicalDeviceFragmentShadingRateFeaturesKHR | |
|
Instances
data PhysicalDeviceFragmentShadingRatePropertiesKHR Source #
VkPhysicalDeviceFragmentShadingRatePropertiesKHR - Structure describing variable fragment shading rate limits that can be supported by an implementation
Description
Note
Multiplication of the combiner rates using the fragment width/height in linear space is equivalent to an addition of those values in log2 space. Some implementations inadvertently implemented an addition in linear space due to unclear requirements originating outside of this specification. This resulted in fragmentShadingRateStrictMultiplyCombiner being added. Fortunately, this only affects situations where a rate of 1 in either dimension is combined with another rate of 1. All other combinations result in the exact same result as if multiplication was performed in linear space due to the clamping logic, and the fact that both the sum and product of 2 and 2 are equal. In many cases, this limit will not affect the correct operation of applications.
If the PhysicalDeviceFragmentShadingRatePropertiesKHR
structure is
included in the pNext
chain of the
PhysicalDeviceProperties2
structure passed to
getPhysicalDeviceProperties2
,
it is filled in with each corresponding implementation-dependent
property.
These properties are related to fragment shading rates.
Valid Usage (Implicit)
See Also
VK_KHR_fragment_shading_rate,
Bool32
,
Extent2D
,
SampleCountFlagBits
,
StructureType
PhysicalDeviceFragmentShadingRatePropertiesKHR | |
|
Instances
data PhysicalDeviceFragmentShadingRateKHR Source #
VkPhysicalDeviceFragmentShadingRateKHR - Structure returning information about sample count specific additional multisampling capabilities
Valid Usage (Implicit)
See Also
VK_KHR_fragment_shading_rate,
Extent2D
,
SampleCountFlags
,
StructureType
,
getPhysicalDeviceFragmentShadingRatesKHR
PhysicalDeviceFragmentShadingRateKHR | |
|
Instances
newtype FragmentShadingRateCombinerOpKHR Source #
VkFragmentShadingRateCombinerOpKHR - Control how fragment shading rates are combined
Description
where combine(Axy,Bxy) is the combine operation, and Axy and Bxy are the inputs to the operation.
If
fragmentShadingRateStrictMultiplyCombiner
is FALSE
, using
FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_KHR
with values of 1 for both A
and B in the same dimension results in the value 2 being produced for
that dimension. See the definition of
fragmentShadingRateStrictMultiplyCombiner
for more information.
These operations are performed in a component-wise fashion.
See Also
VK_KHR_fragment_shading_rate,
PipelineFragmentShadingRateEnumStateCreateInfoNV
,
PipelineFragmentShadingRateStateCreateInfoKHR
,
cmdSetFragmentShadingRateEnumNV
,
cmdSetFragmentShadingRateKHR
pattern FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR :: FragmentShadingRateCombinerOpKHR |
|
pattern FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR :: FragmentShadingRateCombinerOpKHR |
|
pattern FRAGMENT_SHADING_RATE_COMBINER_OP_MIN_KHR :: FragmentShadingRateCombinerOpKHR |
|
pattern FRAGMENT_SHADING_RATE_COMBINER_OP_MAX_KHR :: FragmentShadingRateCombinerOpKHR |
|
pattern FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_KHR :: FragmentShadingRateCombinerOpKHR |
|
Instances
pattern KHR_FRAGMENT_SHADING_RATE_SPEC_VERSION :: forall a. Integral a => a Source #
type KHR_FRAGMENT_SHADING_RATE_EXTENSION_NAME = "VK_KHR_fragment_shading_rate" Source #
pattern KHR_FRAGMENT_SHADING_RATE_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a Source #