D3D12遇到的報錯記錄

E_INVALIDARG One or more arguments are invalid.

這個報錯是最常見的報錯了,一般是調用D3D的函數時的參數設置不對,或者參數設置無效,或者是當前系統環境不支持你所設置的參數,使用Visual studio進行學習開發的話,多注意Output窗口,一般會在報錯提示的前後有更詳細的提示

Invalid resource barrier type. [ RESOURCE_MANIPULATION ERROR #519: RESOURCE_BARRIER_INVALID_TYPE]

這個報錯提示還是很清楚的,我出錯的原因是

D3D12_RESOURCE_BARRIER resourceBarrier;
resourceBarrier.Transition.pResource = mRenderTargets[mFrameIndex].Get();
resourceBarrier.Transition.StateBefore = D3D12_RESOURCE_STATES::D3D12_RESOURCE_STATE_PRESENT;
resourceBarrier.Transition.StateAfter = D3D12_RESOURCE_STATES::D3D12_RESOURCE_STATE_RENDER_TARGET;
resourceBarrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;
resourceBarrier.Flags = D3D12_RESOURCE_BARRIER_FLAGS::D3D12_RESOURCE_BARRIER_FLAG_NONE;
//這一句沒有寫的話就會報這個錯誤,加上就好了,當然,這個Type可以選擇合法的其他Type
resourceBarrier.Type = D3D12_RESOURCE_BARRIER_TYPE::D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; 
mCommandList->ResourceBarrier(1, &resourceBarrier); 

編譯報錯: Severity Code Description Project File Line Suppression State Error X3501 ‘main’: entrypoint not found D3D12Guide E:\D3D12Guide\D3D12Guide\FXC 1

這個報錯是因爲寫的shader文件沒有main函數,有幾種做法:

  • 若你使用的是D3DCompileFromFile編譯,首先檢查你傳遞的路徑對不對
  • 若你的shader文件中可以添加main函數,加上就好了
  • 或你使用的是D3DCompileFromFile進行shader編譯的話有下面兩種做法可以選擇
    • 在build的時候不編譯該shader文件, 在Visual studio的 solution Explorer中找到你的shader文件,右鍵,在這裏插入圖片描述
      將屬性中的配置改爲圖中所示即可
    • 告訴Visual studio你是用的是自己的編譯器(也就是在運行時編譯),還是在shader文件上鼠標右鍵在這裏插入圖片描述
      改爲如圖所示即可
      部分內容參考自stackoverflow
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章