Direct3D 11.1 の機能

Direct3D 11.1 では、次の機能が追加されました。この機能は、Windows 8、Windows RT、Windows Server 2012に含まれています。 Direct3D 11.1 の部分的なサポートは、Windows 7 プラットフォーム更新プログラム for Windows 7 を介して Windows 7 および Windows Server 2008 R2 で利用できます。これは、Windows 7 用プラットフォーム更新プログラムを通じて入手できます。

シェーダー トレースとコンパイラの機能強化

Direct3D 11.1 では、シェーダー トレースを使用して、コードが意図したとおりに実行されていることを確認し、そうでない場合は問題を検出して解決できます。 Windows 8 用 Windows ソフトウェア開発キット (SDK) には、HLSL コンパイラの機能強化が含まれています。 シェーダー トレースと HLSL コンパイラは、D3dcompiler_nn.dllで実装されます。

シェーダー トレース API と HLSL コンパイラの機能強化は、次のメソッドと関数で構成されています。

D3dcompiler.lib ライブラリにはD3dcompiler_nn.dllが必要です。 この DLL は、Windows 8の一部ではありません。この DLL は、HLSL コンパイラのFxc.exeコマンドライン バージョンと共に、Windows 8用 Windows SDK の \bin フォルダーにあります。

注意

このライブラリと DLL の組み合わせを開発に使用できますが、この組み合わせを使用する Windows ストア アプリを展開することはできません。 そのため、Windows ストア アプリを配布する前に、HLSL シェーダーをコンパイルする必要があります。 HLSL コンパイル バイナリをディスクに書き込むか、シェーダー BLOB データを含む静的バイト配列を持つヘッダーをコンパイラで生成できます。 ID3DBlob インターフェイスを使用して BLOB データにアクセスします。 Windows ストア アプリを開発するには、 D3DCompile2 または D3DCompileFromFile を呼び出して生の HLSL ソースをコンパイルし、結果の BLOB データを Direct3D にフィードします。

 

Direct3D デバイス共有

Direct3D 11.1 を使用すると、Direct3D 10 API と Direct3D 11 API で基になる 1 つのレンダリング デバイスを使用できます。

この Direct3D 11.1 機能は、次のメソッドとインターフェイスで構成されています。

新しい Direct3D 11.1 の機能と形式のサポートを確認する

Direct3D 11.1 を使用すると、グラフィックス ドライバーがサポートする可能性がある新機能と、デバイスでフォーマットがサポートされる新しい方法をチェックできます。 Microsoft DirectX Graphics Infrastructure (DXGI) 1.2 では、新しい DXGI_FORMAT 値も指定されます。

この Direct3D 11.1 機能は、次の API で構成されます。

HLSL の最小精度を使用する

Windows 8以降、グラフィックス ドライバーは、指定したビット精度以上の精度を使用して、最小精度 HLSL スカラー データ型を実装できます。 HLSL 最小精度シェーダー コードが HLSL 最小精度を実装するハードウェアで使用されている場合は、使用するメモリ帯域幅が少なくなり、その結果、システム電力も少なくなります。

D3D11_FEATURE_SHADER_MIN_PRECISION_SUPPORT値を使用して ID3D11Device::CheckFeatureSupport を呼び出すことで、グラフィックス ドライバーが提供する最小精度サポートを照会できます。 この ID3D11Device::CheckFeatureSupport 呼び出しで、ID3D11Device::CheckFeatureSupport が、ドライバーがピクセル シェーダー ステージやその他のシェーダー ステージでサポートする最小精度レベルで埋めるD3D11_FEATURE_DATA_SHADER_MIN_PRECISION_SUPPORT構造体へのポインターを渡します。 返される情報は、グラフィックス ハードウェアが標準の 32 ビット浮動小数点精度よりも低い精度で HLSL 操作を実行できることを示しているだけですが、グラフィックス ハードウェアが実際に低い精度で実行されることを保証するものではありません。

