Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Name
VK_AMD_shader_fragment_mask - device extension
VK_AMD_shader_fragment_mask
- Name String
VK_AMD_shader_fragment_mask
- Extension Type
- Device extension
- Registered Extension Number
- 138
- Revision
- 1
- Extension and Version Dependencies
- Requires support for Vulkan 1.0
- Contact
Other Extension Metadata
- Last Modified Date
- 2017-08-16
- IP Status
- No known IP claims.
- Interactions and External Dependencies
- This extension requires SPV_AMD_shader_fragment_mask
- This extension provides API support for GL_AMD_shader_fragment_mask
- Contributors
- Aaron Hagan, AMD
- Daniel Rakos, AMD
- Timothy Lottes, AMD
Description
This extension provides efficient read access to the fragment mask in compressed multisampled color surfaces. The fragment mask is a lookup table that associates color samples with color fragment values.
From a shader, the fragment mask can be fetched with a call to
fragmentMaskFetchAMD
, which returns a single uint
where each
subsequent four bits specify the color fragment index corresponding to
the color sample, starting from the least significant bit. For example,
when eight color samples are used, the color fragment index for color
sample 0 will be in bits 0-3 of the fragment mask, for color sample 7
the index will be in bits 28-31.
The color fragment for a particular color sample may then be fetched
with the corresponding fragment mask value using the fragmentFetchAMD
shader function.
New Enum Constants
New SPIR-V Capabilities
Examples
This example shows a shader that queries the fragment mask from a multisampled compressed surface and uses it to query fragment values.
#version 450 core #extension GL_AMD_shader_fragment_mask: enable layout(binding = 0) uniform sampler2DMS s2DMS; layout(binding = 1) uniform isampler2DMSArray is2DMSArray; layout(binding = 2, input_attachment_index = 0) uniform usubpassInputMS usubpassMS; layout(location = 0) out vec4 fragColor; void main() { vec4 fragOne = vec4(0.0); uint fragMask = fragmentMaskFetchAMD(s2DMS, ivec2(2, 3)); uint fragIndex = (fragMask & 0xF0) >> 4; fragOne += fragmentFetchAMD(s2DMS, ivec2(2, 3), 1); fragMask = fragmentMaskFetchAMD(is2DMSArray, ivec3(2, 3, 1)); fragIndex = (fragMask & 0xF0) >> 4; fragOne += fragmentFetchAMD(is2DMSArray, ivec3(2, 3, 1), fragIndex); fragMask = fragmentMaskFetchAMD(usubpassMS); fragIndex = (fragMask & 0xF0) >> 4; fragOne += fragmentFetchAMD(usubpassMS, fragIndex); fragColor = fragOne; }
Version History
Revision 1, 2017-08-16 (Aaron Hagan)
- Initial draft
See Also
No cross-references are available
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.
Documentation
type AMD_SHADER_FRAGMENT_MASK_SPEC_VERSION = 1 Source #
pattern AMD_SHADER_FRAGMENT_MASK_SPEC_VERSION :: forall a. Integral a => a Source #
type AMD_SHADER_FRAGMENT_MASK_EXTENSION_NAME = "VK_AMD_shader_fragment_mask" Source #
pattern AMD_SHADER_FRAGMENT_MASK_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a Source #