PFND3D10DDI_RESOURCECOPYREGION コールバック関数 (d3d10umddi.h)

ResourceCopyRegion 関数は、ソース サブリソース領域をコピー先サブリソース上の場所にコピーします。

構文

PFND3D10DDI_RESOURCECOPYREGION Pfnd3d10ddiResourcecopyregion;

void Pfnd3d10ddiResourcecopyregion(
  D3D10DDI_HDEVICE unnamedParam1,
  D3D10DDI_HRESOURCE unnamedParam2,
  UINT unnamedParam3,
  UINT unnamedParam4,
  UINT unnamedParam5,
  UINT unnamedParam6,
  D3D10DDI_HRESOURCE unnamedParam7,
  UINT unnamedParam8,
  const D3D10_DDI_BOX *unnamedParam9
)
{...}

パラメーター

unnamedParam1

hDevice [in]

ディスプレイ デバイス (グラフィックス コンテキスト) へのハンドル。

unnamedParam2

hDstResource [in]

コピー先のリソースへのハンドル。

unnamedParam3

DstSubresource [in]

コピー先のサブリソースを示すインデックス。

unnamedParam4

DstX [in]

変換先サブリソースの x 座標。

unnamedParam5

DstY [in]

変換先サブリソースの y 座標。 1 次元 (1-D) サブリソースの場合、 DstY は 0 に設定されます。

unnamedParam6

DstZ [in]

変換先サブリソースの z 座標。 1 次元 (1-D) および 2 次元 (2-D) サブリソースの場合、 DstZ は 0 に設定されます。

unnamedParam7

hSrcResource [in]

コピー元のソース リソースへのハンドル。

unnamedParam8

SrcSubresource [in]

コピー元のサブリソースを示すインデックス。

unnamedParam9

pSrcBox [in, optional]

ソースまたはコピー先のサブリソースのいずれかに適合するボックスを指定する D3D10_DDI_BOX構造体への ポインター。 pSrcBoxNULL の場合、ドライバーはソース サブリソース全体をコピー先にコピーする必要があります。

D3D10_DDI_BOX構造体のメンバーが left>=righttop>=bottom、front>=back などの場合、pSrcBox は空と見なされ、ResourceCopyRegion はコピー操作を実行できません。

戻り値

なし

解説

ドライバーは 、pfnSetErrorCb コールバック関数を使用してエラー コードを設定できます。

Microsoft Direct3D ランタイムは、ユーザー モードディスプレイ ドライバーの ResourceCopyRegion 関数を呼び出して、指定したソース サブリソース リージョンから指定したターゲット サブリソース上の場所にコピーするようにドライバーに通知します。 ソースと宛先のサブリソースを、同じリソースの同じサブリソースにすることはできません。 ソース リソースと変換先リソースの両方が同じ種類のリソースであり、互いに変換可能な形式の種類 (DXGI_FORMAT型指定の値) を持っている必要があります。

バッファーの場合、すべての座標はバイト単位である必要があります。テクスチャの場合、すべての座標はピクセル単位である必要があります。 pSrcBox パラメーターが指すボックスは、ソース サブリソース領域またはコピー先サブリソースの端を越えて拡張することはできません。 ソースリソースと移行先リソースを現在マップすることはできません。 さらに、リソース作成フラグは、リソースがコピー操作に参加できるかどうかを制限します。

D3DDDIERR_DEVICEREMOVEDを除き、ドライバーでエラーが発生しないようにする必要があります。 したがって、 ドライバーが pfnSetErrorCb 関数の呼び出しで、D3DDDIERR_DEVICEREMOVEDを除くエラーを渡した場合、Direct3D ランタイムはエラーが重要であると判断します。 デバイスが削除された場合でも、ドライバーはD3DDDIERR_DEVICEREMOVEDを返す必要はありません。ただし、デバイスの削除が ResourceCopyRegion の操作に干渉した場合 (通常は実行しないでください)、ドライバーはD3DDDIERR_DEVICEREMOVEDを返すことができます。

メモ 以降のセクションは、Microsoft Direct3D バージョン 10.1 以降 (Windows Vista Service Pack 1 (SP1) 以降、および Windows Server 2008 以降) にのみ適用されます。
 
ドライバーは、コピーと変換を処理する switch ステートメントを含めることができる ResourceCopyRegion 関数を実装できます。 つまり、ドライバーは 1 つの ResourceCopyRegion を実装でき、D3D10_1DDI_DEVICEFUNCSの pfnResourceCopyRegion メンバーと共に ResourceCopyRegion を指すD3D10_1DDI_DEVICEFUNCS構造体の pfnResourceConvertRegion メンバーを設定できます。 ただし、パフォーマンスを向上させるために、ドライバーは個別の ResourceCopyRegion 関数と ResourceConvertRegion 関数 実装できます。