最小精度を使用しない複数のシェーダーを作成する必要はありません。 代わりに、最小精度のシェーダーを作成し、グラフィックス ドライバーが最小精度をサポートしていないと報告した場合、最小精度変数は完全な 32 ビット精度で動作します。 HLSL 最小精度の詳細については、「 HLSL 最小精度の使用」を参照してください。

HLSL 最小精度シェーダーは、Windows 8より前のオペレーティング システムでは機能しません。

機能レベル 9 以降の HLSL でユーザー クリップ プレーンを指定する

Windows 8以降、HLSL 関数宣言clipplanes 関数属性を使用して、SV_ClipDistanceではなく、機能レベル 9_xおよび機能レベル 10 以上でシェーダーを動作させることができます。 詳細については、「 機能レベル 9 ハードウェアのユーザー クリップ プレーン」を参照してください。

シェーダーがアクセスできるよりも大きな定数バッファーを作成する

Direct3D 11.1 では、シェーダーがアクセスできる最大定数バッファー サイズ (4096 32 ビット*4 コンポーネント定数 – 64 KB) を超える定数バッファーを作成できます。 後で、 たとえば PSSetConstantBuffers または PSSetConstantBuffers1 を使用して、パイプラインにバッファーをバインドするときに、シェーダーが 4096 の制限内に収まるバッファーの範囲を指定できます。

Direct3D 11.1 は、この機能の ID3D11Device::CreateBuffer メソッドを更新します。

レンダー ターゲットで論理操作を使用する

Direct3D 11.1 では、レンダー ターゲットにブレンドするのではなく、論理演算を使用できます。 ただし、ロジック操作と複数のレンダー ターゲット間のブレンドを混在させることはできません。

この Direct3D 11.1 機能は、次の API で構成されます。

サンプル数を強制してラスタライザーの状態を作成する

Direct3D 11.1 では、ラスタライザーの状態を作成するときに強制サンプル数を指定できます。

この Direct3D 11.1 機能は、次の API で構成されます。

注意

サンプル数を 1 以上に強制してレンダリングする場合は、次のガイドラインに従う必要があります。

  • 深度ステンシル ビューはバインドしないでください。
  • 深度テストを無効にします。
  • シェーダーが深度を出力しないことを確認します。
  • レンダー ターゲット ビューがバインドされていて (D3D11_BIND_RENDER_TARGET)、サンプル数を 1 より大きくした場合は、すべてのレンダー ターゲットに 1 つのサンプルのみが含まれるようにします。
  • サンプルの頻度でシェーダーを操作しないでください。 そのため、 ID3D11ShaderReflection::IsSampleFrequencyShader はFALSE を返します。

それ以外の場合、レンダリング動作は未定義です。 深度ステンシルを構成する方法については、「 Depth-Stencil機能の構成」を参照してください。

 

シェーダーを使用してビデオ リソースを処理する

Direct3D 11.1 では、Direct3D シェーダーがそれらのビデオ リソースを処理できるように、ビデオ リソースへのビュー (SRV/RTV/UAV) を作成できます。 基になるビデオ リソースの形式によって、ビューで使用できる形式が制限されます。 DXGI_FORMAT列挙には、新しいビデオ リソース形式の値が含まれています。 これらの DXGI_FORMAT 値は、作成できる有効なビュー形式と、Direct3D 11.1 ランタイムがビューをマップする方法を指定します。 同じサーフェスの異なる部分の複数のビューを作成できます。形式によっては、ビューのサイズが異なる場合があります。

Direct3D 11.1 では、この機能の次のメソッドが更新されます。

共有 Texture2D リソースの延長サポート

Direct3D 11.1 では、作成した Texture2D リソースを特定のリソースの種類と形式と共有できることを保証します。 Texture2D リソースを共有するには、D3D11_RESOURCE_MISC_SHAREDD3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX、またはD3D11_RESOURCE_MISC_SHARED_KEYEDMUTEXとD3D11_RESOURCE_MISC_SHARED_NTHANDLE (Windows 8の新機能) フラグを組み合わせて使用します。

