Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ilustracja poniżej pokazuje, jak działa synchronizacja wątków dla sterownika miniportu graficznego w trybie jądra (KMD) w WDDM.
Jeśli wystąpi przekroczenie limitu czasu sprzętu, system inicjuje proces wykrywania limitu czasu i odzyskiwania (TDR ). Harmonogram procesora GPU wywołuje funkcję DxgkDdiResetFromTimeout sterownika, która resetuje procesor GPU:
- DxgkDdiResetFromTimeout jest wywoływany synchronicznie z dowolną inną funkcją KMD, z wyjątkiem funkcji zarządzania energią środowiska uruchomieniowego DxgkDdiSetPowerComponentFState i DxgkDdiPowerRuntimeControlRequest. Oznacza to, że system operacyjny gwarantuje, że żaden inny wątek nie działa w sterowniku, podczas gdy wątek DxgkDdiResetFromTimeout jest uruchamiany.
- System operacyjny gwarantuje również, że aplikacje nie mogą uzyskać dostępu do buforu ramki podczas wywołania funkcji DxgkDdiResetFromTimeout. W związku z tym sterownik może zresetować pętlę zablokowaną w fazie kontrolera pamięci (PLL) itd.
Podczas wykonywania wątku przywracania DxgkDdiResetFromTimeout, przerwania i odroczone wywołania procedur (DPC) mogą być nadal wywoływane. Funkcja KeSynchronizeExecution może służyć do synchronizowania części procedury resetowania z przerwaniami urządzenia.
Po powrocie sterownika z DxgkDdiResetFromTimeout większość funkcji sterowników może zostać ponownie wywołana, a system operacyjny zacznie czyścić zasoby, które nie są już wymagane. W okresie czyszczenia następujące funkcje sterowników są wywoływane ze wskazanych powodów:
Sterownik jest wywoływany w celu powiadomienia o usuniętej alokacji.
Jeśli na przykład alokacja została stronicowana w segmencie pamięci, funkcja DxgkDdiBuildPagingBuffer sterownika jest wywoływana z elementem członkowskim Operation struktury DXGKARG_BUILDPAGINGBUFFER ustawioną na DXGK_OPERATION_TRANSFER i elementem członkowskim Transfer.Size ustawionym na zero, aby poinformować sterownik o eksmisji. Transfer zawartości nie jest zaangażowany, ponieważ zawartość została utracona podczas resetowania.
Jeśli alokacja została stronicowana w segmencie przysłony, funkcja DxgkDdiBuildPagingBuffer sterownika jest wywoływana z elementem członkowskim Operation DXGKARG_BUILDPAGINGBUFFER ustawionym na DXGK_OPERATION_UNMAP_APERTURE_SEGMENT, aby poinformować sterownik o usunięciu alokacji z przysłony.
Funkcja DxgkDdiReleaseSwizzlingRange sterownika jest wywoływana w celu zwolnienia zakresu odwirowania i zakresów segmentów przysłony.
Sterownik nie powinien uzyskiwać dostępu do procesora GPU podczas poprzednich wywołań, chyba że jest to absolutnie konieczne.
Po zakończeniu okresu oczyszczania system operacyjny wywołuje funkcję DxgkDdiRestartFromTimeout sterownika, aby poinformować sterownik o zakończeniu czyszczenia oraz że system operacyjny wznowi użycie adaptera do renderowania.