Direct3D 10.1 バージョンの ResourceCopyRegion には、ドライバーの CreateResource(D3D10) 関数の呼び出しで作成されたソースリソースと移行先リソースのD3D10DDIARG_CREATERESOURCEの ResourceDimension メンバーに関して、Direct3D 10.0 バージョンと大きな機能の違いがあります。 Direct3D 10.0 バージョンの ResourceCopyRegion の場合、ソース リソースと移行先リソースの D3D10DDIARG_CREATERESOURCE の ResourceDimension メンバーが一致している必要があります。 Direct3D 10.1 バージョンの ResourceCopyRegion を使用すると、D3D10DDIARG_CREATERESOURCEの ResourceDimension メンバーをソース リソースと移行先リソースに対して少し緩和できます。 Direct3D 10.1 バージョンの ResourceCopyRegion を使用すると、Tex2D 変換先リソース上の Tex2D ソース リソースまたは Tex2D 変換先リソース上の TexCube ソース リソースをコピーできます。 さらに、リソース レベルでの TexCube の違いは、Direct3D バージョン 10.1 では失われます。 Direct3D 10.1 バージョンの ResourceCopyRegion は、TexCube をコピーできるかどうかのみを表します。 Direct3D バージョン 10.0 では、リソースのコピー、複数のレンダー ターゲットの検証など (つまり、リソースの種類を同一にする必要があるさまざまな操作) には、リソースの種類を考慮する TexCube の区別がすべて含まれていました。 Direct3D バージョン 10.1 では、ランタイムは Tex2D のみを決定できます。

次のセクションでは、コピーと変換の条件の一覧を示します。

コピー

コピーの場合、 ResourceCopyRegion は、次の条件を使用して、ドライバーの CreateResource(D3D10) 関数を使用してソースリソースとコピー先リソースが作成されたことを確認します。

  • ターゲット リソースは、D3D10DDIARG_CREATERESOURCE構造体の Usage メンバーに設定された D3D10_DDI_USAGE_IMMUTABLE 値を使用して作成されませんでした。
  • ソース リソースまたは変換先リソースが、D3D10DDIARG_CREATERESOURCEの BindFlags メンバーにD3D10_DDI_BIND_DEPTH_STENCIL ビットを設定している場合、または複数サンプリングされたリソースである場合、 ResourceCopyRegionpSrcBox パラメーターが NULL であることを確認しますが、 DstXDstYDstZ パラメーターは 0 です。
  • サブリソース インデックスは範囲内です。
  • 配置の制限は座標に適用されます。
  • ソースと宛先のリソースは、まったく同じサブリソースの一部ではありません。
  • D3D10DDIARG_CREATERESOURCEの Format メンバーで指定されたソースとターゲットの各リソース形式は、同じ型なしのグループ内にあります。
  • ソースリソースと移行先リソースのサンプル数と品質レベルは同じである必要があります。単一サンプリング リソースを除き、同じ数のサンプルのみを含める必要があります。
ResourceCopyRegion では、変換先のオフセットによってオフセットされるソース ボックスがリソースに完全に収まることは保証されません。 ResourceCopyRegion では、サブリソースが現在マップされていないことも確認されません。

変換

変換の場合、 ResourceCopyRegion は、次の条件を使用して、ドライバーの CreateResource(D3D10) 関数を通じてソース リソースと変換先リソースが作成されたことを確認します。

  • ターゲット リソースは、D3D10DDIARG_CREATERESOURCE構造体の Usage メンバーに設定された D3D10_DDI_USAGE_IMMUTABLE 値を使用して作成されませんでした。
  • ソース リソースまたは変換先リソースが、D3D10DDIARG_CREATERESOURCEの BindFlags メンバーにD3D10_DDI_BIND_DEPTH_STENCIL ビットを設定している場合、または複数サンプリングされたリソースである場合、 ResourceCopyRegionpSrcBox パラメーターが NULL であることを確認しますが、 DstXDstYDstZ パラメーターは 0 です。
  • サブリソース インデックスは範囲内です。
  • 配置の制限は座標に適用されます。
  • ソースと宛先のリソースは、まったく同じサブリソースの一部ではありません。
  • D3D10DDIARG_CREATERESOURCEの Format メンバーで指定されたソースとターゲットの各リソース形式は、同じ型なしのグループ内にあります。
  • D3D10DDIARG_CREATERESOURCEの Format メンバーで指定されている各ソースおよびターゲット リソースの形式は、適切な変換操作をサポートします。
  • ソースリソースと移行先リソースのサンプル数と品質レベルは同じである必要があります。単一サンプリング リソースを除き、同じ数のサンプルのみを含める必要があります。
ResourceCopyRegion では、サブリソースが現在マップされていないことは保証されません。 ResourceCopyRegion では、変換先のオフセットによってオフセットされるソース ボックスがリソースに完全に収まることも保証されません。

要件

要件
サポートされている最小のクライアント Windows Vista 以降のバージョンの Windows オペレーティング システムで使用できます。
対象プラットフォーム デスクトップ
Header d3d10umddi.h (D3d10umddi.h を含む)

こちらもご覧ください

D3D10DDI_DEVICEFUNCS

D3D10_DDI_BOX

pfnSetErrorCb