When and Why to use Extensions -- Translation Layer Extensions

张开发
2026/5/17 13:20:40 15 分钟阅读
When and Why to use Extensions -- Translation Layer Extensions
有一类扩展仅为让translation layer能高效映射到 Vulkan 而创建。这类扩展包含复现传统 API 行为的功能这些行为对驱动而言难以高效实现。此类功能不属于面向未来的设计不会被晋升为 KHR 扩展或 Vulkan 核心功能。除非是为了兼容翻译否则强烈建议开发者使用 GPU 的替代方案来实现相同功能。VK_EXT_custom_border_colorVulkan 核心规范为VkSampler对象提供透明黑、不透明黑、不明白三种VkBorderColor。OpenGL 与 D3D 均支持将采样器边框设置为自定义颜色。VK_EXT_border_color_swizzleVK_EXT_custom_border_color发布后发现部分实现中使用自定义边框颜色的采样器与分量映射非单位映射的image view搭配使用时会出现未定义行为。VK_EXT_depth_clip_enable深度裁剪启用功能在 D3D11 与 Vulkan 中的定义不同。D3D11 使用DepthClipEnableD3D12_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_vertexVulkan 默认的 provoking vertex 约定是 “第一个顶点”而 OpenGL 默认是 “最后一个顶点”。VK_EXT_transform_feedbackVulkan 中transform feedback 所需的全部功能都可通过 compute shader 实现。Jason Ekstrand 有一篇知名博客详细说明为何 transform feedback 设计不佳且应尽量避免。VK_EXT_image_view_min_lod该扩展在 API 层面提供MinLodSPIR‑V 限定符的对应能力。新值与image view关联用于匹配 D3D12 的 SRV 参数ResourceMinLODClamp。使用MinLod等功能主要面向稀疏纹理因为更高分辨率的 mip 层级可按需调入 / 调出。Vulkan 中有多种方式实现类似钳制VkImageView可钳制基础层级但MinLod可钳制到小数 LOD且无需修改基础纹理尺寸可简化部分算法。VkSampler也可钳制到小数 LOD但为此创建大量独立采样器往往不实用。

更多文章