When supported by the D3D12 version we're using, we can create a sync-only queue, which can only have signals and waits on it and is lighter weight than any other queue type. On this queue, we can do waits for all of our internal fences to complete, followed by a signal for the caller's fence, which effectively allows us to broadcast the signal to only complete when all internal timelines reach the appropriate completion point.
When supported by the D3D12 version we're using, we can create a sync-only queue, which can only have signals and waits on it and is lighter weight than any other queue type. On this queue, we can do waits for all of our internal fences to complete, followed by a signal for the caller's fence, which effectively allows us to broadcast the signal to only complete when all internal timelines reach the appropriate completion point.