| // Copyright 2020-2021 The Khronos Group Inc. |
| // |
| // SPDX-License-Identifier: CC-BY-4.0 |
| |
| include::{generated}/meta/{refprefix}VK_EXT_fragment_density_map2.txt[] |
| |
| === Other Extension Metadata |
| |
| *Last Modified Date*:: |
| 2020-06-16 |
| *Interactions and External Dependencies*:: |
| - Interacts with Vulkan 1.1 |
| *Contributors*:: |
| - Matthew Netsch, Qualcomm Technologies, Inc. |
| - Jonathan Tinkham, Qualcomm Technologies, Inc. |
| - Jonathan Wicks, Qualcomm Technologies, Inc. |
| - Jan-Harald Fredriksen, ARM |
| |
| === Description |
| |
| This extension adds additional features and properties to |
| `apiext:VK_EXT_fragment_density_map` in order to reduce fragment density map |
| host latency as well as improved queries for subsampled sampler |
| implementation-dependent behavior. |
| |
| include::{generated}/interfaces/VK_EXT_fragment_density_map.txt[] |
| |
| === Version History |
| |
| * Revision 1, 2020-06-16 (Matthew Netsch) |
| - Initial version |
| |
| ifdef::isrefpage[] |
| === Examples |
| |
| ==== Additional limits for subsampling |
| |
| Some implementations may not support subsampled samplers if certain |
| implementation limits are not observed by the app. |
| slink:VkPhysicalDeviceFragmentDensityMap2PropertiesEXT provides additional |
| limits to require apps remain within these boundaries if they wish to use |
| subsampling. |
| |
| ==== Improved host latency |
| |
| By default, the fragment density map is locked by the host for reading |
| between flink:vkCmdBeginRenderPass during recording and |
| ename:VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT during draw |
| execution. |
| |
| This can introduce large latency for certain use cases between recording the |
| frame and displaying the frame. |
| Apps may wish to modify the fragment density map just before draw execution. |
| |
| ename:VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DEFERRED_BIT_EXT is intended |
| to help address this for implementations that do not support the |
| <<features-fragmentdensitymapdynamic,fragmentDensityMapDynamic>> feature by |
| deferring the start of the locked range to flink:vkEndCommandBuffer. |
| |
| |
| [source,c++] |
| ---------------------------------------- |
| // Create view for fragment density map |
| VkImageViewCreateInfo createInfo = |
| { |
| VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, |
| // ... |
| VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DEFERRED_BIT_EXT, |
| fdmImage, // Created with VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT |
| // ... |
| }; |
| |
| // ... |
| |
| // Begin fragment density map render pass with deferred view. |
| // By default, fdmImage must not be modified after this call |
| // unless view is created with the FDM dynamic or deferred flags. |
| vkCmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents); |
| |
| // ... |
| |
| vkCmdEndRenderPass(VkCommandBuffer commandBuffer); |
| |
| // Can keep making modifications to deferred fragment density maps |
| // while recording commandBuffer ... |
| |
| result = vkEndCommandBuffer(commandBuffer); |
| |
| // Must now freeze modifying fdmImage until after the |
| // VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT of |
| // the last executing draw that uses the fdmImage in the |
| // last submit of commandBuffer. |
| |
| ---------------------------------------- |
| endif::isrefpage[] |