Platform SDK: DirectX

DMA サポートのテスト

[C++]

DMA 処理を使用する前に、デバイスに対する DMA サポートをテストする必要がある。デバイスが DMA をサポートしている場合、どの程度のサポートが提供されるのかを調べる。まず、IDirectDraw7::GetCaps メソッドを呼び出してドライバ能力を取得する。次に、関連付けられた DDCAPS 構造体の dwCaps メンバに DDCAPS_CANBLTSYSMEM フラグがあるかどうかを調べる。このフラグが設定されていれば、デバイスが DMA をサポートしていることになる。

通常、DMA がサポートされることがわかると、ドライバが DMA をどの程度サポートするのかも調べなくてはならない。そのためには、システムからビデオ、ビデオからシステム、およびシステムからシステムへのブリット処理についての情報を持つ構造体の他のメンバを調べる。これらの能力は、ブリットとその能力タイプにより名付けられた 12 の DDCAPS 構造体メンバで提供される。次の表でこれらの新メンバを示す。

システムからビデオ ビデオからシステム システムからシステム
dwSVBCaps dwVSBCaps dwSSBCaps
dwSVBCKeyCaps dwVSBCKeyCaps dwSSBCKeyCaps
dwSVBFXCaps dwVSBFXCaps dwSSBFXCaps
dwSVBRops dwVSBRops dwSSBRops

たとえば、システムからビデオへのブリット能力フラグは、dwSVBCapsdwSVBCKeyCapsdwSVBFXCaps、および dwSVBRops メンバにより提供される。同様に、ビデオからシステムへのブリット能力は "dwVSB" で始まる名前のメンバにあり、システムからシステムへのブリット能力は "dwSSB" メンバにある。これらのメンバのフラグを調べると、ブリット カテゴリに対するハードウェア サポートのレベルを決定できる。

これらのメンバにあるフラグは、dwCapsdwCKeyCaps、および dwFXCaps メンバのブリット タイプを考慮したこれらのメンバに含まれるブリット関連フラグと類似している。たとえば、dwSVBCaps メンバには、dwCaps メンバで調べたフラグと同じフラグで指定された一般的なブリット能力が含まれる。同様に、dwSVBRopsdwVSBRops、および dwSSBRops メンバにあるラスタ処理値は、与えられたタイプのブリット処理によりサポートされるラスタ処理についての情報を提供する。

これらのメンバにおける主要機能の 1 つは、非同期 DMA ブリット処理をサポートする。ドライバがサーフェス間の非同期 DMA ブリットをサポートする場合、dwSVBCapsdwVSBCaps、または dwSSBCaps メンバに DDCAPS_BLTQUEUE フラグが設定される (通常、システム メモリからビデオ メモリ サーフェスに対する最良のサポートとなる)。このフラグがこれらのメンバにないと、ドライバでは非同期 DMA ブリット処理をサポートしない。

[Visual Basic]

DMA 処理を使用する前に、デバイスに対する DMA サポートをテストする必要がある。デバイスが DMA をサポートしている場合、どの程度のサポートが提供されるのかを調べる。まず、DirectDraw7.GetCaps メソッドを呼び出してドライバ能力を取得する。次に、関連付けられた DDCAPS 型の lCaps メンバに DDCAPS_CANBLTSYSMEM フラグがあるかどうかを調べる。このフラグが設定されていれば、デバイスが DMA をサポートしていることになる。

通常、DMA がサポートされることがわかると、ドライバが DMA をどの程度サポートするのかも調べなくてはならない。そのためには、システム カラービデオ、ビデオからシステム、およびシステム カラーシステムへのブリット処理についての情報を持つ構造体の他のメンバを調べる。これらの能力は、ブリットとその能力タイプにより名付けられた 12 の DDCAPS 構造体メンバで提供される。次の表でこれらの新メンバを示す。

システムからビデオ ビデオからシステム システムからシステム
lSVBCaps lVSBCaps lSSBCaps
lSVBCKeyCaps lVSBCKeyCaps lSSBCKeyCaps
lSVBFXCaps lVSBFXCaps lSSBFXCaps
lSVBRops lVSBRops lSSBRops

たとえば、システムからビデオへのブリット能力フラグは、lSVBCapslSVBCKeyCapslSVBFXCaps および lSVBRops メンバにより提供される。同様に、ビデオからシステムへのブリット能力は "lVSB" で始まる名前のメンバにあり、システムからシステムへのブリット能力は "lSSB" メンバにある。これらのメンバのフラグを調べると、ブリット カテゴリに対するハードウェア サポートのレベルを決定できる。

これらのメンバにあるフラグは、lCapslCKeyCaps、および lFXCaps メンバのブリット タイプを考慮したこれらのメンバに含まれるブリット関連フラグと類似している。たとえば、lSVBCaps メンバには、lCaps メンバで調べたフラグと同じフラグで指定された一般的なブリット能力が含まれる。同様に、lSVBRopslVSBRops、および lSSBRops メンバにあるラスタ処理値は、与えられたタイプのブリット処理によりサポートされるラスタ処理についての情報を提供する。

これらのメンバにおける主要機能の 1 つは、非同期 DMA ブリット処理をサポートする。ドライバがサーフェス間の非同期 DMA ブリットをサポートする場合、lSVBCapslVSBCaps、または lSSBCaps メンバに DDCAPS_BLTQUEUE フラグが設定される (通常、システム メモリからビデオ メモリ サーフェスに対する最良のサポートとなる)。このフラグがこれらのメンバにないと、ドライバでは非同期 DMA ブリット処理をサポートしない。