Vulkan-Docs/doc/specs/vulkan/appendices/VK_AMD_shader_fragment_mask.txt
Jon Leech 64fa8ef4df Change log for November 27, 2017 Vulkan 1.0.66 spec update:
* 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`
2017-11-27 01:07:06 -08:00

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