| 363 | } |
| 364 | |
| 365 | void RenderInner(SceneRenderTask* task, RenderContext& renderContext, RenderContextBatch& renderContextBatch) |
| 366 | { |
| 367 | auto context = GPUDevice::Instance->GetMainContext(); |
| 368 | auto* graphicsSettings = GraphicsSettings::Get(); |
| 369 | auto& view = renderContext.View; |
| 370 | ASSERT(renderContext.Buffers && renderContext.Buffers->GetWidth() > 0); |
| 371 | |
| 372 | // Perform postFx volumes blending and query before rendering |
| 373 | task->CollectPostFxVolumes(renderContext); |
| 374 | renderContext.List->BlendSettings(); |
| 375 | { |
| 376 | auto aaMode = EnumHasAnyFlags(renderContext.View.Flags, ViewFlags::AntiAliasing) ? renderContext.List->Settings.AntiAliasing.Mode : AntialiasingMode::None; |
| 377 | if (aaMode == AntialiasingMode::TemporalAntialiasing && view.IsOrthographicProjection()) |
| 378 | aaMode = AntialiasingMode::None; // TODO: support TAA in ortho projection (see RenderView::Prepare to jitter projection matrix better) |
| 379 | renderContext.List->Settings.AntiAliasing.Mode = aaMode; |
| 380 | } |
| 381 | |
| 382 | // Initialize setup |
| 383 | RenderSetup& setup = renderContext.List->Setup; |
| 384 | const bool isGBufferDebug = GBufferPass::IsDebugView(renderContext.View.Mode); |
| 385 | { |
| 386 | PROFILE_CPU_NAMED("Setup"); |
| 387 | const int32 screenWidth = renderContext.Buffers->GetWidth(); |
| 388 | const int32 screenHeight = renderContext.Buffers->GetHeight(); |
| 389 | setup.UpscaleLocation = renderContext.Task->UpscaleLocation; |
| 390 | if (screenWidth < 16 || screenHeight < 16 || renderContext.Task->IsCameraCut || isGBufferDebug || renderContext.View.Mode == ViewMode::NoPostFx) |
| 391 | setup.UseMotionVectors = false; |
| 392 | else |
| 393 | { |
| 394 | const MotionBlurSettings& motionBlurSettings = renderContext.List->Settings.MotionBlur; |
| 395 | const ScreenSpaceReflectionsSettings ssrSettings = renderContext.List->Settings.ScreenSpaceReflections; |
| 396 | setup.UseMotionVectors = |
| 397 | (EnumHasAnyFlags(renderContext.View.Flags, ViewFlags::MotionBlur) && motionBlurSettings.Enabled && motionBlurSettings.Scale > ZeroTolerance) || |
| 398 | renderContext.View.Mode == ViewMode::MotionVectors || |
| 399 | (ssrSettings.Intensity > ZeroTolerance && ssrSettings.TemporalEffect && EnumHasAnyFlags(renderContext.View.Flags, ViewFlags::SSR)) || |
| 400 | renderContext.List->Settings.AntiAliasing.Mode == AntialiasingMode::TemporalAntialiasing; |
| 401 | } |
| 402 | setup.UseTemporalAAJitter = renderContext.List->Settings.AntiAliasing.Mode == AntialiasingMode::TemporalAntialiasing; |
| 403 | setup.UseGlobalSurfaceAtlas = renderContext.View.Mode == ViewMode::GlobalSurfaceAtlas || |
| 404 | (EnumHasAnyFlags(renderContext.View.Flags, ViewFlags::GI) && renderContext.List->Settings.GlobalIllumination.Mode == GlobalIlluminationMode::DDGI); |
| 405 | setup.UseGlobalSDF = (graphicsSettings->EnableGlobalSDF && EnumHasAnyFlags(view.Flags, ViewFlags::GlobalSDF)) || |
| 406 | renderContext.View.Mode == ViewMode::GlobalSDF || |
| 407 | setup.UseGlobalSurfaceAtlas; |
| 408 | setup.UseVolumetricFog = (view.Flags & ViewFlags::Fog) != ViewFlags::None; |
| 409 | |
| 410 | // Disable TAA jitter in debug modes |
| 411 | switch (renderContext.View.Mode) |
| 412 | { |
| 413 | case ViewMode::Unlit: |
| 414 | case ViewMode::Diffuse: |
| 415 | case ViewMode::Normals: |
| 416 | case ViewMode::Depth: |
| 417 | case ViewMode::Emissive: |
| 418 | case ViewMode::AmbientOcclusion: |
| 419 | case ViewMode::Metalness: |
| 420 | case ViewMode::Roughness: |
| 421 | case ViewMode::Specular: |
| 422 | case ViewMode::SpecularColor: |
no test coverage detected