Direct3D 11.1 では、作成した Texture2D リソースを次の DXGI_FORMAT 値と共有できることを保証します。

  • DXGI_FORMAT_R8G8B8A8_UNORM
  • DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
  • DXGI_FORMAT_B8G8R8A8_UNORM
  • DXGI_FORMAT_B8G8R8A8_UNORM_SRGB
  • DXGI_FORMAT_B8G8R8X8_UNORM
  • DXGI_FORMAT_B8G8R8X8_UNORM_SRGB
  • DXGI_FORMAT_R10G10B10A2_UNORM
  • DXGI_FORMAT_R16G16B16A16_FLOAT

さらに、Direct3D 11.1 では、mipmap レベル 1、配列サイズ 1、D3D11_BIND_SHADER_RESOURCEとD3D11_BIND_RENDER_TARGETのバインド フラグ、使用の既定値 (D3D11_USAGE_DEFAULT)、およびこれらのD3D11_RESOURCE_MISC_FLAG値のみを使用して作成した Texture2D リソースを共有できることを保証します。

Direct3D 11.1 では、さまざまな Texture2D リソースの種類と形式を共有できます。 グラフィックス ドライバーとハードウェアが拡張 Texture2D リソース共有をサポートしているかどうかを照会するには、 ID3D11Device::CheckFeatureSupportD3D11_FEATURE_D3D11_OPTIONS 値で呼び出します。 この ID3D11Device::CheckFeatureSupport 呼び出しで、 D3D11_FEATURE_DATA_D3D11_OPTIONS 構造体へのポインターを渡します。 ID3D11Device::CheckFeatureSupport は、ハードウェアとドライバーが拡張 Texture2D リソース共有をサポートしている場合、D3D11_FEATURE_DATA_D3D11_OPTIONSExtendedResourceSharing メンバーを TRUE に設定します。

Id3D11Device::CheckFeatureSupportExtendedResourceSharingTRUE を返す場合は、作成したリソースを次のDXGI_FORMAT値と共有できます。

  • DXGI_FORMAT_R32G32B32A32_TYPELESS
  • DXGI_FORMAT_R32G32B32A32_FLOAT
  • DXGI_FORMAT_R32G32B32A32_UINT
  • DXGI_FORMAT_R32G32B32A32_SINT
  • DXGI_FORMAT_R16G16B16A16_TYPELESS
  • DXGI_FORMAT_R16G16B16A16_FLOAT
  • DXGI_FORMAT_R16G16B16A16_UNORM
  • DXGI_FORMAT_R16G16B16A16_UINT
  • DXGI_FORMAT_R16G16B16A16_SNORM
  • DXGI_FORMAT_R16G16B16A16_SINT
  • DXGI_FORMAT_R10G10B10A2_UNORM
  • DXGI_FORMAT_R10G10B10A2_UINT
  • DXGI_FORMAT_R8G8B8A8_TYPELESS
  • DXGI_FORMAT_R8G8B8A8_UNORM
  • DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
  • DXGI_FORMAT_R8G8B8A8_UINT
  • DXGI_FORMAT_R8G8B8A8_SNORM
  • DXGI_FORMAT_R8G8B8A8_SINT
  • DXGI_FORMAT_B8G8R8A8_TYPELESS
  • DXGI_FORMAT_B8G8R8A8_UNORM
  • DXGI_FORMAT_B8G8R8X8_UNORM
  • DXGI_FORMAT_B8G8R8A8_UNORM_SRGB
  • DXGI_FORMAT_B8G8R8X8_TYPELESS
  • DXGI_FORMAT_B8G8R8X8_UNORM_SRGB
  • DXGI_FORMAT_R32_TYPELESS
  • DXGI_FORMAT_R32_FLOAT
  • DXGI_FORMAT_R32_UINT
  • DXGI_FORMAT_R32_SINT
  • DXGI_FORMAT_R16_TYPELESS
  • DXGI_FORMAT_R16_FLOAT
  • DXGI_FORMAT_R16_UNORM
  • DXGI_FORMAT_R16_UINT
  • DXGI_FORMAT_R16_SNORM
  • DXGI_FORMAT_R16_SINT
  • DXGI_FORMAT_R8_TYPELESS
  • DXGI_FORMAT_R8_UNORM
  • DXGI_FORMAT_R8_UINT
  • DXGI_FORMAT_R8_SNORM
  • DXGI_FORMAT_R8_SINT
  • DXGI_FORMAT_A8_UNORM
  • DXGI_FORMAT_AYUV
  • DXGI_FORMAT_YUY2
  • DXGI_FORMAT_NV12
  • DXGI_FORMAT_NV11
  • DXGI_FORMAT_P016
  • DXGI_FORMAT_P010
  • DXGI_FORMAT_Y216
  • DXGI_FORMAT_Y210
  • DXGI_FORMAT_Y416
  • DXGI_FORMAT_Y410

