Translation Layer Extensions

There is a class of extensions that were only created to allow efficient ways for translation layers to map to Vulkan.

This includes replicating legacy behavior that is challenging for drivers to implement efficiently. This functionality is not considered forward looking, and is not expected to be promoted to a KHR extension or to core Vulkan.

Unless this is needed for translation, it is highly recommended that developers use alternative techniques of using the GPU to achieve the same functionality.

VK_EXT_custom_border_color

Vulkan provides a transparent black, opaque black, and opaque white VkBorderColor for VkSampler objects in the core spec. Both OpenGL and D3D have the option to set the sampler border to be a custom color.

VK_EXT_border_color_swizzle

After the publication of VK_EXT_custom_border_color, it was discovered that some implementations had undefined behavior when combining a sampler that uses a custom border color with image views whose component mapping is not the identity mapping.

VK_EXT_depth_clip_enable

The depth clip enable functionality is specified differently from D3D11 and Vulkan. Instead of VkPipelineRasterizationStateCreateInfo::depthClampEnable, D3D11 has DepthClipEnable (D3D12_RASTERIZER_DESC), which only affects the viewport clip of depth values before rasterization and does not affect the depth clamp that always occurs in the output merger stage of the D3D11 graphics pipeline.

VK_EXT_depth_clip_control

The depth clip control functionality allows the application to use the OpenGL depth range in NDC. In OpenGL it is [-1, 1] as opposed to Vulkan’s default of [0, 1]. Support for clip control was supported in OpenGL via the ARB_clip_control extension.

More info in the depth chapter

VK_EXT_provoking_vertex

Vulkan’s defaults convention for provoking vertex is “first vertex” while OpenGL’s defaults convention is “last vertex”.

VK_EXT_transform_feedback

Everything needed for transform feedback can be done via a compute shader in Vulkan. There is also a great blog by Jason Ekstrand on why transform feedback is terrible and should be avoided.

VK_EXT_image_view_min_lod

This extension provides an API-side version of the MinLod SPIR-V qualifier. The new value is associated with the image view, and is intended to match D3D12’s SRV ResourceMinLODClamp parameter. Using MinLod and similar functionality is primarily intended for sparse texturing since higher resolution mip levels can be paged in and out on demand. There are many ways to achieve a similar clamp in Vulkan. A VkImageView can clamp the base level, but a MinLod can also clamp to a fractional LOD and does not have to modify the base texture dimension, which might simplify some algorithms. VkSampler​s can also clamp to fractional LOD, but using many unique samplers for this purpose might not be practical.