UE4 - rework RHI user-facing APIs to be safer and incorporate the desired sematics

[CL 2119499 by Gil Gribb in Main branch]
This commit is contained in:
Gil Gribb
2014-06-27 11:07:13 -04:00
committed by UnrealBot
parent 9576f1f08d
commit 1d50eae0de
263 changed files with 2777 additions and 2645 deletions
@@ -22,14 +22,14 @@ FForwardShadingSceneRenderer::FForwardShadingSceneRenderer(const FSceneViewFamil
* Initialize scene's views.
* Check visibility, sort translucent items, etc.
*/
void FForwardShadingSceneRenderer::InitViews()
void FForwardShadingSceneRenderer::InitViews(FRHICommandListImmediate& RHICmdList)
{
SCOPED_DRAW_EVENT(InitViews, DEC_SCENE_ITEMS);
SCOPE_CYCLE_COUNTER(STAT_InitViewsTime);
PreVisibilityFrameSetup();
ComputeViewVisibility();
PreVisibilityFrameSetup(RHICmdList);
ComputeViewVisibility(RHICmdList);
PostVisibilityFrameSetup();
OnStartFrame();
@@ -38,7 +38,7 @@ void FForwardShadingSceneRenderer::InitViews()
/**
* Renders the view family.
*/
void FForwardShadingSceneRenderer::Render()
void FForwardShadingSceneRenderer::Render(FRHICommandListImmediate& RHICmdList)
{
if(!ViewFamily.EngineShowFlags.Rendering)
{
@@ -48,21 +48,18 @@ void FForwardShadingSceneRenderer::Render()
auto FeatureLevel = ViewFamily.Scene->GetFeatureLevel();
// Initialize global system textures (pass-through if already initialized).
GSystemTextures.InitializeTextures(FeatureLevel);
GSystemTextures.InitializeTextures(RHICmdList, FeatureLevel);
// Allocate the maximum scene render target space for the current view family.
GSceneRenderTargets.Allocate(ViewFamily);
// Find the visible primitives.
InitViews();
//@todo-rco: RHIPacketList
FRHICommandList& RHICmdList = FRHICommandList::GetNullRef();
InitViews(RHICmdList);
// Notify the FX system that the scene is about to be rendered.
if (Scene->FXSystem)
{
Scene->FXSystem->PreRender();
Scene->FXSystem->PreRender(RHICmdList);
}
GRenderTargetPool.VisualizeTexture.OnStartFrame(Views[0]);
@@ -79,7 +76,7 @@ void FForwardShadingSceneRenderer::Render()
else
{
// Begin rendering to scene color
GSceneRenderTargets.BeginRenderingSceneColor(false);
GSceneRenderTargets.BeginRenderingSceneColor(RHICmdList, false);
}
// Clear color and depth buffer
@@ -89,12 +86,12 @@ void FForwardShadingSceneRenderer::Render()
RenderForwardShadingBasePass(RHICmdList);
// Make a copy of the scene depth if the current hardware doesn't support reading and writing to the same depth buffer
GSceneRenderTargets.ResolveSceneDepthToAuxiliaryTexture();
GSceneRenderTargets.ResolveSceneDepthToAuxiliaryTexture(RHICmdList);
// Notify the FX system that opaque primitives have been rendered.
if (Scene->FXSystem)
{
Scene->FXSystem->PostRenderOpaque();
Scene->FXSystem->PostRenderOpaque(RHICmdList);
}
// Draw translucency.
@@ -107,7 +104,7 @@ void FForwardShadingSceneRenderer::Render()
// to apply refraction effect by distorting the scene color
RenderDistortion(RHICmdList);
}
RenderTranslucency();
RenderTranslucency(RHICmdList);
}
if( !bGammaSpace )
@@ -130,7 +127,7 @@ void FForwardShadingSceneRenderer::Render()
FIntPoint PrePostSourceViewportSize = GSceneRenderTargets.GetBufferSizeXY();
FMemMark Mark(FMemStack::Get());
FRenderingCompositePassContext CompositeContext(View);
FRenderingCompositePassContext CompositeContext(RHICmdList, View);
FRenderingCompositePass* PostProcessSunMask = CompositeContext.Graph.RegisterPass(new(FMemStack::Get()) FRCPassPostProcessSunMaskES2(PrePostSourceViewportSize, true));
CompositeContext.Root->AddDependency(FRenderingCompositeOutputRef(PostProcessSunMask));
@@ -138,10 +135,10 @@ void FForwardShadingSceneRenderer::Render()
}
// Resolve the scene color for post processing.
GSceneRenderTargets.ResolveSceneColor(FResolveRect(0, 0, ViewFamily.FamilySizeX, ViewFamily.FamilySizeY));
GSceneRenderTargets.ResolveSceneColor(RHICmdList, FResolveRect(0, 0, ViewFamily.FamilySizeX, ViewFamily.FamilySizeY));
// Drop depth and stencil before post processing to avoid export.
RHIDiscardRenderTargets(true, true, 0);
RHICmdList.DiscardRenderTargets(true, true, 0);
// Finish rendering for each view.
{
@@ -150,10 +147,10 @@ void FForwardShadingSceneRenderer::Render()
for(int32 ViewIndex = 0;ViewIndex < Views.Num();ViewIndex++)
{
SCOPED_CONDITIONAL_DRAW_EVENTF(EventView, Views.Num() > 1, DEC_SCENE_ITEMS, TEXT("View%d"), ViewIndex);
GPostProcessing.ProcessES2( Views[ViewIndex], bOnChipSunMask );
GPostProcessing.ProcessES2(RHICmdList, Views[ViewIndex], bOnChipSunMask);
}
}
}
RenderFinish();
RenderFinish(RHICmdList);
}