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文件,右键,D3D12遇到的报错记录
      将属性中的配置改为图中所示即可
    • 告诉Visual studio你是用的是自己的编译器(也就是在运行时编译),还是在shader文件上鼠标右键D3D12遇到的报错记录
      改为如图所示即可
      部分内容参考自*
上一篇:浅谈Memory barrier


下一篇:C# 线程同步相关类