转换层扩展

有一类扩展的创建仅仅是为了允许转换层以高效的方式映射到 Vulkan。

这包括复制驱动程序难以高效实现的旧版行为。此功能被视为前瞻性,并且有望升级为 KHR 扩展或 Vulkan 核心。

除非转换需要此功能,否则强烈建议开发人员使用替代技术来使用 GPU 实现相同的功能。

VK_EXT_custom_border_color

Vulkan 在核心规范中为 VkSampler 对象提供了透明黑色、不透明黑色和不透明白色 VkBorderColor。OpenGL 和 D3D 都可选择将采样器边框设置为自定义颜色。

VK_EXT_border_color_swizzle

在发布 VK_EXT_custom_border_color 之后,发现某些实现在将使用自定义边框颜色的采样器与组件映射不是恒等映射的图像视图组合时,会出现未定义的行为。

VK_EXT_depth_clip_enable

深度剪切启用功能的指定与 D3D11 和 Vulkan 不同。D3D11 具有 DepthClipEnable (D3D12_RASTERIZER_DESC),而不是 VkPipelineRasterizationStateCreateInfo::depthClampEnable,它仅影响光栅化之前深度值的视口剪切,而不影响 D3D11 图形管线输出合并阶段始终发生的深度钳制。

VK_EXT_depth_clip_control

深度剪切控制功能允许应用程序在 NDC 中使用 OpenGL 深度范围。在 OpenGL 中,它是 [-1, 1],而 Vulkan 的默认值为 [0, 1]。OpenGL 通过 ARB_clip_control 扩展支持剪切控制。

更多信息请参见深度章节

VK_EXT_provoking_vertex

Vulkan 的默认约定是“第一个顶点”作为激发顶点,而 OpenGL 的默认约定是“最后一个顶点”。

VK_EXT_transform_feedback

Vulkan 中可以通过计算着色器完成转换反馈所需的一切。还有一个很好的 Jason Ekstrand 的博客,内容是关于为什么转换反馈很糟糕并且应该避免。

VK_EXT_image_view_min_lod

此扩展提供了 MinLod SPIR-V 限定符的 API 端版本。新值与图像视图关联,旨在与 D3D12 的 SRV ResourceMinLODClamp 参数匹配。使用 MinLod 和类似功能主要是用于稀疏纹理,因为可以根据需要在高分辨率 mip 级别中分页进出。有很多方法可以在 Vulkan 中实现类似的钳制。VkImageView 可以钳制基本级别,但 MinLod 也可以钳制到小数 LOD,并且不必修改基本纹理维度,这可能会简化一些算法。VkSampler 也可以钳制到小数 LOD,但为此目的使用许多唯一的采样器可能不切实际。