Flickering/Artifacting Render Target Texture From Compute Shader

I have been working on an old project of mine again about wave simulations. When I last worked on this project, I had a 1070 and everything worked fine.

But picking up the project again with my new GPU (3080), the resulting render target from my compute shaders has some flickering/artifacts.

A complete description of the error that is happening:

Displacement Map (Render Target) has flickering only on the G and B channels. Also only on the left side of the image.
My 1070 did not have this issue, and now I am having this issue with my 3080.
The only thing that changed was the GPU, my code has been the same. However, I did change from 4.24 to 4.26 engine versions.

General Outline of the code structure

On Start, initialize the complex number buffers for our FFT
Mesh MarksDynamic data as dirty each tick.
An FRDGBuilder is created where we update the ocean spectrum with time, execute FFT with resulting Dkx, DKy, and DKz. This followed by pushing them to the displacement map UAV.

I mentioned earlier that the artifacting is only happening on the G and B channels of my displacement map, I am not sure what this is about other than that the first FFT I perform is the R channel.

Here is the snippet of building my graph:

float GravityConstant = FMath::Abs(GravityZ) / 100.0f;
// make sure we are not going larger than max
uint32 DispatchCountX = FMath::DivideAndRoundUp((Params.DispMapDimension), (uint32)16);
uint32 DispatchCountY = FMath::DivideAndRoundUp(Params.DispMapDimension, (uint32)16);
check(DispatchCountX <= 65535);
check(DispatchCountY <= 65535);

#if ENGINE_MINOR_VERSION >= 25
FGlobalShaderMap* ShaderMap = GetGlobalShaderMap(ERHIFeatureLevel::SM5);
#else
TShaderMap<FGlobalShaderType>* ShaderMap = GetGlobalShaderMap(ERHIFeatureLevel::SM5);
#endif  
// graph builder for chaining shader calls and adding them into execution list
FRDGBuilder GraphBuilder(RHICmdList);

/* update ocean spectrum (pre-IFFT setup) */
FOceanUpdateSpectrumCS::UpdateSpectrumPass(GraphBuilder, Params, ViewsSRV, ViewsUAV, DispatchCountX, DispatchCountY, ShaderMap);

/* Dkx IFFT (NO FLICKERING ON R CHANNEL)*/
FOceanHorizontalIFFTCS::IFFTPass(GraphBuilder, Params, ViewsSRV, ViewsUAV, DispatchCountX, DispatchCountY, ShaderMap, 2);
FOceanDkxVerticalIFFTCS::IFFTPass_Dkx(GraphBuilder, Params, ViewsSRV, ViewsUAV, DispatchCountX, DispatchCountY, ShaderMap);

/* Dky IFFT (FLICKERING HAPPENING ON G CHANNEL)*/
FOceanHorizontalIFFTCS::IFFTPass(GraphBuilder, Params, ViewsSRV, ViewsUAV, DispatchCountX, DispatchCountY, ShaderMap, 1);
FOceanDkyVerticalIFFTCS::IFFTPass_Dky(GraphBuilder, Params, ViewsSRV, ViewsUAV, ShaderMap);

/* Dkz IFFT (FLICKERING HAPPENING ON B CHANNEL)*/
FOceanHorizontalIFFTCS::IFFTPass(GraphBuilder, Params, ViewsSRV, ViewsUAV, DispatchCountX, DispatchCountY, ShaderMap, 0);
FOceanDkzVerticalIFFTCS::IFFTPass_Dz(GraphBuilder, Params, ViewsSRV, ViewsUAV, ShaderMap);

/* Update Ocean Displacement Map */
FOceanUpdateDisplacementMapCS::UpdateDisplacement(GraphBuilder, Params, ViewsSRV, ViewsUAV, DispatchCountX, DispatchCountY, ShaderMap);

/* Update Ocean Details */
FOceanGenerateGradientFoldingMapCS::UpdateGradientMap(GraphBuilder, Params, ViewsSRV, ViewsUAV, DispatchCountX, DispatchCountY, ShaderMap);
FOceanFoamMapCS::UpdateFoamMap(GraphBuilder, Params, ViewsSRV, ViewsUAV, DispatchCountX, DispatchCountY, ShaderMap);

