Integrating variable rate shading using Vulkan
As we mentioned in the previous section, the fragment shading rate functionality is provided through the VK_KHR_fragment_shading_rate
extension. As with other option extensions, make sure the device you are using supports it before calling the related APIs.
Vulkan provides three methods to control the shading rate:
- Per draw
- Per primitive
- Using an image attachment for a render pass
To use a custom shading rate per draw, there are two options. We can pass a VkPipelineFragmentShadingRateStateCreateInfoKHR
structure when creating a pipeline, or we can call vkCmdSetFragmentShadingRateKHR
at runtime.
This approach is useful when we know in advance that some draws can be performed at a lower rate without affecting quality. This could include the sky or objects we know are far away from the camera.
It’s also possible to provide a shading rate per primitive. This is accomplished by populating the PrimitiveShadingRateKHR...