mirror of
https://github.com/status-im/Vulkan-Docs.git
synced 2025-01-12 06:54:14 +00:00
0cc6bba634
* Bump API patch number and header version number to 61 for this update. Github Issues: * Provide alternate length attributes (altlen=) in the XML schema, for those using length attributes to generate code instead of documentation (public issue 555). * Fix erroneous references to `latex:` being used for asciidoc math markup, rather than `latexmath:` (public pull request 556). * Add author ID to XML for Kazan software renderer (public pull request 557). Internal Issues: * Add the <<fundamentals-abi,Application Binary Interface>> section describing platform ABI requirements and recommendations, add examples of function and function pointer declarations to the <<boilerplate-platform-specific-calling-conventions, Platform-Specific Calling Conventions>> section, and remove related language that existed elsewhere in the specification (internal issue 64). * Describe where to document valid usage interactions of chained structures in the style guide, and fix one case now appearing in slink:VkBufferCreateInfo instead of the child slink:VkDedicatedAllocationBufferCreateInfoNV structure (internal issue 715). * Add example to the style guide of describing enumerated types which are empty when the spec is built without relevant extensions enabled, and apply it to existing examples for elink:VkDescriptorSetLayoutCreateFlagBits and elink:VkSubpassDescriptionFlagBits (internal issue 864). * Add a note to the <<fundamentals-validusage-enums, Valid Usage for Enumerated Types>> section that the special values suffixed with etext:_BEGIN_RANGE, etext:_END_RANGE, etext:_RANGE_SIZE and etext:_MAX_ENUM are not part of the API and should: not be used by applications (internal issue 872). * Added note to flink:vkCmdUpdateBuffers explaining the performance penalty for copies done in this way, and why the upper copy limit is what it is (internal issue 952). * Update `VK_KHX_device_group` to split some functionality into the new `VK_KHR_bind_memory2` extension, and rename that functionality (internal issue 969). * Remove *Status* fields from extension appendices, since they are by definition published and complete by the time they reach the public github repository (internal issue 973). Other Issues: * Update Data Format specification dependency to version 1.2 and change references to DF sections accordingly. * Update XML to make the pname:pAllocator parameter of flink:vkRegisterDeviceEventEXT and flink:vkRegisterDisplayEventEXT in the `VK_EXT_display_control` extension as optional. New Extensions: * `VK_KHR_bind_memory2` * `VK_KHR_image_format_list` * `VK_KHR_maintenance2` * `VK_KHR_sampler_ycbcr_conversion`
175 lines
7.0 KiB
Plaintext
175 lines
7.0 KiB
Plaintext
include::meta/VK_EXT_blend_operation_advanced.txt[]
|
|
|
|
*Last Modified Date*::
|
|
2017-06-12
|
|
*Contributors*::
|
|
- Jeff Bolz, NVIDIA
|
|
|
|
This extension adds a number of "`advanced`" blending operations that can:
|
|
be used to perform new color blending operations, many of which are more
|
|
complex than the standard blend modes provided by unextended Vulkan.
|
|
This extension requires different styles of usage, depending on the level of
|
|
hardware support and the feature enable:
|
|
|
|
- If
|
|
slink:VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT::pname:advancedBlendCoherentOperations
|
|
is ename:VK_FALSE, the new blending operations are supported, but a
|
|
memory dependency must: separate each advanced blend operation on a
|
|
given sample.
|
|
ename:VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT is used to
|
|
synchronize reads using advanced blend operations.
|
|
|
|
- If
|
|
slink:VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT::pname:advancedBlendCoherentOperations
|
|
is ename:VK_TRUE, advanced blend operations obey primitive order just
|
|
like basic blend operations.
|
|
|
|
In unextended Vulkan, the set of blending operations is limited, and can: be
|
|
expressed very simply.
|
|
The ename:VK_BLEND_OP_MIN and ename:VK_BLEND_OP_MAX blend operations simply
|
|
compute component-wise minimums or maximums of source and destination color
|
|
components.
|
|
The ename:VK_BLEND_OP_ADD, ename:VK_BLEND_OP_SUBTRACT, and
|
|
ename:VK_BLEND_OP_REVERSE_SUBTRACT modes multiply the source and destination
|
|
colors by source and destination factors and either add the two products
|
|
together or subtract one from the other.
|
|
This limited set of operations supports many common blending operations but
|
|
precludes the use of more sophisticated transparency and blending operations
|
|
commonly available in many dedicated imaging APIs.
|
|
|
|
This extension provides a number of new "`advanced`" blending operations.
|
|
Unlike traditional blending operations using ename:VK_BLEND_OP_ADD, these
|
|
blending equations do not use source and destination factors specified by
|
|
elink:VkBlendFactor.
|
|
Instead, each blend operation specifies a complete equation based on the
|
|
source and destination colors.
|
|
These new blend operations are used for both RGB and alpha components; they
|
|
must: not be used to perform separate RGB and alpha blending (via different
|
|
values of color and alpha elink:VkBlendOp).
|
|
|
|
These blending operations are performed using premultiplied colors, where
|
|
RGB colors can: be considered premultiplied or non-premultiplied by alpha,
|
|
according to the pname:srcPremultiplied and pname:dstPremultiplied members
|
|
of slink:VkPipelineColorBlendAdvancedStateCreateInfoEXT.
|
|
If a color is considered non-premultiplied, the (R,G,B) color components are
|
|
multiplied by the alpha component prior to blending.
|
|
For non-premultiplied color components in the range eq#[0,1]#, the
|
|
corresponding premultiplied color component would have values in the range
|
|
eq#[0 {times} A, 1 {times} A]#.
|
|
|
|
Many of these advanced blending equations are formulated where the result of
|
|
blending source and destination colors with partial coverage have three
|
|
separate contributions: from the portions covered by both the source and the
|
|
destination, from the portion covered only by the source, and from the
|
|
portion covered only by the destination.
|
|
The blend parameter
|
|
slink:VkPipelineColorBlendAdvancedStateCreateInfoEXT::pname:blendOverlap
|
|
can: be used to specify a correlation between source and destination pixel
|
|
coverage.
|
|
If set to ename:VK_BLEND_OVERLAP_CONJOINT_EXT, the source and destination
|
|
are considered to have maximal overlap, as would be the case if drawing two
|
|
objects on top of each other.
|
|
If set to ename:VK_BLEND_OVERLAP_DISJOINT_EXT, the source and destination
|
|
are considered to have minimal overlap, as would be the case when rendering
|
|
a complex polygon tessellated into individual non-intersecting triangles.
|
|
If set to ename:VK_BLEND_OVERLAP_UNCORRELATED_EXT, the source and
|
|
destination coverage are assumed to have no spatial correlation within the
|
|
pixel.
|
|
|
|
In addition to the coherency issues on implementations not supporting
|
|
pname:advancedBlendCoherentOperations, this extension has several
|
|
limitations worth noting.
|
|
First, the new blend operations have a limit on the number of color
|
|
attachments they can: be used with, as indicated by
|
|
slink:VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT::pname:advancedBlendMaxColorAttachments.
|
|
Additionally, blending precision may: be limited to 16-bit floating-point,
|
|
which may: result in a loss of precision and dynamic range for framebuffer
|
|
formats with 32-bit floating-point components, and in a loss of precision
|
|
for formats with 12- and 16-bit signed or unsigned normalized integer
|
|
components.
|
|
|
|
=== New Object Types
|
|
|
|
None.
|
|
|
|
=== New Enum Constants
|
|
|
|
* Extending elink:VkStructureType:
|
|
** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT
|
|
** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT
|
|
** ename:VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT
|
|
|
|
* Extending elink:VkAccessFlagBits:
|
|
** ename:VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT
|
|
|
|
* Extending elink:VkBlendOp:
|
|
** ename:VK_BLEND_OP_ZERO_EXT
|
|
** ename:VK_BLEND_OP_SRC_EXT
|
|
** ename:VK_BLEND_OP_DST_EXT
|
|
** ename:VK_BLEND_OP_SRC_OVER_EXT
|
|
** ename:VK_BLEND_OP_DST_OVER_EXT
|
|
** ename:VK_BLEND_OP_SRC_IN_EXT
|
|
** ename:VK_BLEND_OP_DST_IN_EXT
|
|
** ename:VK_BLEND_OP_SRC_OUT_EXT
|
|
** ename:VK_BLEND_OP_DST_OUT_EXT
|
|
** ename:VK_BLEND_OP_SRC_ATOP_EXT
|
|
** ename:VK_BLEND_OP_DST_ATOP_EXT
|
|
** ename:VK_BLEND_OP_XOR_EXT
|
|
** ename:VK_BLEND_OP_MULTIPLY_EXT
|
|
** ename:VK_BLEND_OP_SCREEN_EXT
|
|
** ename:VK_BLEND_OP_OVERLAY_EXT
|
|
** ename:VK_BLEND_OP_DARKEN_EXT
|
|
** ename:VK_BLEND_OP_LIGHTEN_EXT
|
|
** ename:VK_BLEND_OP_COLORDODGE_EXT
|
|
** ename:VK_BLEND_OP_COLORBURN_EXT
|
|
** ename:VK_BLEND_OP_HARDLIGHT_EXT
|
|
** ename:VK_BLEND_OP_SOFTLIGHT_EXT
|
|
** ename:VK_BLEND_OP_DIFFERENCE_EXT
|
|
** ename:VK_BLEND_OP_EXCLUSION_EXT
|
|
** ename:VK_BLEND_OP_INVERT_EXT
|
|
** ename:VK_BLEND_OP_INVERT_RGB_EXT
|
|
** ename:VK_BLEND_OP_LINEARDODGE_EXT
|
|
** ename:VK_BLEND_OP_LINEARBURN_EXT
|
|
** ename:VK_BLEND_OP_VIVIDLIGHT_EXT
|
|
** ename:VK_BLEND_OP_LINEARLIGHT_EXT
|
|
** ename:VK_BLEND_OP_PINLIGHT_EXT
|
|
** ename:VK_BLEND_OP_HARDMIX_EXT
|
|
** ename:VK_BLEND_OP_HSL_HUE_EXT
|
|
** ename:VK_BLEND_OP_HSL_SATURATION_EXT
|
|
** ename:VK_BLEND_OP_HSL_COLOR_EXT
|
|
** ename:VK_BLEND_OP_HSL_LUMINOSITY_EXT
|
|
** ename:VK_BLEND_OP_PLUS_EXT
|
|
** ename:VK_BLEND_OP_PLUS_CLAMPED_EXT
|
|
** ename:VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT
|
|
** ename:VK_BLEND_OP_PLUS_DARKER_EXT
|
|
** ename:VK_BLEND_OP_MINUS_EXT
|
|
** ename:VK_BLEND_OP_MINUS_CLAMPED_EXT
|
|
** ename:VK_BLEND_OP_CONTRAST_EXT
|
|
** ename:VK_BLEND_OP_INVERT_OVG_EXT
|
|
** ename:VK_BLEND_OP_RED_EXT
|
|
** ename:VK_BLEND_OP_GREEN_EXT
|
|
** ename:VK_BLEND_OP_BLUE_EXT
|
|
|
|
=== New Enums
|
|
|
|
* elink:VkBlendOverlapEXT
|
|
|
|
=== New Structures
|
|
|
|
* slink:VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT
|
|
* slink:VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT
|
|
* slink:VkPipelineColorBlendAdvancedStateCreateInfoEXT
|
|
|
|
=== New Functions
|
|
|
|
None.
|
|
|
|
=== Issues
|
|
|
|
None.
|
|
|
|
=== Version History
|
|
|
|
* Revisions 1-2, 2017-06-12 (Jeff Bolz)
|
|
- Internal revisions
|