驅動程式內部錯誤 (Direct3D 9)
在 Direct3D 9 中,Direct3D 可讓驅動程式傳回錯誤碼,例如E_OUTOFMEMORY、D3DERR_OUTOFVIDEOMEMORY和D3DERR_UNSUPPORTEDCOLORARG,讓應用程式能夠回應它們。 不過,有時候產生這些傳回類型的 API 呼叫會載入命令緩衝區,並批次處理以傳送至 GPU (請參閱 控制執行時間和驅動程式優化) 。 在此情況下,當需要採取動作時,無法將錯誤轉寄至應用程式,因此執行時間會取用錯誤碼,並在發生此情況的裝置物件上記下。 稍後當應用程式叫用 IDirect3DDevice9::P resent時, IDirect3DDevice9::P resent 將會傳回D3DERR_DRIVERINTERNALERROR。 這就是為什麼從 IDirect3DDevice9::P resent 接收D3DERR_DRIVERINTERNALERROR時,應用程式要採取的最佳方法是終結並重新建立裝置。
如果您想要嘗試進一步偵錯,以下是一些嘗試找出產生錯誤的 API 呼叫的建議:
因為可能的傳回值清單不完整,所以您可以嘗試尋找哪個呼叫失敗,方法是圍繞每個 API 呼叫,如下所示:
TRACE ( "Calling DrawPrimitive" ); d3ddev->DrawPrim(...); TRACE ( "done\n" );
然後,輸出偵錯資料流程應該會顯示造成問題的呼叫。
此外,為了進行偵錯,請嘗試在每一個 IDirect3DDevice9::ValidateDevice9::D rawPrimitive 之前立即呼叫 IDirect3DDevice9::ValidateDevice,以查看裝置驅動程式是否有其他問題, (不支援的作業、紋理格式的無法使用組合等等) 。
注意
IDirect3DDevice9::ValidateDevice 應該謹慎使用,並謹慎使用,因為驅動程式必須執行的驗證工作數量,才能傳回答案。
相關主題