Intel HD Graphics 530 でのみ奇妙な問題が発生しています
イメージをレンダリングすると、一部のピクセルの色がランダムに変化します。次の画像を参照してください: バグ
問題のあるピクセルについて、グラフィック デバッガーは、グラフィック パイプラインから出力された色が正しい色であることを示します。しかし、ピクセルの表示色が間違っています。参照:デバッガ
私の調査から、これらのピクセルが他の素材からの情報を使用しているように見えることがわかりました。私の資料情報は記述子ヒープによって処理されます。したがって、レンダリング ループ内のグラフィックス ルート記述子テーブル間の切り替えが問題のようです (オブジェクトを 1 つしか描画しない場合はすべて問題ありません)。
ここで私が使用するコードスニペット:
void ForwardLighningEffect::pushCommands(ForwardLigthningPushArgs data, ID3D12GraphicsCommandList* commandList, int frameIndex) {
// set PSO
commandList->SetPipelineState(m_mainPipelineStateObject);
// set root signature
commandList->SetGraphicsRootSignature(m_rootSignature);
// set constant buffer view
commandList->SetGraphicsRootConstantBufferView(0, m_constantBufferUploadHeaps[frameIndex]->GetGPUVirtualAddress());
const auto& meshes = data.model->getMeshes();
for (auto mesh : meshes)
{
if (auto materialHandle = mesh->material.lock()) // get material handle from weak ptr.
{
ID3D12DescriptorHeap * matDescriptorHeap = materialHandle->material.descriptorHeap;
// set the material descriptor heap
ID3D12DescriptorHeap* descriptorHeaps[] = { matDescriptorHeap };
commandList->SetDescriptorHeaps(_countof(descriptorHeaps), descriptorHeaps);
// HERE ! set the descriptor table to the descriptor heap (parameter 1, as constant buffer root descriptor is parameter index 0)
commandList->SetGraphicsRootDescriptorTable(1, matDescriptorHeap->GetGPUDescriptorHandleForHeapStart());
}
commandList->IASetVertexBuffers(0, 1, &mesh->vertexBuffer.bufferView);
commandList->IASetIndexBuffer(&mesh->indexBuffer.bufferView);
for (auto camera : data.cameras)
{
updateConstantBuffer(camera, frameIndex);
// Draw mesh.
commandList->DrawIndexedInstanced(mesh->nbIndices, 1, 0, 0, 0);
}
}
}
どうしたの ?