変換レイヤを Vulkan に効率的にマッピングするために作成された拡張機能のクラスがあります。
この拡張機能には、ドライバが効率的に実装することが困難なレガシーな動作の複製も含まれます。この機能は将来を見据えたものではなく、KHR 拡張またはコア Vulkan に昇格することは ありません。
これが変換に必要でない限り、同じ機能を実現する別の手法を使用することを強くお勧めします。
Vulkan は、コア仕様で VkSampler
オブジェクトに透明な黒、不透明な黒、不透明な白の VkBorderColor
を提供します。 OpenGL と D3D の両方に、サンプラの境界線をカスタムカラーに設定するオプションがあります。
VK_EXT_custom_border_color
の公開後、カスタムボーダー色を使用するサンプラと、コンポーネントマッピングが ID マッピングでないイメージビューを組み合わせた場合、一部の実装で未定義の動作が発生することが発見されました。
深度クリップ有効化機能は、D3D11 と Vulkan で仕様が異なります。VkPipelineRasterizationStateCreateInfo::depthClampEnable
の代わりに、D3D11 には DepthClipEnable (D3D12_RASTERIZER_DESC) があり、これはラスタライズ前の深度値のビューポートクリップのみに影響し、D3D11 グラフィックパイプラインの出力マージステージで常に発生する深度クランプには影響しないようになっています。
深度クリップ制御機能により、アプリケーションは NDC で OpenGL の深度範囲を使用することができます。Vulkan のデフォルトである [0, 1]
に対し、OpenGL では [-1, 1]
です。クリップ制御の対応は、ARB_clip_control 拡張機能を介して OpenGL でサポートされていました。
詳細は depth chapterをご覧ください。
Vulkan のデフォルトでは、provoking vertex の規約は「最初の頂点」であり、OpenGL のデフォルトでは「最後の頂点」となっています。
変換フィードバックに必要なことはすべて、Vulkan のコンピュートシェーダで行うことができます。また、変換フィードバックを避けるべき理由についてのJason Ekstrand による素晴らしいブログもあります。
この拡張機能は、MinLod
SPIR-V 修飾子の API 側バージョンを提供します。
新しい値はイメージビューに関連付けられ、D3D12 の SRV ResourceMinLODClamp パラメータと一致するように意図されています。
MinLod と同様の機能を使用することは、より高い解像度のミップレベルをオンデマンドでページイン/アウトすることができるため、主にスパーステクスチャリングのために用意されています。
Vulkan で同様のクランプを実現する方法はたくさんあります。VkImageView
はベースレベルをクランプすることができますが、MinLod
はフラクショナル LOD にクランプすることもでき、ベーステクスチャの次元を変更する必要がないため、いくつかのアルゴリズムを単純化できるかもしれません。VkSampler
もフラクショナル LOD にクランプできますが、この目的のために多くのユニークなサンプラーを使用することは現実的ではないかもしれません。