在Directx 12中创建管道状态对象失败,并显示E_INVALIDARG,并且调试层输出一堆废话说D3D12_GRAPHICS_PIPELINE_STATE_DESC实例中的数据无效:
D3D12错误:ID3D12Device :: CreateBlendState:DestBlendAlpha [0]试图使用D3D11_BLEND值(0x4)来操纵颜色,这是无效的。 [STATE_CREATION错误#115:CREATEBLENDSTATE_INVALIDDESTBLENDALPHA] D3D12错误:ID3D12Device :: CreateDepthStencilState:BackFace.StencilFailOp具有无法识别的值。 [STATE_CREATION错误#106:CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFAILOP] D3D12错误:ID3D12Device :: CreateDepthStencilState:BackFace.StencilDepthFailOp具有无法识别的值。 [STATE_CREATION错误#107:CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILZFAILOP] D3D12错误:ID3D12Device :: CreateDepthStencilState:BackFace.StencilPassOp具有无法识别的值。 [STATE_CREATION错误#108:CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILPASSOP] D3D12错误:ID3D12Device :: CreateDepthStencilState:BackFace.StencilFunc具有无法识别的值。 [STATE_CREATION错误#109:CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFUNC] D3D12错误:ID3D12Device :: CreateRasterizerState:FillMode具有无法识别的值。 [STATE_CREATION错误#95:CREATERASTERIZERSTATE_INVALIDFILLMODE] D3D12错误:ID3D12Device :: CreateRasterizerState:当ConservativeRaster为D3D12_CONSERVATIVE_RASTERIZATION_MODE_ON时,FillMode必须为D3D12_FILL_MODE_SOLID:FillMode = D3D12_FILL_MODE_WIREFRAME,ConservativeRaster = D3D12_CONSERVAATION。 [STATE_CREATION错误#95:CREATERASTERIZERSTATE_INVALIDFILLMODE] D3D12错误:ID3D12Device :: Create *:指定的节点掩码(0xcccccccc)包含一个超出设备节点数的位。 [STATE_CREATION错误#900:INVALID_NODE_INDEX]
列表继续...
看起来好像内存没有损坏,我已经一遍又一遍地检查了所有值,它们都很好。
至少其中的 some 个值必须正确,例如,看最后一条消息,它显示指定的节点掩码(0xcccccccc) ...我确定之前不是0xcccccccc CreateGraphicsPipelineState
调用,调试器确认。
答案 0 :(得分:0)
事实证明,在我的计算机上构建的exe无法在其他计算机上创建PSO,但是如果要在其他计算机上构建该项目并在我的计算机上运行,则不会出现PSO问题。
重新安装Windows SDK可以解决此问题。