/* Optional Blur */
FDirectionalBoxBlur::UpdateDirectionalBlur(GraphBuilder, Params, ViewsSRV, ViewsUAV, DispatchCountX, DispatchCountY, ShaderMap, (uint32)1);
FDirectionalBoxBlur::UpdateDirectionalBlur(GraphBuilder, Params, ViewsSRV, ViewsUAV, DispatchCountX, DispatchCountY, ShaderMap, (uint32)0);

/* DEBUG TESTS */
#ifdef DEBUG_MODE_PASS
FDebugPass::VertexDebugTest(GraphBuilder, Params, ViewsSRV, ViewsUAV, MeshParameters, DispatchCountX, DispatchCountY, ShaderMap);
#endif // DEBUG_MODE_PASS

GraphBuilder.Execute();

Gif of issue happening. You can see it on the left side.

I managed to fix this after coming back to it after a couple of months. The answer was using the 4.26 RHITransition APIs. Here is what my render graph looks like now

FRDGBuilder GraphBuilder(RHICmdList);
//RHICmdList.ClearUAVFloat(ViewsUAV.DisplacementMapUAV, FVector4(0.0f, 0.0f, 0.0f, 0.0f));
//RHICmdList.ClearUAVFloat(ViewsUAV.GradientFoldingMapUAV, FVector4(0.0f, 0.0f, 0.0f, 0.0f));
//RHICmdList.ClearUAVFloat(ViewsUAV.FoamMapUAV, FVector4(0.0f, 0.0f, 0.0f, 0.0f));
RHICmdList.Transition(FRHITransitionInfo(ViewsUAV.HtkUAV, ERHIAccess::Unknown, ERHIAccess::CopyDest));
RHICmdList.Transition(FRHITransitionInfo(ViewsUAV.HxkUAV, ERHIAccess::Unknown, ERHIAccess::CopyDest));
RHICmdList.Transition(FRHITransitionInfo(ViewsUAV.HtUAV, ERHIAccess::Unknown, ERHIAccess::CopyDest));


/* update ocean spectrum (pre-IFFT setup) */
FOceanUpdateSpectrumCS::AddComputePass(GraphBuilder, Params, ViewsSRV, ViewsUAV, DispatchCountX, DispatchCountY, ShaderMap);

RHICmdList.Transition(FRHITransitionInfo(ViewsUAV.HtkUAV, ERHIAccess::CopyDest, ERHIAccess::CopySrc));
RHICmdList.Transition(FRHITransitionInfo(ViewsUAV.HxkUAV, ERHIAccess::CopyDest, ERHIAccess::CopySrc));
RHICmdList.Transition(FRHITransitionInfo(ViewsUAV.HtUAV, ERHIAccess::CopyDest, ERHIAccess::CopySrc));


/* Dkz IFFT */
RHICmdList.Transition(FRHITransitionInfo(ViewsUAV.DzUAV, ERHIAccess::Unknown, ERHIAccess::UAVCompute));
RHICmdList.Transition(FRHITransitionInfo(ViewsUAV.DxUAV, ERHIAccess::Unknown, ERHIAccess::UAVCompute));
RHICmdList.Transition(FRHITransitionInfo(ViewsUAV.DyUAV, ERHIAccess::Unknown, ERHIAccess::UAVCompute));
RHICmdList.Transition(FRHITransitionInfo(ViewsUAV.FFTWorkUAV, ERHIAccess::Unknown, ERHIAccess::UAVCompute));

FOceanHorizontalIFFTCS::AddComputePass(GraphBuilder, Params, ViewsSRV, ViewsUAV, DispatchCountX, DispatchCountY, ShaderMap, 0);
FOceanDkzVerticalIFFTCS::AddComputePass(GraphBuilder, Params, ViewsSRV, ViewsUAV, ShaderMap);

/* Dkx IFFT */
FOceanHorizontalIFFTCS::AddComputePass(GraphBuilder, Params, ViewsSRV, ViewsUAV, DispatchCountX, DispatchCountY, ShaderMap, 2);
FOceanDkxVerticalIFFTCS::AddComputePass(GraphBuilder, Params, ViewsSRV, ViewsUAV, DispatchCountX, DispatchCountY, ShaderMap);

