My current setup is a forward renderer, I build a command list to make render calls and then copy upload-heap data to default-heap data (mostly MVPs and such). Then I switch to a different "frame" and do the same thing while the first set of calls get processed. I have a fence at the beginning of each frame to make sure that all the data has been copied for the new frame before I begin making new draw calls. I rarely have to wait on it because of the dual-frame setup.
I started thinking about how to do things for a deferred render. It's going to need to wait for the G Buffer textures to be generated each frame. Even if I spread it out to 3 frames, I can't think of a setup where I don't end up waiting for either the default-heap copy of MVP data or the G-Buffer texture data. It seems like that's going to be inherent in a setup where I need to render a texture as an input to another texture, but I was wondering if anyone had any advice on how to maximize the GPU usage for a deferred renderer with DirectX 12.