ID3D11Device::CheckFeatureSupportExtendedResourceSharingTRUE を返す場合は、作成したリソースを次の機能とフラグと共有できます。

注意

ExtendedResourceSharingTRUE の場合、Texture2D リソースを共有するためのバインド フラグを指定する際の柔軟性が向上します。 グラフィックス ドライバーとハードウェアは、より多くのバインド フラグをサポートするだけでなく、バインド フラグの組み合わせもサポートします。 たとえば、バインド フラグを D3D11_BIND_RENDER_TARGET だけ指定したり、バインド フラグを指定したりすることはできません。

 

ID3D11Device::CheckFeatureSupportExtendedResourceSharingTRUE を返した場合でも、作成したリソースを次の機能とフラグで共有することはできません。

新しいコピー オプションを使用してサブリソースを変更する

Direct3D 11.1 では、新しいコピー フラグを使用してサブリソースをコピーおよび更新できます。 サブリソースをコピーする場合、ソースリソースと移行先リソースは同一であり、ソースリージョンと移行先リージョンが重複する可能性があります。

この Direct3D 11.1 機能は、次の API で構成されます。

リソースとリソース ビューを破棄する

Direct3D 11.1 では、デバイス コンテキストからリソースとリソースのビューを破棄できます。 この新しい機能により、リソースまたはリソース ビュー内の既存のコンテンツが不要になったことが GPU に通知されます。

この Direct3D 11.1 機能は、次の API で構成されます。

より多くの UAV をサポートする

Direct3D 11.1 では、 出力マージャー ステージ にリソースをバインドするときや、順序指定されていないリソースのビューの配列を設定するときに、より多くの UAV を使用できます。

Direct3D 11.1 では、この機能の次のメソッドが更新されます。

定数バッファーのサブ範囲をシェーダーにバインドする

Direct3D 11.1 では、シェーダーがアクセスするための定数バッファーのサブ範囲をバインドできます。 より大きな定数バッファーを指定し、シェーダーで使用できるサブ範囲を指定できます。

この Direct3D 11.1 機能は、次の API で構成されます。

シェーダーにバインドされている定数バッファーのサブ範囲を取得する

Direct3D 11.1 では、シェーダーにバインドされている定数バッファーのサブ範囲を取得できます。

この Direct3D 11.1 機能は、次の API で構成されます。

リソース ビューのすべてまたは一部をクリアする

Direct3D 11.1 では、リソース ビュー (RTV、UAV、または Texture2D サーフェスのビデオ ビュー) をクリアできます。 ビューのすべての部分に同じ色の値を適用します。

この Direct3D 11.1 機能は、次の API で構成されます。

NO_OVERWRITEを使用して動的バッファーの SRV をマップする

