スレッドと同期レベル 0
レベル 0 のスレッド処理と同期では、WDDM では、再入可能な方法で行われるディスプレイ ミニポート ドライバーにレベル 0 の DxgkDdi*Xxx 呼び出しを許可します。 つまり、レベル 0 の DDI を呼び出すことによって、複数のスレッドが同時にドライバーに入ることができます。
ドライバーは、システム内のすべてのスレッドが入ってくることを期待し、それに応じてそのスレッドのデータを保護する必要があります。
2 つ以上のスレッドを同時にドライバーで実行できますが、2 つのスレッドが 1 つのプロセスに属することはできません。
レベル 0 は既定のスレッド処理と同期レベルであり、次のような関数が含まれています。
- DxgkDdiCheckMultiPlaneOverlaySupport3 (または DxgkDdiCheckMultiPlaneOverlaySupport2/DxgkDdiCheckMultiPlaneOverlaySupport)
- DxgkDdiCloseAllocation
- DxgkDdiCollectDbgInfo. この関数は、さまざまなエラーのデバッグ情報を収集する必要があり、いつでも高 IRQL で呼び出すことができます (つまり、DxgkDdiCollectDbgInfo が実行される IRQL は一般的に未定義です)。 いずれの場合も、DxgkDdiCollectDbgInfo は、必要なデバッグ情報と適切な同期の可用性を確認する必要があります。 ただし、Reason メンバー (DXGKARG_COLLECTDBGINFO 構造体のメンバーでこの構造体は pCollectDbgInfo パラメーターで指されている) が VIDEO_TDR_TIMEOUT_DETECTED または VIDEO_ENGINE_TIMEOUT_DETECTED に設定されている場合、ドライバーは DxgkDdiCollectDbgInfo がページング可能であり、IRQL = PASSIVE_LEVEL で実行され、同期ゼロ レベルをサポートしていることを確認する必要があります。
- DxgkDdiControlEtwLogging
- DxgkDdiCreateAllocation
- DxgkDdiCreateContext
- DxgkDdiCreateDevice
- DxgkDdiDescribeAllocation
- DxgkDdiDestroyAllocation
- DxgkDdiDestroyContext
- DxgkDdiDestroyDevice
- DxgkDdiDpcRoutine
- DxgkDdiEnumVidPnCofuncModality
- DxgkDdiGetScanLine
- DxgkDdiGetStandardAllocationDriverData
- DxgkDdiInterruptRoutine
- DxgkDdiIsSupportedVidPn
- DxgkDdiMiracastCreateContext
- DxgkDdiMiracastDestroyContext
- DxgkDdiMiracastIoControl
- DxgkDdiMiracastQueryCaps
- DxgkDdiOpenAllocation
- DxgkDdiPresent
- DxgkDdiQueryAdapterInfo
- DxgkDdiQueryCurrentFence
- DxgkDdiRecommendFunctionalVidPn
- DxgkDdiRecommendVidPnTopology
- DxgkDdiRender
- DxgkDdiRender
- DxgkDdiResetDevice