J'ai une question bizarre graphique ne se passe sur mon Intel HD Graphics 530direct x 12 sur l'image vacillante Intel dur
Lors du rendu d'une image, certains pixels changement de couleur au hasard. Voir l'image suivante: Bug
Pour les pixels problématiques, les graphismes montrent débogueur que la couleur émise par le pipeline graphique est correcte. Mais la couleur affichée par pixel est fausse. Voir: Debugger
De mes recherches, j'ai trouvé que ces pixels semblent utiliser des informations provenant des matériaux des autres. Mes informations sur les matériaux sont gérées par un tas de descripteurs. Ainsi, le commutateur entre les graphiques table de descripteurs racine dans ma boucle de rendu semble être mon problème (quand je dessine un seul objet tout est très bien)
Voici l'extrait de code i utiliser:
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);
}
}
}
Qu'est-ce qui ne va pas?
Vous ne devriez pas utiliser COMMON si vous pouvez l'éviter (même si je pense que vous pourriez dire que c'est un correction de bogue/pilote). Avez-vous déjà écrit sur la texture après le début de la journée? – cmaughan
Merci pour l'avertissement. Je n'écris pas aux textures, je les lie seulement comme des ressources de pixel shader. – Cloyz