Microsoft DirectX グラフィックス インフラストラクチャ (DXGI) は、グラフィックスの一部が他の部分よりも遅く進化することを認識しています。 DXGI の主な目標は、DirectX グラフィックス ランタイムに依存しない低レベルのタスクを管理することです。 DXGI は、将来のグラフィックス コンポーネントに共通のフレームワークを提供します。DXGI を利用する最初のコンポーネントは、Microsoft Direct3D 10 です。
以前のバージョンの Direct3D では、ハードウェア デバイスの列挙、レンダリングされたフレームの出力への表示、ガンマの制御、全画面表示の移行の管理などの低レベルのタスクが Direct3D ランタイムに含まれていました。 これらのタスクは DXGI で実装されるようになりました。
DXGI の目的は、次の図に示すように、カーネル モード ドライバーとシステム ハードウェアと通信することです。
アプリケーションは DXGI に直接アクセスするか、D3D11_1.h、D3D11.h、D3D10_1.h、または D3D10.h で Direct3D API を呼び出すことができます。この API は DXGI との通信を自動的に処理します。 アプリケーションでデバイスを列挙したり、出力にデータを表示する方法を制御したりする必要がある場合は、DXGI を直接操作できます。
このトピックは、次のセクションで構成されています。
Direct3D 11 ハードウェアでサポートされている形式を確認するには:
- Direct3D 機能レベル 12.1 ハードウェアの DXGI 形式のサポート
- Direct3D 機能レベル 12.0 ハードウェアの DXGI 形式のサポート
- Direct3D 機能レベル 11.1 ハードウェアの DXGI 形式のサポート
- Direct3D 機能レベル 11.0 ハードウェアの DXGI 形式のサポート
- Direct3D 10Level9 形式のハードウェア サポート
- Direct3D 10.1 形式のハードウェア サポート
- Direct3D 10 形式のハードウェア サポート
アダプターの列挙
アダプターは、ハードウェアとコンピューターのソフトウェア機能の抽象化です。 一般に、コンピューターには多数のアダプターがあります。 一部のデバイスはハードウェア (ビデオ カードなど) に実装され、一部はソフトウェア (Direct3D リファレンス ラスタライザーなど) で実装されます。 アダプターは、グラフィック アプリケーションで使用される機能を実装します。 次の図は、1 台のコンピューター、2 つのアダプター (ビデオ カード)、および 3 つの出力モニターを備えたシステムを示しています。
これらのハードウェアを列挙すると、DXGI は各出力 (またはモニター) の IDXGIOutput1 インターフェイスと各ビデオ カード用の IDXGIAdapter2 インターフェイスを作成します (マザーボードに組み込まれているビデオ カードであっても)。 列挙は、 IDXGIFactory インターフェイス呼び出し IDXGIFactory::EnumAdapters を使用して、ビデオ ハードウェアを表す IDXGIAdapter インターフェイスのセットを返すことによって行われます。
DXGI 1.1 で IDXGIFactory1 インターフェイスが 追加されました。 IDXGIFactory1::EnumAdapters1 は、ビデオ ハードウェアを表す IDXGIAdapter1 インターフェイスのセットを返します。
Direct3D API を使用するときに特定のビデオ ハードウェア機能を選択する場合は、各アダプター ハンドルと可能なハードウェア機能レベルで D3D11CreateDevice または D3D11CreateDeviceAndSwapChain 関数を繰り返し呼び出することをお勧めします。 この関数は、機能レベルが指定されたアダプターでサポートされている場合に成功します。
Windows 8 用アダプターの列挙に関する新しい情報
Windows 8 以降では、"Microsoft Basic Render Driver" と呼ばれるアダプターが常に存在します。 このアダプターには、 0x1414 の VendorId と 0x8c の DeviceID があります。 このアダプターには、DXGI_ADAPTER_DESC2 構造体の Flags メンバーに DXGI_ADAPTER_FLAG_SOFTWARE 値が設定されています。 このアダプターは、表示出力がないレンダリング専用デバイスです。 DXGI はこのアダプターの DXGI_ERROR_DEVICE_REMOVED を返しません。
コンピューターのディスプレイ ドライバーが機能していない場合、または無効になっている場合、コンピューターのプライマリ (NULL) アダプターは "Microsoft Basic Render Driver" とも呼ばれます。ただし、このアダプターには出力があり、 DXGI_ADAPTER_FLAG_SOFTWARE 値が設定されていません。 オペレーティング システムとアプリでは、既定でこのアダプターが使用されます。 ディスプレイ ドライバーがインストールされているか有効になっている場合、アプリはこのアダプターの DXGI_ERROR_DEVICE_REMOVED を受け取ることができ、アダプターをもう一度列挙する必要があります。
コンピューターのプライマリ ディスプレイ アダプターが "Microsoft Basic Display Adapter" (WARP アダプター) の場合、そのコンピューターには 2 つ目のアダプターもあります。 この 2 番目のアダプターは、表示出力がなく、DXGI が DXGI_ERROR_DEVICE_REMOVEDを返さないレンダリング専用デバイスです。
レンダリング、コンピューティング、またはその他の実行時間の長いタスクに WARP を使用する場合は、レンダリング専用デバイスを使用することをお勧めします。 IDXGIFactory1::EnumAdapters1 メソッドを呼び出すことで、レンダリング専用デバイスへのポインターを取得できます。 また、D3D11CreateDevice の DriverType パラメーターにD3D_DRIVER_TYPE_WARPを指定すると、WARP デバイスもレンダリング専用 WARP アダプターを使用するため、レンダリング専用デバイスを作成します。
プレゼンテーション
アプリケーションのジョブは、フレームをレンダリングし、DXGI にそれらのフレームを出力に表示するように要求することです。 アプリケーションで使用可能なバッファーが 2 つある場合は、1 つのバッファーをレンダリングしながら、別のバッファーを表示できます。 アプリケーションでは、フレームのレンダリングにかかる時間やプレゼンテーションに必要なフレーム レートに応じて、2 つ以上のバッファーが必要になる場合があります。 作成されたバッファーのセットは、次に示すようにスワップ チェーンと呼ばれます。
- スワップ チェーンを作成する
- スワップチェーンのケアと供給
- ウィンドウのサイズ変更の処理
- DXGI の出力とサイズの選択
- Full-Screen モードでのデバッグ
- スワップ チェーンの破棄
- 回転モニターの使用
- 切り替えモード
- フルスクリーンパフォーマンスのヒント
- マルチスレッドに関する考慮事項
スワップ チェーンには、1 つのフロント バッファーと 1 つ以上のバック バッファーがあります。 各アプリケーションは、独自のスワップ チェーンを作成します。 データを出力に表示する速度を最大限に高めるために、スワップ チェーンは、次の図に示すように、ほとんどの場合、ディスプレイ サブ システムのメモリ内に作成されます。
ディスプレイ・サブタイプ (ビデオ・カードであることが多いが、マザーボード上に実装される可能性がある) には、GPU、デジタル・to・アナログ・コンバーター (DAC)、およびメモリーが含まれています。 スワップ チェーンは、プレゼンテーションを非常に高速にするために、このメモリ内に割り当てられます。 ディスプレイ・サブタイプは、フロント・バッファー内のデータを出力に表示します。
スワップ チェーンは、全画面表示モードまたはウィンドウモードで描画するように設定されているため、出力がウィンドウモードか全画面表示かを知る必要がなくなります。 全画面表示モードのスワップ チェーンでは、ディスプレイの解像度を切り替えることでパフォーマンスを最適化できます。
スワップ チェーンを作成する
Direct3D 9 と Direct3D 10 の違い: Direct3D 10 は、DXGI を使用する最初のグラフィックス コンポーネントです。 DXGI には、いくつかの異なるスワップ チェーン動作があります。
|
スワップ チェーンのバッファーは、特定のサイズと特定の形式で作成されます。 アプリケーションは起動時にこれらの値を指定し (または、ターゲット ウィンドウからサイズを継承できます)、必要に応じて、ユーザー入力またはプログラム イベントに応じてウィンドウ サイズが変更されるように変更できます。
スワップ チェーンを作成した後、通常はイメージをその中にレンダリングします。 スワップ チェーンにレンダリングする Direct3D コンテキストを設定するコード フラグメントを次に示します。 このコードでは、スワップ チェーンからバッファーを抽出し、そのバッファーから render-target-view を作成してから、デバイスに設定します。
ID3D11Resource * pBB;
ThrowFailure( pSwapChain->GetBuffer(0, __uuidof(pBB),
reinterpret_cast<void**>(&pBB)), "Couldn't get back buffer");
ID3D11RenderTargetView * pView;
ThrowFailure( pD3D11Device->CreateRenderTargetView(pBB, NULL, &pView),
"Couldn't create view" );
pD3D11DeviceContext->OMSetRenderTargets(1, &pView, 0);
アプリケーションがフレームをスワップ チェーン バッファーにレンダリングした後、 IDXGISwapChain1::P resent1 を呼び出します。 その後、アプリケーションは次のイメージをレンダリングできます。
スワップ チェーンの管理とメンテナンス
イメージをレンダリングした後、 IDXGISwapChain1::P resent1 を呼び出して、次のイメージをレンダリングします。 それがあなたの責任の範囲です。
以前に IDXGIFactory::MakeWindowAssociation を呼び出した場合、ユーザーは Alt-Enter キーの組み合わせを押すと、DXGI によってウィンドウ モードと全画面表示モードの間でアプリケーションが切り替わります。 IDXGIFactory::MakeWindowAssociation は、ユーザーの標準的な制御メカニズムが強く必要であるため、推奨されます。
既に説明したコード以上のコードを記述する必要はありませんが、いくつかの簡単な手順でアプリケーションの応答性を高めることができます。 最も重要な考慮事項は、出力ウィンドウのサイズ変更に応じてスワップ チェーンのバッファーのサイズを変更することです。 当然ながら、アプリケーションの最適なルートは、WM_SIZEに応答し、 IDXGISwapChain::ResizeBuffers を呼び出して、メッセージのパラメーターに含まれるサイズを渡すことです。 この動作により、ユーザーがウィンドウの境界線をドラッグしたときにアプリケーションがユーザーに適切に応答することは明らかですが、スムーズな全画面表示の切り替えが可能になるのもまさにその動作です。 このような遷移が発生するたびに、ウィンドウにWM_SIZEメッセージが表示されます。 IDXGISwapChain::ResizeBuffers を呼び出すことは、最適なプレゼンテーションのためにバッファーのストレージを再割り当てするスワップ チェーンの機会です。 このため、アプリケーションは IDXGISwapChain::ResizeBuffers を呼び出す前に、既存のバッファーに対する参照を解放する必要があります。
全画面表示モードへの切り替えに応答して IDXGISwapChain::ResizeBuffers を呼び出さないと (WM_SIZEに応じて)、反転の最適化が妨げられます。DXGI では、全画面表示のデータをコピーするのではなく、表示されているバッファーを単純にスワップできます。
IDXGISwapChain1::P resent1 は、出力ウィンドウが DXGI_STATUS_OCCLUDED経由で完全に隠れているかどうかを通知します。 この場合、フレームのレンダリングに使用されるリソースが無駄になるため、アプリケーションをスタンバイ モードにすることをお勧めします ( idXGISwapChain1::P resent1 を DXGI_PRESENT_TESTで呼び出します)。 DXGI_PRESENT_TESTを使用すると、オクルージョン チェックの実行中にデータが表示されなくなります。 IDXGISwapChain1::P resent1 がS_OKを返したら、スタンバイ モードを終了する必要があります。戻りコードを使用してスタンバイ モードに切り替えないでください。そうすると、スワップ チェーンが全画面表示モードを放棄できなくなる可能性があります。
Windows 8 以降で使用できる Direct3D 11.1 ランタイムは、フリップ モデルスワップ チェーン (つまり、DXGI_SWAP_CHAIN_DESCまたはDXGI_SWAP_CHAIN_DESC1 の SwapEffect メンバーにDXGI_SWAP_EFFECT_FLIP_SEQUENTIAL値が設定されたスワップ チェーン) を提供します。 フリップ モデル スワップ チェーンを使用して出力にフレームを表示すると、DXGI は、出力マージャー レンダー ターゲットなど、バック バッファー 0 への書き込みのすべてのパイプライン状態の場所からバック バッファーをバインド解除します。 そのため、バック バッファーにレンダリングする直前に ID3D11DeviceContext::OMSetRenderTargets を呼び出することをお勧めします。 たとえば、 OMSetRenderTargets を呼び出し、最終的にリソースにレンダリングされないコンピューティング シェーダーの処理を実行しないでください。 フリップ モデル スワップ チェーンとその利点の詳細については、「 DXGI Flip Model」を参照してください。
注
Direct3D 10 と Direct3D 11 では、IDXGISwapChain1::Present1 を呼び出した後に IDXGISwapChain::GetBuffer を呼び出してバック バッファー 0 を取得する必要はありません。これは、利便性のためにバック バッファーの ID が変更されるためです。 これは Direct3D 12 では発生しません。代わりに、アプリケーションでバック バッファー インデックスを手動で追跡する必要があります。
ウィンドウのサイズ変更の処理
IDXGISwapChain::ResizeBuffers メソッドを使用して、ウィンドウのサイズ変更を処理できます。 ResizeBuffers を呼び出す前に、スワップ チェーンのバッファーへの未処理の参照をすべて解放する必要があります。 通常、スワップ チェーンのバッファーへの参照を保持するオブジェクトは、レンダー ターゲット ビューです。
次のコード例は、WM_SIZE メッセージに対して WindowProc ハンドラー内から ResizeBuffers を呼び出す方法を示しています。
case WM_SIZE:
if (g_pSwapChain)
{
g_pd3dDeviceContext->OMSetRenderTargets(0, 0, 0);
// Release all outstanding references to the swap chain's buffers.
g_pRenderTargetView->Release();
HRESULT hr;
// Preserve the existing buffer count and format.
// Automatically choose the width and height to match the client rect for HWNDs.
hr = g_pSwapChain->ResizeBuffers(0, 0, 0, DXGI_FORMAT_UNKNOWN, 0);
// Perform error handling here!
// Get buffer and create a render-target-view.
ID3D11Texture2D* pBuffer;
hr = g_pSwapChain->GetBuffer(0, __uuidof( ID3D11Texture2D),
(void**) &pBuffer );
// Perform error handling here!
hr = g_pd3dDevice->CreateRenderTargetView(pBuffer, NULL,
&g_pRenderTargetView);
// Perform error handling here!
pBuffer->Release();
g_pd3dDeviceContext->OMSetRenderTargets(1, &g_pRenderTargetView, NULL );
// Set up the viewport.
D3D11_VIEWPORT vp;
vp.Width = width;
vp.Height = height;
vp.MinDepth = 0.0f;
vp.MaxDepth = 1.0f;
vp.TopLeftX = 0;
vp.TopLeftY = 0;
g_pd3dDeviceContext->RSSetViewports( 1, &vp );
}
return 1;
DXGI の出力とサイズの選択
既定では、DXGI は、ウィンドウのほとんどのクライアント領域を含む出力を選択します。 これは、ALT キーを押しながら Enter キーを押して全画面表示になる場合に、DXGI で使用できる唯一のオプションです。 アプリケーションが単独で全画面表示モードに移行することを選択した場合は、 IDXGISwapChain::SetFullscreenState を呼び出し、明示的な IDXGIOutput1 を渡すことができます (アプリケーションが DXGI で決定できる場合は NULL)。
全画面表示またはウィンドウ表示の間に出力のサイズを変更するには、 IDXGISwapChain::ResizeTarget を呼び出することをお勧めします。このメソッドはターゲット ウィンドウのサイズも変更するためです。 ターゲット ウィンドウのサイズが変更されるため、オペレーティング システムは WM_SIZEを送信し、コードは応答として IDXGISwapChain::ResizeBuffers を自然に呼び出します。 そのため、バッファーのサイズを変更し、その後ターゲットのサイズを変更するのは無駄です。
全画面表示モードでのデバッグ
DXGI スワップ チェーンは、絶対に必要な場合にのみ全画面表示モードを放棄します。 つまり、デバッグ ウィンドウがスワップ チェーンのターゲット ウィンドウと重なっていない限り、複数のモニターを使用して全画面表示アプリケーションをデバッグできます。 または、 DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH フラグを設定しないことで、モード切り替えを完全に防ぐことができます。
モード切り替えが許可されている場合、スワップ チェーンは、出力ウィンドウが別のウィンドウによって隠されるたびに全画面表示モードを放棄します。 オクルージョン チェックは 、IDXGISwapChain1::P resent1 中、またはアプリケーションが応答しなくなったかどうかを監視することを目的とする別のスレッドによって実行されます ( IDXGISwapChain1::P resent1 を呼び出さなくなりました)。 切り替えを行う別のスレッドの機能を無効にするには、次のレジストリ キーをゼロ以外の値に設定します。
HKCU\Software\Microsoft\DXGI\DisableFullscreenWatchdog
スワップ チェーンの破棄
スワップ チェーンを全画面表示モードで解放することはできません。これを行うとスレッドの競合が発生する可能性があるためです (DXGI が連続できない例外を発生させます)。 スワップ チェーンを解放する前に、まずウィンドウ モードに切り替えて ( IDXGISwapChain::SetFullscreenState( FALSE, NULL )) してから 、IUnknown::Release を呼び出します。
回転モニターの使用
アプリケーションはモニターの向きについて心配する必要はありません。DXGI は、必要に応じて、プレゼンテーション中にスワップ チェーン バッファーをローテーションします。 もちろん、この追加のローテーションはパフォーマンスに影響を与える可能性があります。 最適なパフォーマンスを得るために、次の手順を実行して、アプリケーションのローテーションを処理します。
- DXGI_SWAP_CHAIN_FLAG_NONPREROTATEDを使ってください。 これにより、アプリケーションが回転画像を生成することを DXGI に通知します (たとえば、プロジェクション マトリックスを変更するなど)。 注意すべき点の 1 つは、このフラグが有効なのは全画面表示モードの場合のみです。
- 各スワップ チェーン バッファーを回転サイズで割り当てます。 必要に応じて、 IDXGIOutput::GetDesc を使用してこれらの値を取得します。
アプリケーションでローテーションを実行することで、DXGI はコピーと回転の代わりに単にコピーを実行します。
Windows 8 以降で使用できる Direct3D 11.1 ランタイムは、フリップ モデルのスワップ チェーン (つまり、DXGI_SWAP_CHAIN_DESC1 の SwapEffect メンバーにDXGI_SWAP_EFFECT_FLIP_SEQUENTIAL値が設定されたスワップ チェーン) を提供します。 フリップ モデル スワップ チェーンで使用できるプレゼンテーションの最適化を最大化するには、コンテンツが出力を完全に占有している場合に、コンテンツが存在する特定の出力に合わせてコンテンツの向きをアプリケーションに設定することをお勧めします。 フリップ モデル スワップ チェーンとその利点の詳細については、「 DXGI Flip Model」を参照してください。
切り替えモード
DXGI スワップ チェーンは、全画面表示の切り替えを行うときに出力の表示モードを変更する場合があります。 自動表示モードの変更を有効にするには、スワップ チェーンの説明で DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH を指定する必要があります。 表示モードが自動的に変更された場合、DXGI は最も控えめなモードを選択します (サイズと解像度は変更されませんが、色の深さが変わる可能性があります)。 スワップ チェーン バッファーのサイズを変更しても、モード 切り替えは発生しません。 スワップ チェーンは、ターゲット出力でサポートされている表示モードと完全に一致するバック バッファーを選択すると、その出力で全画面表示モードに入ったときにその表示モードに切り替わるという暗黙的な約束を行います。 したがって、バック バッファーのサイズと形式を選択して、表示モードを選択します。
全画面表示のパフォーマンスに関するヒント
全画面表示アプリケーションで IDXGISwapChain1::Present1 を呼び出すと、スワップ チェーンはバック バッファーの内容をフロント バッファーにフリップします(ブリットではなく)。 そのためには、スワップ チェーンが列挙表示モード ( DXGI_SWAP_CHAIN_DESC1 で指定) を使用して作成されている必要があります。 表示モードを列挙できない場合、または説明で表示モードを誤って指定した場合、スワップ チェーンは代わりにビット ブロック転送 (bitblt) を実行する可能性があります。 bitblt は、追加のストレッチ コピーとビデオ メモリ使用量の増加を引き起こし、検出が困難になります。 この問題を回避するには、スワップ チェーンを作成する前に、表示モードを列挙し、スワップ チェーンの説明を正しく初期化します。 これにより、全画面表示モードで反転するときのパフォーマンスが最大になり、余分なメモリ オーバーヘッドが回避されます。
マルチスレッドに関する考慮事項
複数のスレッドを持つアプリケーションで DXGI を使用する場合は、2 つの異なるスレッドが互いに完了を待機しているデッドロックが発生しないように注意する必要があります。 これが発生する可能性がある状況は 2 つあります。
- レンダリング スレッドはメッセージ ポンプ スレッドではありません。
- DXGI API を実行しているスレッドは、ウィンドウを作成したスレッドと同じではありません。
全画面表示のスワップ チェーンを使用するときに、メッセージ ポンプ スレッドがレンダー スレッドで待機しないように注意してください。 たとえば、(レンダリング スレッドから) IDXGISwapChain1::P resent1 を呼び出すと、レンダリング スレッドがメッセージ ポンプ スレッドで待機する可能性があります。 モードの変更が発生した場合、 Present1 が ::SetWindowPos() または ::SetWindowStyle() を呼び出し、これらのメソッドのいずれかが ::SendMessage() を呼び出す場合、このシナリオが可能になります。 このシナリオでは、メッセージ ポンプ スレッドに重要なセクションが保護されている場合、またはレンダリング スレッドがブロックされている場合、2 つのスレッドがデッドロックします。
複数のスレッドで DXGI を使用する方法の詳細については、 マルチスレッドと DXGI に関するページを参照してください。
DLLMain からの DXGI 応答
DllMain 関数は DLL の読み込みとアンロードの順序を保証できないため、オブジェクトを作成または解放する関数やメソッドを含め、アプリの DllMain 関数は Direct3D または DXGI 関数またはメソッドを呼び出さないことをお勧めします。 アプリの DllMain 関数が特定のコンポーネントを呼び出す場合、そのコンポーネントはオペレーティング システムに存在しない別の DLL を呼び出す可能性があります。これにより、オペレーティング システムがクラッシュします。 Direct3D と DXGI は、コンピューターごとに異なる一連の DLL (通常はドライバーのセット) を読み込む場合があります。 そのため、 DllMain 関数が Direct3D または DXGI 関数またはメソッドを呼び出すときに、開発用コンピューターやテスト コンピューターでアプリがクラッシュしない場合でも、別のコンピューターで実行するとクラッシュする可能性があります。
オペレーティング システムがクラッシュする可能性があるアプリを作成しないようにするために、DXGI は指定された状況で次の応答を提供します。
- アプリの DllMain 関数が DXGI ファクトリへの最後の参照を解放すると、DXGI によって例外が発生します。
- アプリの DllMain 関数によって DXGI ファクトリが作成された場合、DXGI はエラー コードを返します。
DXGI 1.1 の変更
DXGI 1.1 で次の機能を追加しました。
同期共有サーフェスのサポート
Direct3D 10.1 と Direct3D 11 の同期された共有サーフェスにより、複数の Direct3D デバイス間で効率的な読み取りと書き込みのサーフェス共有が可能になります (Direct3D 10 と Direct3D 11 デバイス間での共有が可能です)。 IDXGIKeyedMutex::AcquireSync と IDXGIKeyedMutex::ReleaseSync を参照してください。
ハイカラーサポート
DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM形式をサポートします。
IDXGIDevice1::SetMaximumFrameLatency と IDXGIDevice1::GetMaximumFrameLatency
IDXGIFactory1::EnumAdapters1 は、モニターまたは出力がアタッチされていないローカル アダプターと、出力がアタッチされたアダプターを列挙します。 最初に返されるアダプターは、デスクトップ プライマリが表示されるローカル アダプターです。
BGRA 形式のサポート
DXGI_FORMAT_B8G8R8A8_UNORMおよびDXGI_FORMAT_B8G8R8A8_UNORM_SRGBは、 IDXGISurface1::GetDC と IDXGISurface1::ReleaseDC を参照してください。
DXGI 1.2 の変更
DXGI 1.2 で次の機能を追加しました。
- ステレオ スワップ チェーン
- フリップ モデル スワップ チェーン
- 最適化されたプレゼンテーション (スクロール、ダーティ四角形、回転)
- 共有リソースと同期の強化
- デスクトップの複製
- ビデオ メモリの使用の最適化
- ピクセルあたり 16 ビット (bpp) 形式 (DXGI_FORMAT_B5G6R5_UNORM、DXGI_FORMAT_B5G5R5A1_UNORM、DXGI_FORMAT_B4G4R4A4_UNORM) のサポート
- API のデバッグ
DXGI 1.2 の詳細については、「 DXGI 1.2 の機能強化」を参照してください。
アプリケーションの互換性
DXGI では、アプリケーションの互換性を強化するために、アプリケーションの動作の変更を適用できます。
- 互換性設定は、
HKCU\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\AppCompatFlags\Layersのユーザー レジストリに格納できます。 - 互換性設定は、システム構成やその他の要因によって適用される場合と適用されない場合があります。
- アプリケーション互換性設定値の例が
DXAllowModeChangeOnLaunch720。