Threading and Synchronization Level One
At Level One threading and synchronization, WDDM doesn't permit re-entrancy within a particular function class. That is, only one thread can enter the driver within a particular class. However, calls from multiple Level One classes and Level Zero calls can be entered simultaneously. Although two or more threads from different first-level classes and threads from zero-level calls can be running in the driver at the same time, no two threads can belong to a single process.
WDDM categorizes calls into the display miniport driver that are made under the Level One of threading and synchronization into nonreentrancy classes, such as the following classes. Additional classes include VidMm, virtual machines, and vGPUs.
Pointer Class
WDDM doesn't permit a call into one of the pointer class functions in a reentrant fashion. That is, at the most, one thread can be running within one of the following functions at a given time:
GPU Scheduler Class
WDDM doesn't permit a call into one of the GPU scheduler loader class functions in a reentrant fashion. That is, at the most, one thread can be running within one of the following functions at a given time:
- DxgkDdiBuildPagingBuffer
- DxgkDdiPatch
- DxgkDdiPreemptCommand
- DxgkDdiQueryDependentEngineGroup
- DxgkDdiQueryEngineStatus
- DxgkDdiResetEngine
- DxgkDdiSubmitCommand
Swizzling Range Class
WDDM doesn't permit a call into one of the swizzling range class functions in a reentrant fashion. That is, at the most, one thread can be running within one of the following functions at a given time:
Overlay Class
WDDM doesn't permit a call into one of the overlay class functions in a reentrant fashion. That is, at the most, one thread can be running within one of the following functions at a given time:
Child I/O Class
WDDM doesn't permit a call into one of the child I/O class functions in a reentrant fashion. That is, at the most, one thread can be running within one of the following functions per child device at a given time.
The child I/O class functions are synchronized per child device (that is, simultaneous calls to multiple child devices are allowed). However, if internal dependencies exist between child devices, the display miniport driver must block calls as required.
- DxgkDdiQueryChildStatus
- DxgkDdiQueryConnectionChange
- DxgkDdiQueryDeviceDescriptor
- DxgkDdiDisplayDetectControl
- DxgkDdiI2CReceiveDataFromDisplay
- DxgkDdiI2CTransmitDataToDisplay
- DxgkDdiOPMConfigureProtectedOutput
- DxgkDdiOPMCreateProtectedOutput
- DxgkDdiOPMDestroyProtectedOutput
- DxgkDdiOPMGetCertificate
- DxgkDdiOPMGetCertificateSize
- DxgkDdiOPMGetCOPPCompatibleInformation
- DxgkDdiOPMGetInformation
- DxgkDdiOPMGetRandomNumber
- DxgkDdiOPMSetSigningKeyAndSequenceNumbers
Display Class
WDDM doesn't permit a call into one of the display class functions in a reentrant fashion. That is, at the most, one thread can be running within one of the following functions at a given time: