ETH官方钱包

創(chuàng)作內(nèi)容

5 GP

PIX進(jìn)階Shader偵錯 - 即時(shí)逐行執(zhí)行, 觀看組合語言等等

作者:巧克力喬斯達(dá)│2024-05-16 03:40:48│巴幣:10│人氣:89
如果Shader程式能像CPU端的程式允許逐行偵錯,那就太棒了

PIX偵錯
D3D12 (PC/XBOX)是主要受惠平臺,不支援Vulkan及GL系列
先決條件 - Shader編譯必須使用偵錯flag,不然會缺乏偵錯符號
  • 如果是使用D3DCompile()之類的函式,下達(dá)D3DCOMPILE_DEBUG (/Zi) + D3DCOMPILE_SKIP_OPTIMIZATION (/Od)即可,兩個(gè)缺一個(gè)都不行,因?yàn)椴幌?Od的話就是預(yù)設(shè)/O3 (最佳化)
  • 那如果是透過外部執(zhí)行檔(dxc.exe)來編譯,下達(dá) -Zi -Od即可
那如果非要偵錯/O3最佳化過的shader呢?
也不是沒有辦法,產(chǎn)生PDB檔案即可 (編譯時(shí)還是需要/Zi)
  • 透過dxc.exe編譯的話,下-Fd指令、後面接著一個(gè)檔案名稱或路徑,PDB資訊就會匯出到那個(gè)檔案、或者自動在指定的路徑生成檔案。
  • 使用D3DCompile的話,會比較麻煩一點(diǎn),可參考這個(gè)cpp,行261~283的部分
然後回到PIX,把對應(yīng)的PDB設(shè)定上去就行了 (點(diǎn)擊 here 選擇檔案)

不過這邊,主要還是以Zi + Od當(dāng)作範(fàn)本,取材於Introduction to 3D Game Programming with DirectX 12這本書的某個(gè)範(fàn)例:

擷取一張GPU Capture並按下開始分析之後,可以點(diǎn)擊要偵錯的Shader:

TA,點(diǎn)開來之後,就能看到豐富的資訊了


偵錯Pixel Shader
由於Pixel最終輸出會在Output Merger Stage (OM),所以先回到RTV 0那邊
選擇想要偵錯的像素,按下右邊的"Debug Pixel"

就可以逐行偵錯啦~

有點(diǎn)visual studio的感覺了,有自動變數(shù)可以看,點(diǎn)擊"constants"分頁也可以看你的constant buffer:

即時(shí)修改shader程式並套用
透過Debug那個(gè)分頁的編輯器來做就行了,修改後按下F6套用,例如:
修改過的shader會有鉛筆圖案提醒

這時(shí)再回到OM那邊看,確實(shí)變成紅色啦:

偵錯Vertex Shader
在VS Output那邊右鍵一個(gè)三角形,然後選其中一個(gè)頂點(diǎn)Debug即可,會跳到你vertex shader的進(jìn)入點(diǎn):


偵錯Compute Shader
雖然也能看得到輸出的目標(biāo) (UAV Texture),但沒有辦法像PS一樣選擇一個(gè)像素來debug pixel
必須直接從shader那邊偵錯

不過至少,可以在左上角設(shè)定Thread ID,指定想要偵錯的部分,記住不要超過numthreads的定義就好

偵錯光追Shader
主要是在DispatchRays()這個(gè)呼叫
偵錯頁面就不再貼了,和Compute shader很像,可以指定thread ID
而主頁面這邊的DXR Invocations可以看到哪些位置有hit、哪些miss
小缺點(diǎn)無法逐步執(zhí)行hit shader跟miss shader,有點(diǎn)可惜

------------------------------------------------------------------------------------------------------
大致上就寫到這~
不過這些還只是冰山一角而已
越摸會越發(fā)現(xiàn)這個(gè)工具的強(qiáng)大之處!
引用網(wǎng)址:http://www.jamesdambrosio.com/TrackBack.php?sn=5934253
All rights reserved. 版權(quán)所有,保留一切權(quán)利

相關(guān)創(chuàng)作

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

5喜歡★ltes50414 可決定是否刪除您的留言,請勿發(fā)表違反站規(guī)文字。

前一篇:Unheard Engi... 後一篇:Rust語言筆記(上)...


face基於日前微軟官方表示 Internet Explorer 不再支援新的網(wǎng)路標(biāo)準(zhǔn),可能無法使用新的應(yīng)用程式來呈現(xiàn)網(wǎng)站內(nèi)容,在瀏覽器支援度及網(wǎng)站安全性的雙重考量下,為了讓巴友們有更好的使用體驗(yàn),巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現(xiàn)和功能。
屆時(shí)建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業(yè)系統(tǒng)版本才可使用)

face我們了解您不想看到廣告的心情? 若您願意支持巴哈姆特永續(xù)經(jīng)營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學(xué)】