/* Dky IFFT */
FOceanHorizontalIFFTCS::AddComputePass(GraphBuilder, Params, ViewsSRV, ViewsUAV, DispatchCountX, DispatchCountY, ShaderMap, 1);
FOceanDkyVerticalIFFTCS::AddComputePass(GraphBuilder, Params, ViewsSRV, ViewsUAV, ShaderMap);

RHICmdList.Transition(FRHITransitionInfo(ViewsUAV.DzUAV, ERHIAccess::UAVCompute, ERHIAccess::SRVCompute));
RHICmdList.Transition(FRHITransitionInfo(ViewsUAV.DxUAV, ERHIAccess::UAVCompute, ERHIAccess::SRVCompute));
RHICmdList.Transition(FRHITransitionInfo(ViewsUAV.DyUAV, ERHIAccess::UAVCompute, ERHIAccess::SRVCompute));
RHICmdList.Transition(FRHITransitionInfo(ViewsUAV.FFTWorkUAV, ERHIAccess::UAVCompute, ERHIAccess::CopySrc));

/* Update Ocean Displacement Map */
RHICmdList.Transition(FRHITransitionInfo(ViewsUAV.DisplacementMapUAV, ERHIAccess::Unknown, ERHIAccess::CopyDest));
FOceanUpdateDisplacementMapCS::AddComputePass(GraphBuilder, Params, ViewsSRV, ViewsUAV, DispatchCountX, DispatchCountY, ShaderMap);
RHICmdList.Transition(FRHITransitionInfo(ViewsUAV.DisplacementMapUAV, ERHIAccess::CopyDest, ERHIAccess::CopySrc));

/* Update Ocean Details */
RHICmdList.Transition(FRHITransitionInfo(ViewsUAV.GradientFoldingMapUAV, ERHIAccess::Unknown, ERHIAccess::CopyDest));
FOceanGenerateGradientFoldingMapCS::AddComputePass(GraphBuilder, Params, ViewsSRV, ViewsUAV, DispatchCountX, DispatchCountY, ShaderMap);
RHICmdList.Transition(FRHITransitionInfo(ViewsUAV.GradientFoldingMapUAV, ERHIAccess::CopyDest, ERHIAccess::CopySrc));

RHICmdList.Transition(FRHITransitionInfo(ViewsUAV.FoamMapUAV, ERHIAccess::Unknown, ERHIAccess::CopyDest));
FOceanFoamMapCS::AddComputePass(GraphBuilder, Params, ViewsSRV, ViewsUAV, DispatchCountX, DispatchCountY, ShaderMap);
RHICmdList.Transition(FRHITransitionInfo(ViewsUAV.FoamMapUAV, ERHIAccess::CopyDest, ERHIAccess::UAVCompute));

/* Optional Blur */
FDirectionalBoxBlur::AddComputePass(GraphBuilder, Params, ViewsSRV, ViewsUAV, DispatchCountX, DispatchCountY, ShaderMap, (uint32)1);
RHICmdList.Transition(FRHITransitionInfo(ViewsUAV.FoamMapUAV, ERHIAccess::UAVCompute, ERHIAccess::UAVCompute));
FDirectionalBoxBlur::AddComputePass(GraphBuilder, Params, ViewsSRV, ViewsUAV, DispatchCountX, DispatchCountY, ShaderMap, (uint32)0);

RHICmdList.Transition(FRHITransitionInfo(ViewsUAV.DisplacementMapUAV, ERHIAccess::CopyDest, ERHIAccess::SRVGraphics));
RHICmdList.Transition(FRHITransitionInfo(ViewsUAV.GradientFoldingMapUAV, ERHIAccess::CopySrc, ERHIAccess::SRVGraphics));
RHICmdList.Transition(FRHITransitionInfo(ViewsUAV.FoamMapUAV, ERHIAccess::SRVCompute, ERHIAccess::SRVGraphics));

GraphBuilder.Execute();