| // Copyright (c) 2021 Huawei Technologies Co. Ltd. |
| // |
| // SPDX-License-Identifier: CC-BY-4.0 |
| |
| include::{generated}/meta/{refprefix}VK_HUAWEI_invocation_mask.txt[] |
| |
| === Other Extension Metadata |
| |
| *Last Modified Date*:: |
| 2021-05-27 |
| *Interactions and External Dependencies*:: |
| - This extension requires `apiext:VK_KHR_ray_tracing_pipeline`, which |
| allow to bind an invocation mask image before the ray tracing command |
| - This extension requires `apiext:VK_KHR_synchronization2`, which allows |
| new pipeline stage for the invocation mask image |
| *Contributors*:: |
| - Yunpeng Zhu, HuaWei |
| |
| === Description |
| |
| The rays to trace may be sparse in some use cases. |
| For example, the scene only have a few regions to reflect. |
| Providing an invocation mask image to the ray tracing commands could |
| potentially give the hardware the hint to do certain optimization without |
| invoking an additional pass to compact the ray buffer. |
| |
| include::{generated}/interfaces/VK_HUAWEI_invocation_mask.txt[] |
| |
| === Examples |
| |
| RT mask is updated before each traceRay. |
| |
| Step 1. |
| Generate InvocationMask. |
| |
| [source,c] |
| --------------------------------------------------- |
| //the rt mask image bind as color attachment in the fragment shader |
| Layout(location = 2) out vec4 outRTmask |
| vec4 mask = vec4(x,x,x,x); |
| outRTmask = mask; |
| --------------------------------------------------- |
| |
| Step 2. |
| traceRay with InvocationMask |
| |
| [source,c] |
| --------------------------------------------------- |
| vkCmdBindPipeline( |
| commandBuffers[imageIndex], |
| VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, m_rtPipeline); |
| vkCmdBindDescriptorSets(commandBuffers[imageIndex], |
| VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, |
| m_rtPipelineLayout, 0, 1, &m_rtDescriptorSet, |
| 0, nullptr); |
| |
| vkCmdBindInvocationMaskHUAWEI( |
| commandBuffers[imageIndex], |
| InvocationMaskimageView, |
| InvocationMaskimageLayout); |
| vkCmdTraceRaysKHR(commandBuffers[imageIndex], |
| pRaygenShaderBindingTable, |
| pMissShaderBindingTable, |
| swapChainExtent.width, |
| swapChainExtent.height, 1); |
| --------------------------------------------------- |
| |
| === Version History |
| |
| * Revision 1, 2021-05-27 (Yunpeng Zhu) |
| - Initial draft. |