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

ResourceCopy 関数は、ソース リソース全体をコピー先リソースにコピーします。

構文

PFND3D10DDI_RESOURCECOPY Pfnd3d10ddiResourcecopy;

void Pfnd3d10ddiResourcecopy(
  D3D10DDI_HDEVICE unnamedParam1,
  D3D10DDI_HRESOURCE unnamedParam2,
  D3D10DDI_HRESOURCE unnamedParam3
)
{...}

パラメーター

unnamedParam1

hDevice [in]

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

unnamedParam2

hDstResource [in]

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

unnamedParam3

hSrcResource [in]

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

戻り値

なし

解説

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

Microsoft Direct3D ランタイムは、ユーザー モード ディスプレイ ドライバーの ResourceCopy 関数を呼び出して、指定したソース リソースから指定した宛先リソースにコピーするようにドライバーに通知します。 ソース リソースと移行先リソースを同じリソースにすることはできません。 ソース リソースと移行先リソースの両方が同じ種類のリソースであり、同じディメンションを持つ必要があります。 両方のリソースの書式の種類 (DXGI_FORMAT型指定された値) は、相互にキャスト可能である必要があります。 ソースリソースと移行先リソースを現在マップすることはできません。 さらに、リソース作成フラグは、リソースがコピー操作に参加できるかどうかを制限します。

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

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

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

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

コピー

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

  • ターゲット リソースが、D3D10DDIARG_CREATERESOURCE構造体の Usage メンバーに設定された D3D10_DDI_USAGE_IMMUTABLE 値を使用して作成されませんでした。
  • ソース リソースとターゲット リソースは、同じリソースの種類と次元 (バッファー、1 次元 (1-D) テクスチャなど) を使用して作成D3D10DDIARG_CREATERESOURCEの ResourceDimension メンバーに同じ値を設定します。
  • ソースリソースと移行先リソースは、まったく同じリソースの一部ではありません。
  • D3D10DDIARG_CREATERESOURCEの Format メンバーで指定されているソースとターゲットの各リソース形式は、同じ型なしのグループ内にあります。
  • ソースリソースと移行先リソースのサンプル数と品質レベルは同じである必要があります。単一サンプリング リソースを除き、同じ数のサンプルのみを含める必要があります。
ResourceCopy では、現在、サブリソースがマップされていないことは保証されません。

変換

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

  • ターゲット リソースが、D3D10DDIARG_CREATERESOURCE構造体の Usage メンバーに設定された D3D10_DDI_USAGE_IMMUTABLE 値を使用して作成されませんでした。
  • D3D10DDIARG_CREATERESOURCEの ResourceDimension メンバーに同じ値を設定することで、ソース リソースとターゲット リソースが同じリソースの種類 (バッファー、1 次元 (1-D) テクスチャなど) で作成されました。
  • 変換元リソースと変換先リソースのディメンションが一致します。
  • ソースリソースと移行先リソースは、まったく同じリソースの一部ではありません。
  • D3D10DDIARG_CREATERESOURCE の Format メンバーで指定されている各ソースとターゲットのリソース形式は、適切な変換操作をサポートします。 mipped ブロック圧縮リソースの場合、ディメンションはすべて 2 の累乗として検証されます。
  • ソースリソースと移行先リソースのサンプル数と品質レベルは同じである必要があります。単一サンプリング リソースを除き、同じ数のサンプルのみを含める必要があります。
ResourceCopy では、現在、サブリソースがマップされていないことは保証されません。

要件

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

こちらもご覧ください

CreateResource(D3D10)

D3D10DDIARG_CREATERESOURCE

D3D10DDI_DEVICEFUNCS

D3D10_1DDI_DEVICEFUNCS

pfnSetErrorCb