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.