Direct3D 11.1 では、動的バッファーのシェーダー リソース ビュー (SRV) をD3D11_MAP_WRITE_NO_OVERWRITEでマップできます。 Direct3D 11 以前のランタイムでは、頂点バッファーまたはインデックス バッファーへのマッピングが制限されています。

Direct3D 11.1 は、この機能の ID3D11DeviceContext::Map メソッドを更新します。

すべてのパイプライン ステージで UAV を使用する

Direct3D 11.1 では、ピクセル シェーダーとコンピューティング シェーダーで以前に使用されていたすべてのシェーダー ステージで、次のシェーダー モデル 5.0 命令を使用できます。

Direct3D 11.1 では、この機能の次のメソッドが更新されます。

これらの手順は、ps_5_0とcs_5_0の Direct3D 11.0 に存在しました。 Direct3D 11.1 ではすべてのシェーダー ステージで UAV を使用できるため、これらの手順はすべてのシェーダー ステージで使用できます。

すべての段階で UAV をサポートしていないデバイス (この機能で実装されていない既存のドライバーを含む) で、これらの命令のいずれかを使用するコンパイル済みシェーダー (VS/HS/DS/HS) を CreateVertexShader などの create-shader 関数に渡すと、作成シェーダー関数は失敗します。 シェーダーがハードウェアでサポートされている UAV スロットのセットを超えて UAV スロットを使用しようとすると、シェーダーの作成関数も失敗します。

これらの手順で参照される UAV は、すべてのパイプライン ステージで共有されます。 たとえば、 出力マージャー ステージ でスロット 0 にバインドされている UAV は、スロット 0 から VS/HS/DS/GS/PS に使用できます。

特定の Draw*() 内で実行されるシェーダー ステージ内または複数のシェーダー ステージから発行した UAV アクセス、または Dispatch*() 内のコンピューティング シェーダーから発行した UAV アクセスは、発行した順序で完了する保証はありません。 ただし、すべての UAV アクセスは Draw*() または Dispatch*() の最後に終了します。

WARP デバイスの延長サポート

Direct3D 11.1 はD3D11CreateDeviceDriverType パラメーターに D3D_DRIVER_TYPE_WARPを渡すことによって作成する WARP デバイスのサポートを拡張します。

Direct3D 11.1 WARP デバイスのサポート以降:

WARP デバイスでは、次のオプション機能はサポートされていません。

仮想マシン (VM)、Hyper-V を実行し、グラフィックス処理装置 (GPU) を無効にするか、ディスプレイ ドライバーなしで実行すると、フレンドリ名が "Microsoft Basic Display Adapter" である WARP デバイスが表示されます。この WARP デバイスは、DWM、インターネット エクスプローラー、Windows ストア アプリを含む完全な Windows エクスペリエンスを実行できます。 この WARP デバイスでは、DirectDraw を使用するレガシ アプリの実行や 、Direct3D 3 から Direct3D 11.1 を使用するアプリの実行もサポートされています。

セッション 0 プロセスで Direct3D を使用する

Windows 8とWindows Server 2012以降、ほとんどの Direct3D API をセッション 0 プロセスで使用できます。

注意

これらの出力、ウィンドウ、スワップ チェーン、およびプレゼンテーション関連の API は、セッション 0 環境には適用されないため、セッション 0 プロセスでは使用できません。

セッション 0 プロセスで上記の API のいずれかを呼び出すと、 DXGI_ERROR_NOT_CURRENTLY_AVAILABLEが返されます。

 

機能レベル 9 でのシャドウ バッファーのサポート

Direct3D 10_0 以降のシャドウ バッファー機能のサブセットを使用して、 機能レベル の9_xにシャドウ効果を実装します。 機能レベルの9_xにシャドウ効果を実装するために必要な操作については、「 Direct3D 機能レベル 9 のシャドウ バッファーを実装する」を参照してください。

Direct3D 11 の新機能