DirectX12 とHLSL Shader Model 5.x, 6.x

Shader Model
https://github.com/microsoft/DirectXShaderCompiler/wiki/Shader-Model
DXC リポジトリの wiki. 各 SM の機能概要がまとまっていて分かりやすい

HLSL でのリソース バインド
https://docs.microsoft.com/ja-jp/windows/win32/direct3d12/resource-binding-in-hlsl

Programming guide for HLSL
https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-pguide

HLSL Shader Model 6.4
https://docs.microsoft.com/ja-jp/windows/win32/direct3dhlsl/hlsl-shader-model-6-4-features-for-direct

2019年8月現在 Shader Model は 6.4 まで上がっており、近いうちに Shader Model 6.5 が出ると噂されています。大変ですが更新に付いていかないといけないです。

DirecrX Shader Compiler

Shader Model 5.x は 5.1 で終了。従来は fxc という仕組みが使われてきましたが、Shader Model 6.0 からは新しく dxc (DirectX Shader Compiler) の仕組みに置き換わりました。
https://github.com/microsoft/DirectXShaderCompiler/wiki/Shader-Model-6.0

Register Space

Root Signature の作成
https://docs.microsoft.com/ja-jp/windows/win32/direct3d12/creating-a-root-signature

この中で Root Signature に対して register space を指定している箇所がある。CD3DX12_DESCRIPTOR_RANGE1 の Init の第4引数で space がある。デフォルトは 0 だが、ここを 2 とかにした場合は register(t0, space2); と定義する。

SM5.0 までは、使用するリソースを論理的なレジスタスロットに register(t0) のような記述でバインドしていたが、SM5.1 からは論理的なレジスタスロットの空間を指定できる。それが space キーワード。

Texture2D

Texture2D texData : register(t0) という書き方は標準では、
Texture2D<float4> texData : register(t0) になっている。UAV の場合は型は必要だが、SRV の場合は無くても良い。明示的に指定する場合は、Texture2D<uint4> texData と指定する。

Texture Object
https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-to-type

Texture2D Array

Texture2D<float4> tex1[4] : register(t3) と指定すると t3, t4, t5, t6 が使われる。

Shader Model 6.4

DirectML のリリースと合わせて、HLSL に機械学習系の命令が追加されました。ただ DirectML は HLSL の記述は必要ないので、DirectML 用途という訳ではありません。

Resource Binding Space

今まで Resource バインドのスロット番号の重複は許可されていないが、Shader Model 5.1 からは、space が異なれば同じ番号が使えるようになった。(space 番号は Root Signature で設定)

Texture2D g_tex0 : register(t0);
Texture2D g_tex1[100] : register(t1);
Texture2D g_tex2 : register(t0, space1);
SamplerState g_sampler : register(s0);

Raytracing

DirectX Raytracing 命令は Shader Model 6.3 でサポートされた。

コメントを残す

メールアドレスが公開されることはありません。