解決した方法
プロジェクトファイルがある同じフォルダ内に
dxil.dllを入れたら直った。
このファイルは通常
C:\Program Files (x86)\Windows Kits\10\Redist\D3D\x64
この中にあります。
同様にdxcompiler.dllこのファイルも一緒に入れるとシェーダーのコンパイルでエラーになってる人は幸せになれるかもしれません。(同じ階層にあります)
コードはこんな感じです。
// インプットレイアウト
D3D12_INPUT_ELEMENT_DESC inputElementDesc[] = {
{ "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, offsetof(Vertex, pos), D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA},
{ "NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT,0, offsetof(Vertex,normal), D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA},
{ "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, offsetof(Vertex,uv), D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA}
};
// パイプラインステートオブジェクトの生成.
D3D12_GRAPHICS_PIPELINE_STATE_DESC psoDesc{};
// シェーダーのセット
psoDesc.VS = CD3DX12_SHADER_BYTECODE(m_Vs.Get());
psoDesc.PS = CD3DX12_SHADER_BYTECODE(m_PsOpaque.Get());
// ブレンドステート設定
psoDesc.BlendState = CD3DX12_BLEND_DESC(D3D12_DEFAULT);
// ラスタライザーステート
psoDesc.RasterizerState = CD3DX12_RASTERIZER_DESC(D3D12_DEFAULT);
// 出力先は1ターゲット
psoDesc.NumRenderTargets = 1;
psoDesc.RTVFormats[0] = DXGI_FORMAT_R8G8B8A8_UNORM;
// デプスバッファのフォーマットを設定
psoDesc.DSVFormat = DXGI_FORMAT_D32_FLOAT;
psoDesc.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC(D3D12_DEFAULT);
psoDesc.InputLayout = { inputElementDesc, _countof(inputElementDesc) };
// ルートシグネチャのセット
psoDesc.pRootSignature = m_RootSignature.Get();
psoDesc.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE;
// マルチサンプル設定
psoDesc.SampleDesc = { 1,0 };
psoDesc.SampleMask = UINT_MAX; // これを忘れると絵が出ない&警告も出ないので注意.
ComPtr<ID3D12PipelineState> pipeline;
HRESULT hr;
hr = m_Device->CreateGraphicsPipelineState(&psoDesc, IID_PPV_ARGS(&pipeline));
if (FAILED(hr))
{
throw std::runtime_error("CreateGraphicsPipelineState failed");
}
return pipeline;