BBug

Quattro guasti diversi di GameLoop si chiamano tutti errore DirectX

Failed to initialize DirectX, DXGI_ERROR_DEVICE_HUNG e DXGI_ERROR_DEVICE_REMOVED descrivono tre guasti scollegati. Leggere il messaggio decide la soluzione; indovinare brucia una serata.

DirectX è lo strato attraverso cui GameLoop disegna, quindi quasi tutto ciò che va storto fra emulatore e GPU riemerge con DirectX scritto nel messaggio. Questo non rende i guasti imparentati fra loro. Quattro guasti distinti condividono l'etichetta, e il testo del messaggio è l'unica cosa che li separa.

MessaggioCosa significa davvero
Failed to initialize DirectX 11/12Il dispositivo di rendering non è mai stato creato — driver, o una GPU che non sa fare quanto richiesto
GetDeviceRemovedReason failed, DXGI_ERROR_DEVICE_HUNGLa GPU ha smesso di rispondere a metà frame e Windows ha resettato il driver
Your PC does not support DirectX 11Una dichiarazione di capacità, vera o falsa, che arriva dal driver
DXGI_ERROR_DEVICE_REMOVEDLa GPU è sparita del tutto — crash del driver, frequenze instabili o alimentazione

Guasti di inizializzazione

Questo compare prima del gioco, e la risposta abituale è il driver grafico. Prendetelo dal sito del produttore della GPU anziché da Windows Update, installate, riavviate.

Se non cambia nulla, abbassate la modalità di rendering di GameLoop da DirectX 12 a DirectX 11 nelle impostazioni del motore. Il supporto DX12 sull'hardware precedente al 2018 è spesso presente sulla carta e instabile nella pratica, e le grafiche integrate sono le vittime più frequenti. OpenGL è il ripiego successivo.

Eseguite dxdiag prima di dare per morto l'hardware. La scheda Sistema riporta la versione di DirectX in uso. Se dice 12 mentre GameLoop insiste che il vostro PC non arriva all'11, l'hardware sta bene e il driver non espone correttamente il feature level: rimuovetelo da Gestione dispositivi e installate la build corrente del produttore da pulito.

Device hung e device removed

Questi due vanno tenuti separati dall'inizializzazione perché si verificano durante il gioco, e nessuno dei due è davvero un bug di GameLoop.

DEVICE_HUNG è il Timeout Detection and Recovery di Windows che fa il suo lavoro: la GPU non ha restituito un frame in tempo, quindi il driver è stato resettato sotto i piedi dell'applicazione. Surriscaldamento, un overclock instabile e un aggiornamento di driver applicato a metà sono le tre cause che lo provocano in modo affidabile. Riportate a valori di fabbrica gli offset di frequenza di core e memoria, tenete d'occhio le temperature sotto carico e, se il driver è stato aggiornato sopra a uno vecchio, rimuovetelo in modo pulito con Display Driver Uninstaller — scaricato dal sito del suo sviluppatore — in modalità provvisoria, prima di reinstallarlo.

DEVICE_REMOVED è il cugino più grave: la GPU è diventata del tutto indisponibile. Stessi due controlli iniziali, più l'alimentazione. Il Visualizzatore eventi di Windows, sotto Registri di Windows e Sistema, registra il dettaglio a livello di driver con origini chiamate nvlddmkm su NVIDIA e amdkmdap su AMD. Filtrare su quelle voci attorno all'ora del crash dice più di qualsiasi elenco generico di soluzioni.

Quando non c'è alcun messaggio

GameLoop che esce in silenzio dopo la schermata di caricamento è spesso lo stesso guasto DirectX con la finestra di dialogo soppressa. Il registro Applicazione del Visualizzatore eventi, letto all'orario del crash, contiene di solito il codice di errore vero. Prima di quello, due controlli a costo zero: disattivate le ottimizzazioni schermo intero nella scheda Compatibilità del collegamento e riparate i Visual C++ Redistributable da Impostazioni di Windows, App, App installate — la compilazione degli shader è una delle prime cose a cedere quando un runtime è danneggiato.

Cosa non lo risolve

Reinstallare DirectX 12. Non c'è nulla da reinstallare. È un componente di Windows, non un pacchetto ridistribuibile.

La modifica di registro TdrDelay. Allungare il timeout della GPU impedisce a Windows di segnalare il blocco. La GPU si è bloccata lo stesso. Questo nasconde un problema termico o di driver invece di risolverlo e, su una scheda davvero instabile, trasforma un reset recuperabile in un desktop congelato.

Reinstallare GameLoop per un errore device removed. L'emulatore è il processo che per caso era in esecuzione quando la GPU è caduta dal bus. Reinstallarlo non affronta nulla.

Disinstallare per riflesso un aggiornamento di Windows. È una mossa legittima quando l'errore è comparso a uno o due giorni da una KB precisa e il driver è già aggiornato. Come prima risposta a un qualsiasi messaggio DirectX è un intervento grosso, invasivo e con bassa percentuale di successo.