How do I get light/shadow buffer?

this is MyCode:

void UDynamicAccessGBufferRenderTarget::CaputerGBuffer_RenderThread(FCommitRenderData* pRenderData)
{
	FRHICommandListImmediate& RHICmdList = GRHICommandList.GetImmediateCommandList();
	//计数加一避免Render完成后直接清空了GBuffer,但会慢一帧,你猜
	FSceneRenderTargets::Get(RHICmdList).AdjustGBufferRefCount(RHICmdList, 1);
	FSceneRenderTargets& SceneContext = FSceneRenderTargets::Get(RHICmdList);
	if (SceneContext.GBufferA && pRenderData->mTextureTarget != nullptr)
	{
		FTexture2DRHIRef vTextTarget;
		switch (pRenderData->EShowBuff)
		{
		case EDZShowGbuffer::VE_GDZSHOWBUFFERA:
			vTextTarget = SceneContext.GetGBufferATexture();
			break;
		case EDZShowGbuffer::VE_GDZSHOWBUFFERB:
			vTextTarget = SceneContext.GetGBufferBTexture();
			break;
		case EDZShowGbuffer::VE_GDZSHOWBUFFERC:
			vTextTarget = SceneContext.GetGBufferCTexture();
			break;
		case EDZShowGbuffer::VE_GDZSHOWBUFFERD:
			vTextTarget = SceneContext.GetGBufferDTexture();
			break;
		case EDZShowGbuffer::VE_GDZSHOWBUFFERE:
			vTextTarget = SceneContext.GetGBufferETexture();
			break;
			break;
		default:
			vTextTarget = SceneContext.GetGBufferATexture();
			break;
		}
		pRenderData->format = vTextTarget->GetFormat();
		if (pRenderData->canvasWidth != vTextTarget->GetSizeX())
		{
			pRenderData->isGetGBufferData = false;
			return;
		}
		FTextureReferenceRHIRef vTexRHIRef = pRenderData->mTextureTarget->TextureReference.TextureReferenceRHI;
		FRHITexture* vRTTexture = vTexRHIRef->GetTextureReference()->GetReferencedTexture();
		FRHITexture2D* vtex = (FRHITexture2D*)vRTTexture;
		if (vtex == nullptr)
		{
			return;
		}
		switch (pRenderData->ECOPYBuffType)
		{
		case EDZCOPYGbufferType::VE_GDZSHOWGBUFFER_COPYMIP:
			UDynamicAccessGBufferRenderTarget::Copy_TextureRHI(RHICmdList,vtex, vTextTarget);
			break;
		case EDZCOPYGbufferType::VE_GDZSHOWBUFFERR_COPYMEMO:
			UDynamicAccessGBufferRenderTarget::Copy_MemoryRHI(RHICmdList, vtex, vTextTarget);
			break;
		case EDZCOPYGbufferType::VE_GDZSHOWBUFFERC_CPUARRAY:
			UDynamicAccessGBufferRenderTarget::Copy_CPUArrayRHI();
			break;
		default:
			break;
		}
		RHICmdList.CopySharedMips(vtex, vTextTarget);
	}
	//移除
	FSceneRenderTargets::Get(RHICmdList).AdjustGBufferRefCount(RHICmdList, -1);
}

Two ways with Access the data to view:

    //利用SharedMip的共享方式在这里会快一些
    //扩展方式
    void UDynamicAccessGBufferRenderTarget::Copy_TextureRHI(FRHICommandListImmediate& RHICmdList,FRHITexture2D* pDesc,FRHITexture2D* pSrc)
    {
    	RHICmdList.CopySharedMips(pDesc, pSrc);
    }
    
    //内存CPY,但需要锁住,这样就会让另外的渲染不能访问,会造成掉帧率。
    void UDynamicAccessGBufferRenderTarget::Copy_MemoryRHI(FRHICommandListImmediate& RHICmdList, FRHITexture2D* pDesc, FRHITexture2D* pSrc)
    {
    	uint32 Lolstrid = 0;
    	void * UAVRenderTargetData = RHILockTexture2D(pDesc, 0, RLM_WriteOnly, Lolstrid, true);
    	void * UAVCSData = RHILockTexture2D(pSrc, 0, RLM_ReadOnly, Lolstrid, true);
    	FMemory::Memcpy(UAVRenderTargetData, UAVCSData, GPixelFormats[pSrc->GetFormat()].BlockBytes * pSrc->GetSizeX() * pSrc->GetSizeY());
    	RHICmdList.UnlockTexture2D(pDesc, 0, false);
    	RHICmdList.UnlockTexture2D(pSrc, 0, false);
    }