DirectX 11 (DX11) は、他のプラットフォーム (Metal や OpenGL ES など) ではサポートされていない多くの操作をサポートしています。したがって、DX11 だけの環境を考えるより、サポートが少ないプラットフォームで、シェーダーの動作を明確に定義する必要があります。考慮すべき点は以下のとおりです。
アウトオブバンドのメモリアクセスが悪い点。DX11 は、読み込み時に常にゼロを返し、問題なくデータの一部を読み込むかもしれませんが、サポートが少ないプラットフォームでは、これを行う際に GPU がクラッシュする可能性があります。DX11 特有のハック、スレッドグループサイズの倍数と一致しないバッファサイズ、バッファの先頭や末尾から隣接するデータ要素を読み取ろうとすること、などの同様の非互換性に注意してください。
リソースを初期化する点。新しいバッファとテクスチャの内容は未定義です。プラットフォームの中にはすべてゼロを示すものもありますが、そうでないものでは、NaN を含めどんな値になることもありえます。
コンピュートシェーダーが宣言するすべてのリソースをバインドします。シェーダーが分岐のために現在の状態でリソースを使用しないことが確実にわかっていても、リソースがバインドされていることを確認する必要があります。
GetDimensions クエリもサポートしません。必要な場合は、バッファサイズの情報を定数としてシェーダーに渡します。RWTextures<T> の画像形式修飾子が必要です。| GraphicsFormat | RenderTextureFormat | HLSL 型 | GLSL 画像形式修飾子 |
|---|---|---|---|
| R32G32B32A32_SFloat | ARGBFloat | float4 | rgba32f |
| R16G16B16A16_SFloat | ARGBHalf | min16float4/half4 | rgba16f |
| R32G32_SFloat | RGFloat | float2 | rg32f |
| R16G16_SFloat | RGHalf | min16float2/half2 | rg16f |
| B10G11R11_UFloatPack32 | RGB111110Float | min10float3 | r11f_g11g_b10f |
| R32_SFloat | RFloat | float | r32f |
| R16_SFloat | RHalf | min16float/half | r16f |
| R16G16B16A16_UNorm | ARGB64 | unorm min16float4/half4 | rgba16 |
| A2B10G10R10_UNormPack32 | ARGB2101010 | unorm min10float4 | rgb10_a2 |
| R8G8B8A8_UNorm | ARGB32 | unorm float4 | rgba8 |
| R16G16_UNorm | RG32 | unorm min16float2/half2 | rg16 |
| R8G8_UNorm | RG16 | unorm float2 | rg8 |
| R16_UNorm | R16 | unorm min16float/half | r16 |
| R8_UNorm | R8 | unorm Float | r8 |
| R16G16B16A16_SNorm | サポートなし | snorm min16float4/half4 | rgba16_snorm |
| R8G8B8A8_SNorm | サポートなし | snorm float4 | rgba8_snorm |
| R16G16_SNorm | サポートなし | snorm min16float2/half2 | rg16_snorm |
| R8G8_SNorm | サポートなし | snorm float2 | rg8_snorm |
| R16_SNorm | サポートなし | snorm min16float/half | r16_snorm |
| R8_SNorm | サポートなし | snorm Float | r8_snorm |
| R32G32B32A32_SInt | ARGBInt | int4 | rgba32i |
| R16G16B16A16_SInt | サポートなし | min16int4 | rgba16i |
| R8G8B8A8_SInt | サポートなし | min12int4 | rgba8i |
| R32G32_SInt | RGInt | int2 | rg32i |
| R16G16_SInt | サポートなし | min16int2 | rg16i |
| R8G8_SInt | サポートなし | min12int2 | rg8i |
| R32_SInt | RInt | int | r32i |
| R16_SInt | サポートなし | min16int | r16i |
| R8_SInt | サポートなし | min12int | r8i |
| R32G32B32A32_UInt | サポートなし | uint4 | rgba32i |
| R16G16B16A16_UInt | RGBAUShort | min16uint4 | rgba16ui |
| R8G8B8A8_UInt | サポートなし | サポートなし | rgba8ui |
| R32G32_UInt | サポートなし | uint2 | rg32ui |
| R16G16_UInt | サポートなし | min16uint2 | rg16ui |
| R8G8_UInt | サポートなし | サポートなし | rg8ui |
| R32_UInt | サポートなし | uint | r32ui |
| R16_UInt | サポートなし | min16uint | r16ui |
| R8_UInt | サポートなし | サポートなし | r8ui |
| A2B10G10R10_UIntPack32 | サポートなし | サポートなし | rgb10_a2ui |