GPU Crash in RTAS build for hair/grooms with mutable

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]