BloggerAds

2014年9月26日 星期五

[筆記] GPUView 在 Windows 8 環境下發生錯誤

工作上常常需要用 GPUView 來對一些 D3D 相關的操作做 Debug,好死不死 OEM 來了一台 Win 8.1 環境的機器,在上面使用 GPUView 的 Log.cmd 的時候,出現了「這個時候不應有 4000。」的錯誤訊息,而且這個錯誤就一直出現!真是困擾!

今天在大神的幫助下找到了一個解決方法,原來這個問題是因為在 Windows 8 上面缺少了環境變數 TRACE_LOGGING_MEMORY,然後在執行 Log.cmd 的時候就會去使用 systeminfo.exe 並利用它的結果来查看記憶體的容量,根據文章的解釋是因為中文系統下面的 systeminfo.exe 所輸出的資訊與 Log.cmd 預期的不符合,所以它無法辨識出正確的記憶體資訊!此時只要利用下面的方式即可解決:
> set TRACE_LOGGING_MEMORY=4096
> log.cmd

設定 4096 的原因是為了讓 GPUView 使用大的記憶體緩衝區,必須設定大於 4000 才會使用大的記憶體緩衝區,如果小於 4000 大於 2000,則會使用中等的記憶體緩衝區,小於 2000 的話會使用小的記憶體緩衝區!這個可以視狀況調整!

另外根據 GPUView.chm 裡面「Enabling Logging of DirectX Video Acceleration Version 2 and Direct3D Version 9 Events」,想要追蹤 DXVA2 或是 D3D9 Events 的話,必須在註冊表裡加入:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Media Foundation]
"WmiInstrumentation"=dword:00000001

即可正常取得 Event!
經過實際測試,可以把問題解決囉!
基本上 Log.cmd 有問題是可以理解的,畢竟其實我的問題是在日文機上面覆現的,所以大概只要系統預設 CodePage 是這類特殊格式的機器,大概都會遇到一樣的問題吧! 另一種解決法可以使用 CHCP 指令,這個指令可以指定所要使用的 CodePage,因為 Log.cmd 當初設計的環境應該是英文語系的國家,所以才會直接在使用 systeminfo.exe 之後直接搜尋"Total Physical Memory"字串,建議可以在命令模式下輸入下列指令:
> CHCP 65001

將 CodePage 切換至 UTF-8,這樣 systeminfo.exe 就會輸出英文字串"Total Physical Memory",原來的 Log.cmd 就可以正常運作了!

2015/06/22 新增:
> CHCP 437

將 CodePage 切換至 OEM - United States 也可以正常運作!這裡再記錄一下!