Fix for crash with landscapes when using -rhivalidation. Ensures that the RHIBuffer is held for the life of the frame because not all RHI backends will have the SRV maintain a hard reference to the source buffer

#jira UE-143221
#rb mihnea.balta
#preflight 621fcf56e15c51d8c50b9b9a
#lockdown michal.valient

#ROBOMERGE-AUTHOR: rob.krajcarski
#ROBOMERGE-SOURCE: CL 19228270 in //UE5/Release-5.0/... via CL 19229143
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v921-19075845)

[CL 19231609 by rob krajcarski in ue5-main branch]
This commit is contained in:
rob krajcarski
2022-03-02 17:32:07 -05:00
parent aaaa17b5e6
commit 030deeb136
2 changed files with 9 additions and 2 deletions

View File

@@ -1091,11 +1091,11 @@ void FLandscapeSceneViewExtension::PreRenderView_RenderThread(FRHICommandListImm
}
FRHIResourceCreateInfo CreateInfoLODBuffer(TEXT("LandscapeLODDataBuffer"), &LandscapeLODData);
FBufferRHIRef LandscapeLODDataBuffer = RHICreateVertexBuffer(LandscapeLODData.GetResourceDataSize(), BUF_ShaderResource | BUF_Volatile, CreateInfoLODBuffer);
LandscapeLODDataBuffer = RHICreateVertexBuffer(LandscapeLODData.GetResourceDataSize(), BUF_ShaderResource | BUF_Volatile, CreateInfoLODBuffer);
LODDataSRV = RHICreateShaderResourceView(LandscapeLODDataBuffer, sizeof(float), PF_R32_FLOAT);
FRHIResourceCreateInfo CreateInfoIndirection(TEXT("LandscapeIndirectionBuffer"), &LandscapeIndirection);
FBufferRHIRef LandscapeIndirectionBuffer = RHICreateVertexBuffer(LandscapeIndirection.GetResourceDataSize(), BUF_ShaderResource | BUF_Volatile, CreateInfoIndirection);
LandscapeIndirectionBuffer = RHICreateVertexBuffer(LandscapeIndirection.GetResourceDataSize(), BUF_ShaderResource | BUF_Volatile, CreateInfoIndirection);
IndirectionSRV = RHICreateShaderResourceView(LandscapeIndirectionBuffer, sizeof(uint32), PF_R32_UINT);
}
else
@@ -1116,6 +1116,9 @@ void FLandscapeSceneViewExtension::EndFrame_RenderThread()
RenderSystem.EndFrame();
}
LandscapeLODDataBuffer = FBufferRHIRef();
LandscapeIndirectionBuffer = FBufferRHIRef();
}
//

View File

@@ -497,6 +497,10 @@ public:
virtual void PreRenderViewFamily_RenderThread(FRHICommandListImmediate& RHICmdList, FSceneViewFamily& InViewFamily) override;
virtual void PreRenderView_RenderThread(FRHICommandListImmediate& RHICmdList, FSceneView& InView) override;
private:
FBufferRHIRef LandscapeLODDataBuffer;
FBufferRHIRef LandscapeIndirectionBuffer;
};