不論D3D12或是Vulkan都是如此
D3D12:
Vulkan:
除非很篤定錯誤是其他App造成的
例如Vulkan會在RTSS這個顯示FPS的工具開啟的情況下,回報Swapchain有問題
否則絕對不要忽略任何一個Validation Error! Runtime沒事不代表真的沒事
輕則只是繪圖效果有點差異或者效能有點差,重則TDR當掉!
最近開始參與新專案了,由於是一款知名舊作重製,所以引擎反而退回UE3而不是UE5
這時Xbox的D3D12實作根本不夠嚴謹...導致一把XSX的validation layer打開就一堆驗證錯誤
這幾天就以拆彈手之姿處理各種錯誤,像是:
1. 明明XSX只支援到Shader Model 6.6卻用了6.7,導致CreateGraphicsPipeline錯誤
2. 資源處於錯誤的狀態(tài),例如RTV/DSV並不是D3D12_RESOURCE_STATE_RENDER_TARGET / D3D12_RESOURCE_STATE_DEPTH_WRITE.
又或者資源被綁定為Shader輸入時狀態(tài)還是D3D12_RESOURCE_STATE_COPY_DEST而不是D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE...
3. Shader使用了錯誤或不一致的semantic,例如vertex shader輸出'SV_POSITION',但pixel shader輸入'POSITION',這樣也不能過驗證
簡直就像是..他們引進D3D12時,完全沒開Validation Layer在實作!
能發(fā)揮底層方面的專才我是很開心
但這種基本型的錯誤多了,還是挺惱人的
所以實作Graphic API時,永遠不要忽略任何一個Validation錯誤!