Class HUAWEIInvocationMask


  • public class HUAWEIInvocationMask
    extends java.lang.Object
    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.
    Examples

    RT mask is updated before each traceRay.

    Step 1. Generate InvocationMask.

    
     //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

    
     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);
    VK_HUAWEI_invocation_mask
    Name String
    VK_HUAWEI_invocation_mask
    Extension Type
    Device extension
    Registered Extension Number
    371
    Revision
    1
    Extension and Version Dependencies
    Contact
    Extension Proposal
    VK_HUAWEI_invocation_mask
    Other Extension Metadata
    Last Modified Date
    2021-05-27
    Interactions and External Dependencies
    Contributors
    • Yunpeng Zhu, HuaWei
    • Field Detail

      • VK_HUAWEI_INVOCATION_MASK_SPEC_VERSION

        public static final int VK_HUAWEI_INVOCATION_MASK_SPEC_VERSION
        The extension specification version.
        See Also:
        Constant Field Values
      • VK_HUAWEI_INVOCATION_MASK_EXTENSION_NAME

        public static final java.lang.String VK_HUAWEI_INVOCATION_MASK_EXTENSION_NAME
        The extension name.
        See Also:
        Constant Field Values
      • VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI

        public static final int VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI
        Extends VkStructureType.
        See Also:
        Constant Field Values
      • VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI

        public static final long VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI
        Extends VkAccessFlagBits2.
        See Also:
        Constant Field Values
      • VK_IMAGE_USAGE_INVOCATION_MASK_BIT_HUAWEI

        public static final int VK_IMAGE_USAGE_INVOCATION_MASK_BIT_HUAWEI
        Extends VkImageUsageFlagBits.
        See Also:
        Constant Field Values
      • VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI

        public static final long VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI
        Extends VkPipelineStageFlagBits2.
        See Also:
        Constant Field Values
    • Method Detail

      • vkCmdBindInvocationMaskHUAWEI

        public static void vkCmdBindInvocationMaskHUAWEI​(org.lwjgl.vulkan.VkCommandBuffer commandBuffer,
                                                         long imageView,
                                                         int imageLayout)
        Bind an invocation mask image on a command buffer.
        C Specification

        When invocation mask image usage is enabled in the bound ray tracing pipeline, the pipeline uses an invocation mask image specified by the command:

        
         void vkCmdBindInvocationMaskHUAWEI(
             VkCommandBuffer                             commandBuffer,
             VkImageView                                 imageView,
             VkImageLayout                               imageLayout);
        Valid Usage
        Valid Usage (Implicit)
        • commandBuffer must be a valid VkCommandBuffer handle
        • If imageView is not NULL_HANDLE, imageView must be a valid VkImageView handle
        • imageLayout must be a valid VkImageLayout value
        • commandBuffer must be in the recording state
        • The VkCommandPool that commandBuffer was allocated from must support compute operations
        • This command must only be called outside of a render pass instance
        • Both of commandBuffer, and imageView that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice
        Host Synchronization
        • Host access to commandBuffer must be externally synchronized
        • Host access to the VkCommandPool that commandBuffer was allocated from must be externally synchronized
        Command Properties
        Command Buffer LevelsRender Pass ScopeSupported Queue Types
        Primary SecondaryOutsideCompute
        Parameters:
        commandBuffer - the command buffer into which the command will be recorded
        imageView - an image view handle specifying the invocation mask image imageView may be set to NULL_HANDLE, which is equivalent to specifying a view of an image filled with ones value.
        imageLayout - the layout that the image subresources accessible from imageView will be in when the invocation mask image is accessed