Skip to content

Latest commit

 

History

History
61 lines (34 loc) · 6.16 KB

what_is_spirv.adoc

File metadata and controls

61 lines (34 loc) · 6.16 KB

SPIR-V とは?

Note

SPIR-V の詳細については、SPIRV-Guide をご覧ください。

SPIR-V は、グラフィックスシェーダステージとコンピュートカーネルのバイナリ中間表現です。Vulkan では、アプリケーションは GLSL や HLSL などの高レベルシェーディング言語でシェーダを書くことができますが、vkCreateShaderModule を使用する際には SPIR-V のバイナリが必要です。Khronos は、SPIR-V とその利点、および表現の高レベルな説明についてのホワイトペーパーを用意しています。また、Vulkan DevDay 2016での2つの素晴らしい Khronos のプレゼンテーションがこちらこちら両方の動画)です。

SPIR-V のインターフェイスと機能

Vulkan には、Vulkan と SPIR-V シェーダとのインターフェイスを定義するセクションがあります。SPIR-V とのインターフェイスは、ほとんどの場合シェーダが一緒にコンパイルされるパイプラインの作成時に使用されます。

SPIR-V は Vulkan だけでなく他のターゲットも持っているため、多くの機能を持っています。Vulkan が必要とする機能については、付録を参照してください。Vulkan のいくつかの拡張機能と機能は、SPIR-V の機能がサポートされているかどうかをチェックするために用意されています。

コンパイラ

glslang

glslang は GLSL、HLSL、ESSL の Khronos リファレンスフロントエンドであり、SPIR-V ジェネレータのサンプルです。GLSL、HLSL、ESSL から SPIR-V を作成するスタンドアロンの glslangValidator を含んでいます。

Shaderc

Google が提供する Vulkan シェーダのコンパイルのためのツール、ライブラリ、テストのコレクションです。SPIRV-Toolsglslang のコア機能をラップした glslc が含まれています。また、Shaderc には、SPIRV-ToolsSPIRV-Cross のコア機能をラップした spvc も含まれています。

Shaderc は両方のツールをスタンドアロンのコマンドラインツール(glslc)とリンク先のライブラリ(libshaderc)としてビルドします。

DXC

what_is_spirv_dxc.png

Clspv

Clspv は、Vulkan のコンピュートシェーダとして使用するために、OpenCL C のサブセットを SPIR-V に変換するプロトタイプコンパイラです。

ツールとエコシステム

SPIR-V を活用するためのツールの豊富なエコシステムがあります。Vulkan SDK では、開発者向けにビルドされパッケージ化されたすべての SPIR-V ツールの概要を紹介しています。

SPIRV-Tools

Khronos SPIRV-Tools プロジェクトは、SPIR-V モジュールを操作するための C および C++ の API とコマンドラインインターフェイスを提供しています。詳細は SPIRV-Guide を参照してください。

SPIRV-Cross

Khronos の SPIRV-Cross プロジェクトは、SPIR-V 上でリフレクションを行い、SPIR-V をディスアセンブルして目的の高レベルシェーディング言語に戻すための実用的なツールとライブラリです。詳しくは、SPIR-V Cross のメイン開発者である Hans Kristian 氏の、SPIR-V Cross のようなツール制作についての2つのプレゼンテーション(2018 Vulkanised動画)と 2019 Vulkanised動画) )をご覧ください。

what_is_spirv_spriv_cross.png

SPIRV-LLVM

Khronos の SPIRV-LLVM プロジェクトは、SPIR-V をサポートする LLVM フレームワークです。これは、LLVM と SPIR-V の双方向コンバータを含むことを目的としています。また、SPIR-V をターゲットとした LLVM ベースのフロントエンドコンパイラの基盤となります。