[RDG] How to erase previous compute result?

I am now making FFT Ocean using RDG. Problem is previous compute result is exist on present compute result. I did huge effort during past week for find related method or solution but I could not found in internet. please look below render target screen shot.

previous pass and present pass is independent from each other. two graph builder, two compute shader. I am beginner so I using only very basic RDG code. following code that I did.

#include "../../Public/Experiment/ExperimentShaderTwiddle.h"

IMPLEMENT_GLOBAL_SHADER(FExperimentShaderTwiddle, "/Shaders/Experiment/Twiddle.usf", "Main", SF_Compute)

void FExperimentShaderTwiddle::Prepare(FExperimentShaderTwiddleConfig ShaderConfig)
{
	ENQUEUE_RENDER_COMMAND(RenderTwiddleTexture)([this, ShaderConfig](FRHICommandListImmediate& RHICmdList)
	{
		Execute(RHICmdList, ShaderConfig);
	});
}

void FExperimentShaderTwiddle::Execute(FRHICommandListImmediate& RHICmdList, FExperimentShaderTwiddleConfig ShaderConfig)
{
	const TShaderMapRef<FExperimentShaderTwiddle> ComputeShader(GetGlobalShaderMap(GMaxRHIFeatureLevel));
	FRDGBuilder GraphBuilder(RHICmdList);
	
	const FRDGTextureRef TextureReference = GraphBuilder.CreateTexture(
		FRDGTextureDesc::Create2D(
			FIntPoint(ShaderConfig.RenderTarget->SizeX, ShaderConfig.RenderTarget->SizeY),
			PF_FloatRGBA,
			FClearValueBinding(),
			TexCreate_UAV,
			1,
			1
		), TEXT("OutputTexture")
	);
	
	FParameters* ShaderParameters = GraphBuilder.AllocParameters<FParameters>();
	ShaderParameters->OutputTexture = GraphBuilder.CreateUAV(FRDGTextureUAVDesc(TextureReference));
	
	FComputeShaderUtils::AddPass(
		GraphBuilder, RDG_EVENT_NAME("ExecuteShaderTwiddle"),
		ComputeShader, ShaderParameters, FIntVector(16, 16, 1)
	);
	
	TRefCountPtr<IPooledRenderTarget> PooledRenderTarget;
	
	GraphBuilder.QueueTextureExtraction(TextureReference, &PooledRenderTarget);

	GraphBuilder.Execute();

	RHICmdList.CopyToResolveTarget(
		PooledRenderTarget.GetReference()->GetRenderTargetItem().TargetableTexture,
		ShaderConfig.RenderTarget->GetRenderTargetResource()->TextureRHI,
		FResolveParams()
	);
}

I am looking for how to remove previous compute result in GPU thread. I think it exist on threads when running other pass. hope to meet my hero. thanks.

1 Like