Steps to Reproduce
We’re having an issue similar to the one described in this forum thread: 5.6.1 D3D12 GPU crash in RayTracing AnyHit
The difference is that the hang/AddressTranslationError occurs in an AS Build or Refit rather than the AnyHit shader.
I added some more detailed event markers to get a better idea of what’s happening in breadcrumbs- check the attached logfile. Surprisingly, the breadcrumbs seem to show that the HairStrands::CardsDeformation passes are being executed on both the Graphics queue and the AsyncCompute queue.
GraphBuilder.AddPass(
RDG_EVENT_NAME("HairStrands::CardsDeformation(%s)", bSupportDynamicMesh ? TEXT("Dynamic") : TEXT("Static")),
Parameters,
ERDGPassFlags::Compute,
[Parameters, ComputeShader, DispatchCount, CardsRestPositionBuffer, CardsRestTangentBuffer, bManualFetch](FRDGAsyncTask, FRHIComputeCommandList& RHICmdList)
{
// On platforms not supporting manual vertex fetching, ensure the resources are in 'VerteOrIndexBuffer' state after position/normals update
if (!bManualFetch)
{
RHICmdList.Transition(FRHITransitionInfo(CardsRestPositionBuffer, ERHIAccess::Unknown, ERHIAccess::SRVMask));
RHICmdList.Transition(FRHITransitionInfo(CardsRestTangentBuffer, ERHIAccess::Unknown, ERHIAccess::SRVMask));
}
FComputeShaderUtils::Dispatch(RHICmdList, ComputeShader, *Parameters, DispatchCount);
if (!bManualFetch)
{
RHICmdList.Transition(FRHITransitionInfo(CardsRestPositionBuffer, ERHIAccess::SRVMask, ERHIAccess::VertexOrIndexBuffer));
RHICmdList.Transition(FRHITransitionInfo(CardsRestTangentBuffer, ERHIAccess::SRVMask, ERHIAccess::VertexOrIndexBuffer));
}
});
My understanding is that the Compute PassFlag being passed in means the RHICmdList passed in from GraphBuilder should execute the pass (and the dispatch call in the pass) on the graphics/default queue. So I guess my question is- how trustworthy are the breadcrumbs here/is it intended for these interpolation passes to be run on AsyncCompute?
If it helps, this is how I added the markers in GroomManager.cpp.
// Cards only - Deform final cards geometry (using guides)
for (uint32 InstanceIndex : CardInstances)
{
FInstanceData& InstanceData = InstanceDatas[InstanceIndex];
FHairGroupInstance::FCards::FLOD& LOD = *InstanceData.CardInstance;
if (InstanceData.bNeedDeformation)
{
// 1. Cards are deformed based on guides motion (simulation or RBF applied on guides)
if (InstanceData.CardsSimulationType == EHairCardsSimulationType::Guide)
{
RDG_EVENT_SCOPE_STAT(GraphBuilder, HairCardsInterpolation, "CardsDeformationPass");
AddHairCardsDeformationPass(
GraphBuilder,
ShaderMap,
View->GetFeatureLevel(),
ShaderPrintData,
InstanceData.Instance,
InstanceData.HairLODIndex,
InstanceData.MeshLODIndex,
CardPositionExternalAccessPipeline);
}
}
}
[Attachment Removed]