スレッドと同期レベル 1
レベル 1 のスレッド処理と同期では、WDDM は特定の関数クラス内での再入を許可しません。 つまり、特定のクラス内のドライバーに入ることができるスレッドは 1 つだけです。 ただし、複数のレベル 1 クラスからの呼び出しと レベル 0 の呼び出しを同時に入力できます。 異なる第 1 レベルのクラスの 2 つ以上のスレッドと レベル 0 の呼び出しのスレッドを同時にドライバーで実行できますが、2 つのスレッドが 1 つのプロセスに属することはできません。
WDDM は、スレッドと同期のレベル 1 で実行されるディスプレイ ミニポート ドライバーへの呼び出しを非再入クラス (次のクラスなど) に分類します。 その他のクラスには、VidMm、仮想マシン、vGPU が含まれます。
ポインター クラス
WDDM では、再入可能な方法でポインター クラス関数の 1 つを呼び出すことはできません。 つまり、最大で 1 つのスレッドは、特定の時点で次のいずれかの関数内で実行できます。
GPU スケジューラ クラス
WDDM では、再入可能な方法で GPU スケジューラ ローダー クラス関数の 1 つへの呼び出しは許可されません。 つまり、最大で 1 つのスレッドは、特定の時点で次のいずれかの関数内で実行できます。
- DxgkDdiBuildPagingBuffer
- DxgkDdiPatch
- DxgkDdiPreemptCommand
- DxgkDdiQueryDependentEngineGroup
- DxgkDdiQueryEngineStatus
- DxgkDdiResetEngine
- DxgkDdiSubmitCommand
スウィズリング範囲クラス
WDDM では、再入可能な方法で Swizzling 範囲クラス関数の 1 つを呼び出すことはできません。 つまり、最大で 1 つのスレッドは、特定の時点で次のいずれかの関数内で実行できます。
オーバーレイ クラス
WDDM では、再入可能な方法でオーハーレイ クラス関数の 1 つを呼び出すことはできません。 つまり、最大で 1 つのスレッドは、特定の時点で次のいずれかの関数内で実行できます。
子 I/O クラス
WDDM では、再入可能な方法で子 I/O クラス関数の 1 つを呼び出すことはできません。 つまり、ほとんどの場合、特定の時点で子デバイスごとに次のいずれかの関数内で 1 つのスレッドを実行できます。
子 I/O クラス関数は、子デバイスごとに同期されます (つまり、複数の子デバイスへの同時呼び出しが許可されます)。 ただし、子デバイス間に内部依存関係が存在する場合、ディスプレイ ミニポート ドライバーは必要に応じて呼び出しをブロックする必要があります。
- DxgkDdiQueryChildStatus
- DxgkDdiQueryConnectionChange
- DxgkDdiQueryDeviceDescriptor
- DxgkDdiDisplayDetectControl
- DxgkDdiI2CReceiveDataFromDisplay
- DxgkDdiI2CTransmitDataToDisplay
- DxgkDdiOPMConfigureProtectedOutput
- DxgkDdiOPMCreateProtectedOutput
- DxgkDdiOPMDestroyProtectedOutput
- DxgkDdiOPMGetCertificate
- DxgkDdiOPMGetCertificateSize
- DxgkDdiOPMGetCOPPCompatibleInformation
- DxgkDdiOPMGetInformation
- DxgkDdiOPMGetRandomNumber
- DxgkDdiOPMSetSigningKeyAndSequenceNumbers
ディスプレイ クラス
WDDM では、再入可能な方法でディスプレイ クラス関数の 1 つを呼び出すことはできません。 つまり、最大で 1 つのスレッドは、特定の時点で次のいずれかの関数内で実行できます。