mirror of
https://github.com/status-im/Vulkan-Docs.git
synced 2025-01-12 15:04:10 +00:00
64fa8ef4df
* Bump API patch number and header version number to 66 for this update. Github Issues: * Clarified how and when ename:VK_ERROR_TOO_MANY_OBJECTS is generated in flink:vkAllocate Memory, and remove incorrect valid usage statement about exceeding the API limit (public issue 356). * Minor clarification of the description of flink:vkUpdateDescriptorSetWithTemplateKHR::pname:descriptorUpdateTemplate (public issue 564). * Minor fixes for flink:vkCmdSetViewportWScalingNV (public pull request 588). * Fix random name markup issues (public pull request 603). * Fix code:BuiltIn decoration typo in the <<fxvertex-attrib, Vertex Attributes>> section (public pull request 606). * Fix synchronization language following the definition of flink:vkAcquireNextImageKHR (public issue 607). * Restore descriptions of several commands and structures missing from the generated spec due to a mistyped asciidoctor conditional (public issue 612). * Fix 1.0.41 changelog to refer to public issues 403/404 (public issue 618). Internal Issues: * Refactor valid usage statements with internal conditionals in `copies.txt`, `pipelines.txt`, `renderpass.txt`, and `resources.txt` so each branch of the conditional appears as a standalone statement which can contain a separate VUID. This should have no impact on the generated specs, but is necessary given the present state of the VU extractor and the validation layer code that consumes them (internal issue 1043). * Fix VkQueueGlobalPriorityEXT enum values missing _EXT suffix (internal issue 1045). * Clarified initial ownership of resources bound to shared memory objects, (internal issue 1068). * Fix duplicated valid usage ID tag for flink:vkCmdCopyImage, and make the required layouts include ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIONAL in both cases (internal issue 1084). Other Issues: * Remove the noise functions from GLSL for SPIR-V for Vulkan in the `GL_KHR_vulkan_glsl.txt` extension. New Extensions: * `VK_EXT_external_memory_host` * `VK_EXT_external_memory_dma_buf` * `VK_EXT_queue_family_foreign`
100 lines
2.6 KiB
Plaintext
100 lines
2.6 KiB
Plaintext
include::meta/VK_AMD_shader_fragment_mask.txt[]
|
|
|
|
*Last Modified Date*::
|
|
2017-08-16
|
|
*IP Status*::
|
|
No known IP claims.
|
|
*Dependencies*::
|
|
- Requires the
|
|
https://www.khronos.org/registry/spir-v/extensions/AMD/SPV_AMD_fragment_mask.html[+SPV_AMD_fragment_mask+]
|
|
SPIR-V extension.
|
|
*Contributors*::
|
|
- Aaron Hagan, AMD
|
|
- Daniel Rakos, AMD
|
|
- Timothy Lottes, AMD
|
|
|
|
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.
|
|
|
|
The fragment mask can be fetched with a call to code:fragmentMaskFetchAMD
|
|
from a shader, which returns a single code:uint where each subsequent 4 bit
|
|
specifies the color fragment index corresponding to the color sample,
|
|
starting from the least significant bit.
|
|
For example, when 8 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 code:fragmentFetchAMD shader
|
|
function.
|
|
|
|
=== New Object Types
|
|
|
|
None.
|
|
|
|
=== New Enum Constants
|
|
|
|
None.
|
|
|
|
=== New Enums
|
|
|
|
None.
|
|
|
|
=== New SPIR-V Capabilities
|
|
|
|
* <<spirvenv-capabilities-table-shaderfragmentmaskamd,
|
|
code:ShaderFragmentMaskAMD>>
|
|
|
|
=== New Structures
|
|
|
|
None.
|
|
|
|
=== New Functions
|
|
|
|
None.
|
|
|
|
=== Examples
|
|
|
|
This example shows a shader that queries the fragment mask from a
|
|
multisampled compressed surface and uses it to query fragment values.
|
|
|
|
[source,c++]
|
|
----------------------------------------
|
|
#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
|