diff --git a/Source/Editor/Utilities/ViewportIconsRenderer.cpp b/Source/Editor/Utilities/ViewportIconsRenderer.cpp index 7687a635a..3be828001 100644 --- a/Source/Editor/Utilities/ViewportIconsRenderer.cpp +++ b/Source/Editor/Utilities/ViewportIconsRenderer.cpp @@ -20,6 +20,7 @@ #include "Engine/Audio/AudioListener.h" #include "Engine/Audio/AudioSource.h" #include "Engine/Particles/ParticleEffect.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/Models/ModelInstanceEntry.h" #include "Engine/Animations/SceneAnimations/SceneAnimationPlayer.h" #include "Engine/Engine/EngineService.h" diff --git a/Source/Engine/Animations/SceneAnimations/SceneAnimationPlayer.cpp b/Source/Engine/Animations/SceneAnimations/SceneAnimationPlayer.cpp index 18234c7ef..94e823bbe 100644 --- a/Source/Engine/Animations/SceneAnimations/SceneAnimationPlayer.cpp +++ b/Source/Engine/Animations/SceneAnimations/SceneAnimationPlayer.cpp @@ -10,7 +10,7 @@ #include "Engine/Serialization/MemoryReadStream.h" #include "Engine/Audio/AudioClip.h" #include "Engine/Audio/AudioSource.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Renderer/RenderList.h" #include "Engine/Profiler/ProfilerMemory.h" #include "Engine/Scripting/Scripting.h" diff --git a/Source/Engine/Content/Assets/Model.cpp b/Source/Engine/Content/Assets/Model.cpp index 340726644..88322f08b 100644 --- a/Source/Engine/Content/Assets/Model.cpp +++ b/Source/Engine/Content/Assets/Model.cpp @@ -8,7 +8,7 @@ #include "Engine/Content/Upgraders/ModelAssetUpgrader.h" #include "Engine/Content/Factories/BinaryAssetFactory.h" #include "Engine/Graphics/RenderTools.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/Models/ModelInstanceEntry.h" #include "Engine/Streaming/StreamingGroup.h" #include "Engine/Debug/Exceptions/ArgumentOutOfRangeException.h" diff --git a/Source/Engine/Content/Assets/SkinnedModel.cpp b/Source/Engine/Content/Assets/SkinnedModel.cpp index 7640650bc..f6168ea56 100644 --- a/Source/Engine/Content/Assets/SkinnedModel.cpp +++ b/Source/Engine/Content/Assets/SkinnedModel.cpp @@ -8,7 +8,7 @@ #include "Engine/Streaming/StreamingGroup.h" #include "Engine/Threading/Threading.h" #include "Engine/Graphics/RenderTools.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/Models/Config.h" #include "Engine/Graphics/Models/MeshDeformation.h" #include "Engine/Graphics/Models/ModelInstanceEntry.h" diff --git a/Source/Engine/Debug/DebugDraw.cpp b/Source/Engine/Debug/DebugDraw.cpp index f496df881..a0c19a28e 100644 --- a/Source/Engine/Debug/DebugDraw.cpp +++ b/Source/Engine/Debug/DebugDraw.cpp @@ -15,6 +15,7 @@ #include "Engine/Graphics/GPUDevice.h" #include "Engine/Graphics/GPUPipelineState.h" #include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/RenderBuffers.h" #include "Engine/Graphics/RenderTools.h" #include "Engine/Graphics/DynamicBuffer.h" diff --git a/Source/Engine/Foliage/Foliage.cpp b/Source/Engine/Foliage/Foliage.cpp index 98e7126dd..bf9b94b50 100644 --- a/Source/Engine/Foliage/Foliage.cpp +++ b/Source/Engine/Foliage/Foliage.cpp @@ -9,7 +9,6 @@ #include "Engine/Core/Collections/BitArray.h" #include "Engine/Engine/Engine.h" #include "Engine/Graphics/Graphics.h" -#include "Engine/Graphics/RenderTask.h" #include "Engine/Graphics/RenderTools.h" #include "Engine/Graphics/GPUDevice.h" #include "Engine/Content/Deprecated.h" @@ -20,6 +19,7 @@ #include "Engine/Profiler/ProfilerCPU.h" #include "Engine/Profiler/ProfilerMemory.h" #include "Engine/Renderer/RenderList.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Renderer/GlobalSignDistanceFieldPass.h" #include "Engine/Renderer/GI/GlobalSurfaceAtlasPass.h" #include "Engine/Serialization/Serialization.h" diff --git a/Source/Engine/Graphics/DynamicBuffer.cpp b/Source/Engine/Graphics/DynamicBuffer.cpp index 1fce4c28e..68f751a97 100644 --- a/Source/Engine/Graphics/DynamicBuffer.cpp +++ b/Source/Engine/Graphics/DynamicBuffer.cpp @@ -4,7 +4,7 @@ #include "GPUContext.h" #include "PixelFormatExtensions.h" #include "GPUDevice.h" -#include "RenderTask.h" +#include "RenderContext.h" #include "Engine/Core/Log.h" #include "Engine/Core/Utilities.h" #include "Engine/Core/Math/Math.h" diff --git a/Source/Engine/Graphics/GPUBuffer.cpp b/Source/Engine/Graphics/GPUBuffer.cpp index aafed3961..d3be5587e 100644 --- a/Source/Engine/Graphics/GPUBuffer.cpp +++ b/Source/Engine/Graphics/GPUBuffer.cpp @@ -5,7 +5,7 @@ #include "GPUResourceProperty.h" #include "GPUBufferDescription.h" #include "PixelFormatExtensions.h" -#include "RenderTask.h" +#include "RenderContext.h" #include "Shaders/GPUVertexLayout.h" #include "Async/Tasks/GPUCopyResourceTask.h" #include "Engine/Core/Utilities.h" diff --git a/Source/Engine/Graphics/Materials/DecalMaterialShader.cpp b/Source/Engine/Graphics/Materials/DecalMaterialShader.cpp index 7cf9c96d1..727b11888 100644 --- a/Source/Engine/Graphics/Materials/DecalMaterialShader.cpp +++ b/Source/Engine/Graphics/Materials/DecalMaterialShader.cpp @@ -8,7 +8,7 @@ #include "Engine/Graphics/GPUDevice.h" #include "Engine/Graphics/Shaders/GPUShader.h" #include "Engine/Graphics/RenderBuffers.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/RenderView.h" #include "Engine/Graphics/Shaders/GPUConstantBuffer.h" #include "Engine/Renderer/DrawCall.h" diff --git a/Source/Engine/Graphics/Materials/DeferredMaterialShader.cpp b/Source/Engine/Graphics/Materials/DeferredMaterialShader.cpp index e7ac1fbdb..819870cdc 100644 --- a/Source/Engine/Graphics/Materials/DeferredMaterialShader.cpp +++ b/Source/Engine/Graphics/Materials/DeferredMaterialShader.cpp @@ -4,15 +4,15 @@ #include "MaterialShaderFeatures.h" #include "MaterialParams.h" #include "Engine/Graphics/RenderBuffers.h" -#include "Engine/Graphics/RenderView.h" -#include "Engine/Graphics/GPUContext.h" -#include "Engine/Graphics/Shaders/GPUConstantBuffer.h" -#include "Engine/Graphics/GPUDevice.h" -#include "Engine/Graphics/Shaders/GPUShader.h" -#include "Engine/Graphics/GPULimits.h" -#include "Engine/Graphics/RenderTask.h" -#include "Engine/Renderer/DrawCall.h" #include "Engine/Renderer/RenderList.h" +#include "Engine/Graphics/RenderView.h" +#include "Engine/Graphics/RenderContext.h" +#include "Engine/Graphics/GPUContext.h" +#include "Engine/Graphics/GPUDevice.h" +#include "Engine/Graphics/GPULimits.h" +#include "Engine/Graphics/Shaders/GPUShader.h" +#include "Engine/Graphics/Shaders/GPUConstantBuffer.h" +#include "Engine/Renderer/DrawCall.h" #if USE_EDITOR #include "Engine/Renderer/Lightmaps.h" #endif diff --git a/Source/Engine/Graphics/Materials/DeformableMaterialShader.cpp b/Source/Engine/Graphics/Materials/DeformableMaterialShader.cpp index e99964f0c..5a2323aac 100644 --- a/Source/Engine/Graphics/Materials/DeformableMaterialShader.cpp +++ b/Source/Engine/Graphics/Materials/DeformableMaterialShader.cpp @@ -7,12 +7,12 @@ #include "Engine/Graphics/RenderView.h" #include "Engine/Renderer/DrawCall.h" #include "Engine/Renderer/RenderList.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/GPUContext.h" -#include "Engine/Graphics/Shaders/GPUConstantBuffer.h" #include "Engine/Graphics/GPUDevice.h" -#include "Engine/Graphics/Shaders/GPUShader.h" #include "Engine/Graphics/GPULimits.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/Shaders/GPUShader.h" +#include "Engine/Graphics/Shaders/GPUConstantBuffer.h" PACK_STRUCT(struct DeformableMaterialShaderData { Matrix WorldMatrix; diff --git a/Source/Engine/Graphics/Materials/ForwardMaterialShader.cpp b/Source/Engine/Graphics/Materials/ForwardMaterialShader.cpp index 4e3102d9f..eb0f63f1a 100644 --- a/Source/Engine/Graphics/Materials/ForwardMaterialShader.cpp +++ b/Source/Engine/Graphics/Materials/ForwardMaterialShader.cpp @@ -7,7 +7,7 @@ #include "Engine/Graphics/GPUDevice.h" #include "Engine/Graphics/GPULimits.h" #include "Engine/Graphics/RenderView.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/Shaders/GPUConstantBuffer.h" #include "Engine/Graphics/Shaders/GPUShader.h" #include "Engine/Renderer/DrawCall.h" diff --git a/Source/Engine/Graphics/Materials/MaterialShader.cpp b/Source/Engine/Graphics/Materials/MaterialShader.cpp index 9391ec8b3..51c6d49fd 100644 --- a/Source/Engine/Graphics/Materials/MaterialShader.cpp +++ b/Source/Engine/Graphics/Materials/MaterialShader.cpp @@ -2,11 +2,10 @@ #include "MaterialShader.h" #include "Engine/Core/Log.h" -#include "Engine/Serialization/MemoryReadStream.h" #include "Engine/Level/LargeWorlds.h" #include "Engine/Renderer/RenderList.h" #include "Engine/Graphics/Graphics.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/GPUDevice.h" #include "Engine/Graphics/GPUContext.h" #include "Engine/Graphics/Shaders/GPUConstantBuffer.h" diff --git a/Source/Engine/Graphics/Materials/MaterialShaderFeatures.cpp b/Source/Engine/Graphics/Materials/MaterialShaderFeatures.cpp index 2e3ca90b4..8dfb014b3 100644 --- a/Source/Engine/Graphics/Materials/MaterialShaderFeatures.cpp +++ b/Source/Engine/Graphics/Materials/MaterialShaderFeatures.cpp @@ -1,7 +1,7 @@ // Copyright (c) Wojciech Figat. All rights reserved. #include "MaterialShaderFeatures.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/RenderBuffers.h" #include "Engine/Graphics/Textures/GPUTexture.h" #include "Engine/Renderer/RenderList.h" diff --git a/Source/Engine/Graphics/Materials/ParticleMaterialShader.cpp b/Source/Engine/Graphics/Materials/ParticleMaterialShader.cpp index e8d187ae1..0c2b1861d 100644 --- a/Source/Engine/Graphics/Materials/ParticleMaterialShader.cpp +++ b/Source/Engine/Graphics/Materials/ParticleMaterialShader.cpp @@ -10,7 +10,7 @@ #include "Engine/Graphics/GPUContext.h" #include "Engine/Graphics/GPUDevice.h" #include "Engine/Graphics/GPULimits.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/Shaders/GPUShader.h" #include "Engine/Graphics/Shaders/GPUConstantBuffer.h" #include "Engine/Particles/Graph/CPU/ParticleEmitterGraph.CPU.h" diff --git a/Source/Engine/Graphics/Materials/PostFxMaterialShader.cpp b/Source/Engine/Graphics/Materials/PostFxMaterialShader.cpp index ee7a41853..6899bad02 100644 --- a/Source/Engine/Graphics/Materials/PostFxMaterialShader.cpp +++ b/Source/Engine/Graphics/Materials/PostFxMaterialShader.cpp @@ -5,7 +5,7 @@ #include "Engine/Core/Log.h" #include "Engine/Graphics/GPUContext.h" #include "Engine/Graphics/GPUDevice.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/Shaders/GPUShader.h" #include "Engine/Graphics/RenderView.h" #include "Engine/Graphics/Shaders/GPUConstantBuffer.h" diff --git a/Source/Engine/Graphics/Materials/TerrainMaterialShader.cpp b/Source/Engine/Graphics/Materials/TerrainMaterialShader.cpp index 12a960c9c..25590d9ca 100644 --- a/Source/Engine/Graphics/Materials/TerrainMaterialShader.cpp +++ b/Source/Engine/Graphics/Materials/TerrainMaterialShader.cpp @@ -9,8 +9,7 @@ #include "Engine/Graphics/GPUDevice.h" #include "Engine/Graphics/Shaders/GPUShader.h" #include "Engine/Graphics/RenderBuffers.h" -#include "Engine/Graphics/RenderTask.h" -#include "Engine/Graphics/RenderView.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/Shaders/GPUConstantBuffer.h" #include "Engine/Level/Scene/Lightmap.h" #include "Engine/Renderer/DrawCall.h" diff --git a/Source/Engine/Graphics/Materials/VolumeParticleMaterialShader.cpp b/Source/Engine/Graphics/Materials/VolumeParticleMaterialShader.cpp index 7caf456fb..3509b5767 100644 --- a/Source/Engine/Graphics/Materials/VolumeParticleMaterialShader.cpp +++ b/Source/Engine/Graphics/Materials/VolumeParticleMaterialShader.cpp @@ -10,7 +10,7 @@ #include "Engine/Graphics/RenderView.h" #include "Engine/Graphics/GPUContext.h" #include "Engine/Graphics/GPUDevice.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/Shaders/GPUShader.h" #include "Engine/Graphics/Shaders/GPUConstantBuffer.h" #include "Engine/Particles/Graph/CPU/ParticleEmitterGraph.CPU.h" diff --git a/Source/Engine/Graphics/Models/Mesh.cpp b/Source/Engine/Graphics/Models/Mesh.cpp index 28b73a28f..423c7f118 100644 --- a/Source/Engine/Graphics/Models/Mesh.cpp +++ b/Source/Engine/Graphics/Models/Mesh.cpp @@ -8,7 +8,7 @@ #include "Engine/Content/Assets/Model.h" #include "Engine/Graphics/GPUContext.h" #include "Engine/Graphics/GPUDevice.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/RenderTools.h" #include "Engine/Graphics/Shaders/GPUVertexLayout.h" #include "Engine/Renderer/RenderList.h" diff --git a/Source/Engine/Graphics/Models/SkinnedMesh.cpp b/Source/Engine/Graphics/Models/SkinnedMesh.cpp index 312a74f41..58ab94abd 100644 --- a/Source/Engine/Graphics/Models/SkinnedMesh.cpp +++ b/Source/Engine/Graphics/Models/SkinnedMesh.cpp @@ -9,7 +9,7 @@ #include "Engine/Core/Log.h" #include "Engine/Graphics/GPUContext.h" #include "Engine/Graphics/GPUDevice.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/RenderTools.h" #include "Engine/Graphics/Shaders/GPUVertexLayout.h" #include "Engine/Level/Scene/Scene.h" diff --git a/Source/Engine/Graphics/RenderContext.h b/Source/Engine/Graphics/RenderContext.h new file mode 100644 index 000000000..2a76d521f --- /dev/null +++ b/Source/Engine/Graphics/RenderContext.h @@ -0,0 +1,106 @@ +// Copyright (c) Wojciech Figat. All rights reserved. + +#pragma once + +#include "Engine/Core/Collections/Array.h" +#include "Engine/Platform/CriticalSection.h" +#include "Engine/Scripting/ScriptingType.h" +#include "Engine/Renderer/RendererAllocation.h" +#include "RenderView.h" + +class RenderBuffers; +class RenderList; +class SceneRenderTask; + +/// +/// The high-level renderer context. Used to collect the draw calls for the scene rendering. Can be used to perform a custom rendering. +/// +API_STRUCT(NoDefault) struct FLAXENGINE_API RenderContext +{ + DECLARE_SCRIPTING_TYPE_MINIMAL(RenderContext); + + /// + /// The render buffers that contain drawing state (eg. LOD transitions) and scene buffers (eg. GBuffer, DDGI, Shadow Maps). + /// + API_FIELD() RenderBuffers* Buffers = nullptr; + + /// + /// The render list that collects draw calls. + /// + API_FIELD() RenderList* List = nullptr; + + /// + /// The scene rendering task that is a source of renderable objects (optional). + /// + API_FIELD() SceneRenderTask* Task = nullptr; + + /// + /// The proxy render view used to synchronize objects level of detail during rendering (eg. during shadow maps rendering passes). It's optional. + /// + API_FIELD() RenderView* LodProxyView = nullptr; + + /// + /// The render view. + /// + API_FIELD() RenderView View; + + /// + /// The GPU access locking critical section to protect data access when performing multi-threaded rendering. + /// + static CriticalSection GPULocker; + + RenderContext() = default; + RenderContext(SceneRenderTask* task) noexcept; +}; + +/// +/// The high-level renderer context batch that encapsulates multiple rendering requests within a single task (eg. optimize main view scene rendering and shadow projections at once). +/// +API_STRUCT(NoDefault) struct FLAXENGINE_API RenderContextBatch +{ + DECLARE_SCRIPTING_TYPE_MINIMAL(RenderContextBatch); + + /// + /// The render buffers. + /// + API_FIELD() RenderBuffers* Buffers = nullptr; + + /// + /// The scene rendering task that is a source of renderable objects (optional). + /// + API_FIELD() SceneRenderTask* Task = nullptr; + + /// + /// The all render views collection for the current rendering (main view, shadow projections, etc.). + /// + API_FIELD() Array Contexts; + + /// + /// The Job System labels to wait on, after draw calls collecting. + /// + API_FIELD() Array> WaitLabels; + + /// + /// Enables using async tasks via Job System when performing drawing. + /// + API_FIELD() bool EnableAsync = true; + + RenderContextBatch() = default; + RenderContextBatch(SceneRenderTask* task); + RenderContextBatch(const RenderContext& context); + + FORCE_INLINE RenderContext& GetMainContext() + { + return Contexts.Get()[0]; + } + + FORCE_INLINE const RenderContext& GetMainContext() const + { + return Contexts.Get()[0]; + } + + /// + /// Waits for all scheduled async jobs to complete and clears WaitLabels. + /// + void FlushWaitLabels(); +}; diff --git a/Source/Engine/Graphics/RenderTask.cpp b/Source/Engine/Graphics/RenderTask.cpp index ee7672b5b..0f6c23a30 100644 --- a/Source/Engine/Graphics/RenderTask.cpp +++ b/Source/Engine/Graphics/RenderTask.cpp @@ -2,6 +2,7 @@ #include "RenderTask.h" #include "RenderBuffers.h" +#include "RenderContext.h" #include "GPUDevice.h" #include "GPUSwapChain.h" #include "PostProcessEffect.h" diff --git a/Source/Engine/Graphics/RenderTask.h b/Source/Engine/Graphics/RenderTask.h index bf912f7c8..73daf937e 100644 --- a/Source/Engine/Graphics/RenderTask.h +++ b/Source/Engine/Graphics/RenderTask.h @@ -8,7 +8,6 @@ #include "Engine/Platform/CriticalSection.h" #include "Engine/Scripting/ScriptingObjectReference.h" #include "Engine/Scripting/ScriptingType.h" -#include "Engine/Renderer/RendererAllocation.h" #include "RenderView.h" class GPUDevice; @@ -464,96 +463,3 @@ public: // [SceneRenderTask] void OnBegin(GPUContext* context) override; }; - -/// -/// The high-level renderer context. Used to collect the draw calls for the scene rendering. Can be used to perform a custom rendering. -/// -API_STRUCT(NoDefault) struct FLAXENGINE_API RenderContext -{ - DECLARE_SCRIPTING_TYPE_MINIMAL(RenderContext); - - /// - /// The render buffers that contain drawing state (eg. LOD transitions) and scene buffers (eg. GBuffer, DDGI, Shadow Maps). - /// - API_FIELD() RenderBuffers* Buffers = nullptr; - - /// - /// The render list that collects draw calls. - /// - API_FIELD() RenderList* List = nullptr; - - /// - /// The scene rendering task that is a source of renderable objects (optional). - /// - API_FIELD() SceneRenderTask* Task = nullptr; - - /// - /// The proxy render view used to synchronize objects level of detail during rendering (eg. during shadow maps rendering passes). It's optional. - /// - API_FIELD() RenderView* LodProxyView = nullptr; - - /// - /// The render view. - /// - API_FIELD() RenderView View; - - /// - /// The GPU access locking critical section to protect data access when performing multi-threaded rendering. - /// - static CriticalSection GPULocker; - - RenderContext() = default; - RenderContext(SceneRenderTask* task) noexcept; -}; - -/// -/// The high-level renderer context batch that encapsulates multiple rendering requests within a single task (eg. optimize main view scene rendering and shadow projections at once). -/// -API_STRUCT(NoDefault) struct FLAXENGINE_API RenderContextBatch -{ - DECLARE_SCRIPTING_TYPE_MINIMAL(RenderContextBatch); - - /// - /// The render buffers. - /// - API_FIELD() RenderBuffers* Buffers = nullptr; - - /// - /// The scene rendering task that is a source of renderable objects (optional). - /// - API_FIELD() SceneRenderTask* Task = nullptr; - - /// - /// The all render views collection for the current rendering (main view, shadow projections, etc.). - /// - API_FIELD() Array Contexts; - - /// - /// The Job System labels to wait on, after draw calls collecting. - /// - API_FIELD() Array> WaitLabels; - - /// - /// Enables using async tasks via Job System when performing drawing. - /// - API_FIELD() bool EnableAsync = true; - - RenderContextBatch() = default; - RenderContextBatch(SceneRenderTask* task); - RenderContextBatch(const RenderContext& context); - - FORCE_INLINE RenderContext& GetMainContext() - { - return Contexts.Get()[0]; - } - - FORCE_INLINE const RenderContext& GetMainContext() const - { - return Contexts.Get()[0]; - } - - /// - /// Waits for all scheduled async jobs to complete and clears WaitLabels. - /// - void FlushWaitLabels(); -}; diff --git a/Source/Engine/Graphics/RenderTools.cpp b/Source/Engine/Graphics/RenderTools.cpp index e68fb05e4..a1dd8e35f 100644 --- a/Source/Engine/Graphics/RenderTools.cpp +++ b/Source/Engine/Graphics/RenderTools.cpp @@ -6,7 +6,7 @@ #include "PixelFormat.h" #include "RenderView.h" #include "GPUDevice.h" -#include "RenderTask.h" +#include "RenderContext.h" #include "Engine/Content/Assets/Model.h" #include "Engine/Content/Assets/SkinnedModel.h" #include "Engine/Core/Math/Packed.h" diff --git a/Source/Engine/Graphics/RenderView.cpp b/Source/Engine/Graphics/RenderView.cpp index 3f0db28b5..7bf939064 100644 --- a/Source/Engine/Graphics/RenderView.cpp +++ b/Source/Engine/Graphics/RenderView.cpp @@ -6,8 +6,8 @@ #include "Engine/Core/Math/Double4x4.h" #include "Engine/Renderer/RenderList.h" #include "RenderBuffers.h" -#include "RenderTask.h" #include "RenderTools.h" +#include "RenderContext.h" void RenderView::Prepare(RenderContext& renderContext) { diff --git a/Source/Engine/Level/Actor.cpp b/Source/Engine/Level/Actor.cpp index 8ce79fea4..d22a10f99 100644 --- a/Source/Engine/Level/Actor.cpp +++ b/Source/Engine/Level/Actor.cpp @@ -19,7 +19,7 @@ #include "Engine/Core/Collections/CollectionPoolCache.h" #include "Engine/Core/Math/Double4x4.h" #include "Engine/Debug/Exceptions/JsonParseException.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Physics/Physics.h" #include "Engine/Profiler/ProfilerCPU.h" #include "Engine/Profiler/ProfilerMemory.h" diff --git a/Source/Engine/Level/Actors/AnimatedModel.cpp b/Source/Engine/Level/Actors/AnimatedModel.cpp index c17d883af..b07ed19e2 100644 --- a/Source/Engine/Level/Actors/AnimatedModel.cpp +++ b/Source/Engine/Level/Actors/AnimatedModel.cpp @@ -15,7 +15,7 @@ #include "Engine/Graphics/GPUContext.h" #include "Engine/Graphics/GPUDevice.h" #include "Engine/Graphics/GPUPass.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/RenderBuffers.h" #include "Engine/Graphics/Models/MeshAccessor.h" #include "Engine/Graphics/Models/MeshDeformation.h" diff --git a/Source/Engine/Level/Actors/Camera.cpp b/Source/Engine/Level/Actors/Camera.cpp index 6e3c939fe..e6a08cba7 100644 --- a/Source/Engine/Level/Actors/Camera.cpp +++ b/Source/Engine/Level/Actors/Camera.cpp @@ -12,7 +12,7 @@ #include "Editor/Editor.h" #include "Editor/Managed/ManagedEditor.h" #include "Engine/Renderer/DrawCall.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Level/Scene/SceneRendering.h" #else #include "Engine/Engine/Engine.h" diff --git a/Source/Engine/Level/Actors/Decal.cpp b/Source/Engine/Level/Actors/Decal.cpp index 78066133c..1a9e94fb6 100644 --- a/Source/Engine/Level/Actors/Decal.cpp +++ b/Source/Engine/Level/Actors/Decal.cpp @@ -6,7 +6,7 @@ #include "Engine/Renderer/RenderList.h" #include "Engine/Level/Scene/SceneRendering.h" #include "Engine/Graphics/RenderView.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/RenderTools.h" Decal::Decal(const SpawnParams& params) diff --git a/Source/Engine/Level/Actors/DirectionalLight.cpp b/Source/Engine/Level/Actors/DirectionalLight.cpp index e8e895950..e80182d5d 100644 --- a/Source/Engine/Level/Actors/DirectionalLight.cpp +++ b/Source/Engine/Level/Actors/DirectionalLight.cpp @@ -2,7 +2,7 @@ #include "DirectionalLight.h" #include "Engine/Graphics/RenderTask.h" -#include "Engine/Graphics/RenderView.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Renderer/RenderList.h" #include "Engine/Serialization/Serialization.h" #include "Engine/Level/Scene/SceneRendering.h" diff --git a/Source/Engine/Level/Actors/EnvironmentProbe.cpp b/Source/Engine/Level/Actors/EnvironmentProbe.cpp index ee4242811..53a16caeb 100644 --- a/Source/Engine/Level/Actors/EnvironmentProbe.cpp +++ b/Source/Engine/Level/Actors/EnvironmentProbe.cpp @@ -8,6 +8,7 @@ #include "Engine/Graphics/Textures/GPUTexture.h" #include "Engine/Graphics/Textures/TextureData.h" #include "Engine/Renderer/RenderList.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Renderer/ProbesRenderer.h" #include "Engine/Renderer/ReflectionsPass.h" #include "Engine/Content/Content.h" diff --git a/Source/Engine/Level/Actors/ExponentialHeightFog.cpp b/Source/Engine/Level/Actors/ExponentialHeightFog.cpp index a8d99a2f1..b8dff5f67 100644 --- a/Source/Engine/Level/Actors/ExponentialHeightFog.cpp +++ b/Source/Engine/Level/Actors/ExponentialHeightFog.cpp @@ -8,7 +8,7 @@ #include "Engine/Renderer/RenderList.h" #include "Engine/Serialization/Serialization.h" #include "Engine/Graphics/RenderView.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/RenderBuffers.h" #include "Engine/Graphics/Shaders/GPUConstantBuffer.h" #include "Engine/Renderer/GBufferPass.h" diff --git a/Source/Engine/Level/Actors/PointLight.cpp b/Source/Engine/Level/Actors/PointLight.cpp index c30d47c08..fd18ed700 100644 --- a/Source/Engine/Level/Actors/PointLight.cpp +++ b/Source/Engine/Level/Actors/PointLight.cpp @@ -4,6 +4,7 @@ #include "Engine/Content/Deprecated.h" #include "Engine/Graphics/RenderTask.h" #include "Engine/Graphics/RenderTools.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/RenderView.h" #include "Engine/Renderer/RenderList.h" #include "Engine/Serialization/Serialization.h" diff --git a/Source/Engine/Level/Actors/PostFxVolume.cpp b/Source/Engine/Level/Actors/PostFxVolume.cpp index fb1c236c8..dd7a982c4 100644 --- a/Source/Engine/Level/Actors/PostFxVolume.cpp +++ b/Source/Engine/Level/Actors/PostFxVolume.cpp @@ -4,6 +4,7 @@ #include "Engine/Graphics/RenderTask.h" #include "Engine/Serialization/Serialization.h" #include "Engine/Renderer/RenderList.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Level/Scene/SceneRendering.h" PostFxVolume::PostFxVolume(const SpawnParams& params) diff --git a/Source/Engine/Level/Actors/Sky.cpp b/Source/Engine/Level/Actors/Sky.cpp index e4cc0ab18..7b7e1f57b 100644 --- a/Source/Engine/Level/Actors/Sky.cpp +++ b/Source/Engine/Level/Actors/Sky.cpp @@ -9,7 +9,7 @@ #include "Engine/Renderer/GBufferPass.h" #include "Engine/Graphics/RenderBuffers.h" #include "Engine/Graphics/RenderView.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/GPUContext.h" #include "Engine/Graphics/GPUDevice.h" #include "Engine/Graphics/Shaders/GPUConstantBuffer.h" diff --git a/Source/Engine/Level/Actors/SkyLight.cpp b/Source/Engine/Level/Actors/SkyLight.cpp index 7b363a675..697a58cfa 100644 --- a/Source/Engine/Level/Actors/SkyLight.cpp +++ b/Source/Engine/Level/Actors/SkyLight.cpp @@ -11,6 +11,7 @@ #include "Engine/Graphics/Textures/GPUTexture.h" #include "Engine/Graphics/Textures/TextureData.h" #include "Engine/Renderer/RenderList.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Renderer/ProbesRenderer.h" #include "Engine/Renderer/GBufferPass.h" #include "Engine/Content/Content.h" diff --git a/Source/Engine/Level/Actors/Skybox.cpp b/Source/Engine/Level/Actors/Skybox.cpp index dbda65d3f..24e3fd2f6 100644 --- a/Source/Engine/Level/Actors/Skybox.cpp +++ b/Source/Engine/Level/Actors/Skybox.cpp @@ -6,7 +6,7 @@ #include "Engine/Renderer/RenderList.h" #include "Engine/Serialization/Serialization.h" #include "Engine/Graphics/RenderView.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/RenderTools.h" #include "Engine/Level/Scene/SceneRendering.h" #include "Engine/Content/Assets/Material.h" diff --git a/Source/Engine/Level/Actors/SplineModel.cpp b/Source/Engine/Level/Actors/SplineModel.cpp index 5352bf56d..2e7e8d4fa 100644 --- a/Source/Engine/Level/Actors/SplineModel.cpp +++ b/Source/Engine/Level/Actors/SplineModel.cpp @@ -11,7 +11,7 @@ #include "Engine/Graphics/GPUDevice.h" #include "Engine/Graphics/GPUBuffer.h" #include "Engine/Graphics/GPUContext.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/RenderTools.h" #include "Engine/Level/Scene/SceneRendering.h" #include "Engine/Profiler/ProfilerCPU.h" diff --git a/Source/Engine/Level/Actors/SpotLight.cpp b/Source/Engine/Level/Actors/SpotLight.cpp index 0809b0b7b..4617c5a76 100644 --- a/Source/Engine/Level/Actors/SpotLight.cpp +++ b/Source/Engine/Level/Actors/SpotLight.cpp @@ -6,7 +6,7 @@ #include "Engine/Graphics/RenderView.h" #include "Engine/Renderer/RenderList.h" #include "Engine/Content/Assets/IESProfile.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/RenderTools.h" #include "Engine/Serialization/Serialization.h" #include "Engine/Level/Scene/SceneRendering.h" diff --git a/Source/Engine/Level/Actors/StaticModel.cpp b/Source/Engine/Level/Actors/StaticModel.cpp index a75d7b916..48f08544c 100644 --- a/Source/Engine/Level/Actors/StaticModel.cpp +++ b/Source/Engine/Level/Actors/StaticModel.cpp @@ -9,7 +9,7 @@ #include "Engine/Graphics/GPUContext.h" #include "Engine/Graphics/GPUDevice.h" #include "Engine/Graphics/RenderBuffers.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/Models/MeshDeformation.h" #include "Engine/Graphics/Shaders/GPUVertexLayout.h" #include "Engine/Serialization/Serialization.h" diff --git a/Source/Engine/Level/Scene/SceneRendering.cpp b/Source/Engine/Level/Scene/SceneRendering.cpp index caf987bbb..2a58155ba 100644 --- a/Source/Engine/Level/Scene/SceneRendering.cpp +++ b/Source/Engine/Level/Scene/SceneRendering.cpp @@ -4,7 +4,7 @@ #define SCENE_RENDERING_USE_PROFILER_PER_ACTOR 0 #include "SceneRendering.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/RenderView.h" #include "Engine/Renderer/RenderList.h" #include "Engine/Graphics/RenderBuffers.h" diff --git a/Source/Engine/Particles/Graph/CPU/ParticleEmitterGraph.CPU.cpp b/Source/Engine/Particles/Graph/CPU/ParticleEmitterGraph.CPU.cpp index 739a8ef8d..7eea5f5a0 100644 --- a/Source/Engine/Particles/Graph/CPU/ParticleEmitterGraph.CPU.cpp +++ b/Source/Engine/Particles/Graph/CPU/ParticleEmitterGraph.CPU.cpp @@ -4,6 +4,7 @@ #include "Engine/Core/Collections/Sorting.h" #include "Engine/Content/Assets/Model.h" #include "Engine/Renderer/RenderList.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Particles/ParticleEffect.h" #include "Engine/Engine/Time.h" #include "Engine/Profiler/ProfilerCPU.h" diff --git a/Source/Engine/Particles/ParticleEffect.cpp b/Source/Engine/Particles/ParticleEffect.cpp index e0fc7ceb9..af1cf8098 100644 --- a/Source/Engine/Particles/ParticleEffect.cpp +++ b/Source/Engine/Particles/ParticleEffect.cpp @@ -10,6 +10,7 @@ #include "Engine/Level/Scene/Scene.h" #include "Engine/Engine/Time.h" #include "Engine/Engine/Engine.h" +#include "Engine/Graphics/RenderContext.h" #if USE_EDITOR #include "Editor/Editor.h" #include "Editor/Managed/ManagedEditor.h" diff --git a/Source/Engine/Particles/Particles.cpp b/Source/Engine/Particles/Particles.cpp index e9558ec4e..d70d1a570 100644 --- a/Source/Engine/Particles/Particles.cpp +++ b/Source/Engine/Particles/Particles.cpp @@ -14,6 +14,7 @@ #include "Engine/Graphics/GPUContext.h" #include "Engine/Graphics/GPUPass.h" #include "Engine/Graphics/RenderTools.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/Shaders/GPUVertexLayout.h" #include "Engine/Profiler/ProfilerCPU.h" #include "Engine/Profiler/ProfilerMemory.h" diff --git a/Source/Engine/Physics/Actors/Cloth.cpp b/Source/Engine/Physics/Actors/Cloth.cpp index 3e0eb42d4..b60fe38f7 100644 --- a/Source/Engine/Physics/Actors/Cloth.cpp +++ b/Source/Engine/Physics/Actors/Cloth.cpp @@ -3,7 +3,7 @@ #include "Cloth.h" #include "Engine/Core/Log.h" #include "Engine/Core/Math/Ray.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/RenderTools.h" #include "Engine/Graphics/Models/MeshAccessor.h" #include "Engine/Graphics/Models/MeshBase.h" diff --git a/Source/Engine/Renderer/AmbientOcclusionPass.cpp b/Source/Engine/Renderer/AmbientOcclusionPass.cpp index 9622b7f81..7816e6baf 100644 --- a/Source/Engine/Renderer/AmbientOcclusionPass.cpp +++ b/Source/Engine/Renderer/AmbientOcclusionPass.cpp @@ -10,7 +10,7 @@ #include "Engine/Graphics/GPUDevice.h" #include "Engine/Graphics/GPUPass.h" #include "Engine/Graphics/Shaders/GPUShader.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/RenderTools.h" #include "Engine/Graphics/RenderTargetPool.h" #include "Engine/Graphics/RenderBuffers.h" diff --git a/Source/Engine/Renderer/AntiAliasing/FXAA.cpp b/Source/Engine/Renderer/AntiAliasing/FXAA.cpp index 8023c51b2..a6ad556d9 100644 --- a/Source/Engine/Renderer/AntiAliasing/FXAA.cpp +++ b/Source/Engine/Renderer/AntiAliasing/FXAA.cpp @@ -6,7 +6,7 @@ #include "Engine/Graphics/GPUContext.h" #include "Engine/Graphics/GPUPass.h" #include "Engine/Graphics/Graphics.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" GPU_CB_STRUCT(Data { Float4 ScreenSize; diff --git a/Source/Engine/Renderer/AntiAliasing/SMAA.cpp b/Source/Engine/Renderer/AntiAliasing/SMAA.cpp index 4185cfab1..f53b2d943 100644 --- a/Source/Engine/Renderer/AntiAliasing/SMAA.cpp +++ b/Source/Engine/Renderer/AntiAliasing/SMAA.cpp @@ -6,7 +6,7 @@ #include "Engine/Graphics/Graphics.h" #include "Engine/Graphics/GPUContext.h" #include "Engine/Graphics/RenderTargetPool.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" bool SMAA::setupResources() { diff --git a/Source/Engine/Renderer/AntiAliasing/TAA.cpp b/Source/Engine/Renderer/AntiAliasing/TAA.cpp index d404a6ea0..cda294886 100644 --- a/Source/Engine/Renderer/AntiAliasing/TAA.cpp +++ b/Source/Engine/Renderer/AntiAliasing/TAA.cpp @@ -7,6 +7,7 @@ #include "Engine/Graphics/RenderTargetPool.h" #include "Engine/Graphics/RenderBuffers.h" #include "Engine/Renderer/RenderList.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Renderer/GBufferPass.h" #include "Engine/Engine/Engine.h" #include "Engine/Graphics/Graphics.h" diff --git a/Source/Engine/Renderer/ColorGradingPass.cpp b/Source/Engine/Renderer/ColorGradingPass.cpp index 684fcf805..83cc73e58 100644 --- a/Source/Engine/Renderer/ColorGradingPass.cpp +++ b/Source/Engine/Renderer/ColorGradingPass.cpp @@ -9,7 +9,7 @@ #include "Engine/Graphics/GPUPass.h" #include "Engine/Graphics/Graphics.h" #include "Engine/Graphics/RenderTargetPool.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/RenderBuffers.h" GPU_CB_STRUCT(Data { diff --git a/Source/Engine/Renderer/ContrastAdaptiveSharpeningPass.cpp b/Source/Engine/Renderer/ContrastAdaptiveSharpeningPass.cpp index 958a55725..ab157f13f 100644 --- a/Source/Engine/Renderer/ContrastAdaptiveSharpeningPass.cpp +++ b/Source/Engine/Renderer/ContrastAdaptiveSharpeningPass.cpp @@ -7,7 +7,7 @@ #include "Engine/Graphics/GPUContext.h" #include "Engine/Graphics/GPUDevice.h" #include "Engine/Graphics/RenderTargetPool.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/Shaders/GPUShader.h" GPU_CB_STRUCT(Data { diff --git a/Source/Engine/Renderer/DepthOfFieldPass.cpp b/Source/Engine/Renderer/DepthOfFieldPass.cpp index 25bd37539..6dc7c9cc2 100644 --- a/Source/Engine/Renderer/DepthOfFieldPass.cpp +++ b/Source/Engine/Renderer/DepthOfFieldPass.cpp @@ -11,7 +11,7 @@ #include "Engine/Graphics/GPULimits.h" #include "Engine/Graphics/RenderTargetPool.h" #include "Engine/Graphics/RenderBuffers.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/Shaders/GPUShader.h" // This must match hlsl defines diff --git a/Source/Engine/Renderer/Editor/LightmapUVsDensity.cpp b/Source/Engine/Renderer/Editor/LightmapUVsDensity.cpp index 51833287e..9c80f0a21 100644 --- a/Source/Engine/Renderer/Editor/LightmapUVsDensity.cpp +++ b/Source/Engine/Renderer/Editor/LightmapUVsDensity.cpp @@ -12,7 +12,7 @@ #include "Engine/Graphics/GPUPipelineState.h" #include "Engine/Graphics/Shaders/GPUShader.h" #include "Engine/Graphics/Shaders/GPUConstantBuffer.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Renderer/DrawCall.h" #include "Engine/Foliage/Foliage.h" #include "Engine/ShadowsOfMordor/Builder.Config.h" diff --git a/Source/Engine/Renderer/Editor/MaterialComplexity.cpp b/Source/Engine/Renderer/Editor/MaterialComplexity.cpp index c6834caa7..d9844718b 100644 --- a/Source/Engine/Renderer/Editor/MaterialComplexity.cpp +++ b/Source/Engine/Renderer/Editor/MaterialComplexity.cpp @@ -14,8 +14,8 @@ #include "Engine/Graphics/GPUPipelineState.h" #include "Engine/Graphics/Shaders/GPUShader.h" #include "Engine/Graphics/Textures/GPUTexture.h" -#include "Engine/Graphics/RenderTask.h" #include "Engine/Graphics/RenderBuffers.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Renderer/DrawCall.h" #include "Engine/Renderer/RenderList.h" #include "Engine/Renderer/Lightmaps.h" diff --git a/Source/Engine/Renderer/Editor/QuadOverdrawPass.cpp b/Source/Engine/Renderer/Editor/QuadOverdrawPass.cpp index 61bc0e9f3..c08fc6d0e 100644 --- a/Source/Engine/Renderer/Editor/QuadOverdrawPass.cpp +++ b/Source/Engine/Renderer/Editor/QuadOverdrawPass.cpp @@ -11,7 +11,7 @@ #include "Engine/Graphics/GPUDevice.h" #include "Engine/Graphics/GPUContext.h" #include "Engine/Graphics/Shaders/GPUShader.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/RenderBuffers.h" #include "Engine/Graphics/RenderTargetPool.h" #include "Engine/Renderer/RenderList.h" diff --git a/Source/Engine/Renderer/Editor/VertexColors.cpp b/Source/Engine/Renderer/Editor/VertexColors.cpp index 2b4203a6f..fb870b386 100644 --- a/Source/Engine/Renderer/Editor/VertexColors.cpp +++ b/Source/Engine/Renderer/Editor/VertexColors.cpp @@ -10,7 +10,7 @@ #include "Engine/Graphics/GPUPipelineState.h" #include "Engine/Graphics/Shaders/GPUShader.h" #include "Engine/Graphics/Shaders/GPUConstantBuffer.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Renderer/DrawCall.h" #include "Engine/Renderer/RendererPass.h" diff --git a/Source/Engine/Renderer/EyeAdaptationPass.cpp b/Source/Engine/Renderer/EyeAdaptationPass.cpp index 43e757e2b..6a9abecd7 100644 --- a/Source/Engine/Renderer/EyeAdaptationPass.cpp +++ b/Source/Engine/Renderer/EyeAdaptationPass.cpp @@ -10,7 +10,7 @@ #include "Engine/Graphics/GPUContext.h" #include "Engine/Graphics/GPULimits.h" #include "Engine/Graphics/Shaders/GPUShader.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/RenderTargetPool.h" #include "Engine/Graphics/RenderBuffers.h" #include "Engine/Engine/Engine.h" diff --git a/Source/Engine/Renderer/ForwardPass.cpp b/Source/Engine/Renderer/ForwardPass.cpp index 275bb5c73..e82822fc6 100644 --- a/Source/Engine/Renderer/ForwardPass.cpp +++ b/Source/Engine/Renderer/ForwardPass.cpp @@ -10,7 +10,7 @@ #include "Engine/Graphics/GPUDevice.h" #include "Engine/Graphics/RenderBuffers.h" #include "Engine/Graphics/RenderTargetPool.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/Shaders/GPUShader.h" ForwardPass::ForwardPass() diff --git a/Source/Engine/Renderer/GBufferPass.cpp b/Source/Engine/Renderer/GBufferPass.cpp index 8bba190d3..fc2726eab 100644 --- a/Source/Engine/Renderer/GBufferPass.cpp +++ b/Source/Engine/Renderer/GBufferPass.cpp @@ -14,6 +14,7 @@ #include "Engine/Graphics/GPUPass.h" #include "Engine/Graphics/Shaders/GPUShader.h" #include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/RenderBuffers.h" #include "Engine/Graphics/RenderTargetPool.h" #include "Engine/Graphics/Graphics.h" diff --git a/Source/Engine/Renderer/GI/DynamicDiffuseGlobalIllumination.cpp b/Source/Engine/Renderer/GI/DynamicDiffuseGlobalIllumination.cpp index 9dfa1bb0a..58ddd4f20 100644 --- a/Source/Engine/Renderer/GI/DynamicDiffuseGlobalIllumination.cpp +++ b/Source/Engine/Renderer/GI/DynamicDiffuseGlobalIllumination.cpp @@ -23,6 +23,7 @@ #include "Engine/Graphics/RenderBuffers.h" #include "Engine/Graphics/RenderTargetPool.h" #include "Engine/Graphics/RenderTools.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/Shaders/GPUShader.h" #include "Engine/Level/Actors/BrushMode.h" #include "Engine/Renderer/GBufferPass.h" diff --git a/Source/Engine/Renderer/GI/GlobalSurfaceAtlasPass.cpp b/Source/Engine/Renderer/GI/GlobalSurfaceAtlasPass.cpp index 48bb9959c..9b44b9cc7 100644 --- a/Source/Engine/Renderer/GI/GlobalSurfaceAtlasPass.cpp +++ b/Source/Engine/Renderer/GI/GlobalSurfaceAtlasPass.cpp @@ -18,6 +18,7 @@ #include "Engine/Graphics/GPUPass.h" #include "Engine/Graphics/Graphics.h" #include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/RenderBuffers.h" #include "Engine/Graphics/RenderTargetPool.h" #include "Engine/Graphics/Async/GPUSyncPoint.h" diff --git a/Source/Engine/Renderer/GlobalSignDistanceFieldPass.cpp b/Source/Engine/Renderer/GlobalSignDistanceFieldPass.cpp index 686cd732a..52bde969b 100644 --- a/Source/Engine/Renderer/GlobalSignDistanceFieldPass.cpp +++ b/Source/Engine/Renderer/GlobalSignDistanceFieldPass.cpp @@ -14,7 +14,7 @@ #include "Engine/Graphics/GPUDevice.h" #include "Engine/Graphics/GPUPass.h" #include "Engine/Graphics/Graphics.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/RenderBuffers.h" #include "Engine/Graphics/RenderTargetPool.h" #include "Engine/Graphics/RenderTools.h" diff --git a/Source/Engine/Renderer/LightPass.cpp b/Source/Engine/Renderer/LightPass.cpp index 01094e5fa..9829adfd9 100644 --- a/Source/Engine/Renderer/LightPass.cpp +++ b/Source/Engine/Renderer/LightPass.cpp @@ -6,7 +6,7 @@ #include "Engine/Core/Collections/Sorting.h" #include "Engine/Graphics/RenderBuffers.h" #include "Engine/Graphics/RenderTools.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/GPULimits.h" #include "Engine/Graphics/GPUContext.h" #include "Engine/Graphics/RenderTargetPool.h" diff --git a/Source/Engine/Renderer/MotionBlurPass.cpp b/Source/Engine/Renderer/MotionBlurPass.cpp index 51cc36c8f..4542cbcbb 100644 --- a/Source/Engine/Renderer/MotionBlurPass.cpp +++ b/Source/Engine/Renderer/MotionBlurPass.cpp @@ -13,7 +13,7 @@ #include "Engine/Graphics/RenderBuffers.h" #include "Engine/Graphics/GPUDevice.h" #include "Engine/Graphics/PostProcessSettings.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/RenderTools.h" #include "Engine/Graphics/Shaders/GPUShader.h" #include "Engine/Engine/Time.h" diff --git a/Source/Engine/Renderer/PostProcessingPass.cpp b/Source/Engine/Renderer/PostProcessingPass.cpp index e77556849..9c505ea42 100644 --- a/Source/Engine/Renderer/PostProcessingPass.cpp +++ b/Source/Engine/Renderer/PostProcessingPass.cpp @@ -7,6 +7,7 @@ #include "Engine/Graphics/Graphics.h" #include "Engine/Graphics/GPUContext.h" #include "Engine/Graphics/RenderTools.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/RenderTargetPool.h" #include "Engine/Engine/Time.h" #include "Engine/Graphics/GPUPass.h" diff --git a/Source/Engine/Renderer/ProbesRenderer.cpp b/Source/Engine/Renderer/ProbesRenderer.cpp index 8318ddfe5..38c4f598b 100644 --- a/Source/Engine/Renderer/ProbesRenderer.cpp +++ b/Source/Engine/Renderer/ProbesRenderer.cpp @@ -23,7 +23,7 @@ #include "Engine/Graphics/GPUContext.h" #include "Engine/Graphics/Textures/GPUTexture.h" #include "Engine/Graphics/Textures/TextureData.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Scripting/ScriptingObjectReference.h" #include "Engine/Tools/TextureTool/TextureTool.h" #include "Engine/Threading/ThreadPoolTask.h" diff --git a/Source/Engine/Renderer/ReflectionsPass.cpp b/Source/Engine/Renderer/ReflectionsPass.cpp index f2a2892d6..3be23544c 100644 --- a/Source/Engine/Renderer/ReflectionsPass.cpp +++ b/Source/Engine/Renderer/ReflectionsPass.cpp @@ -11,7 +11,7 @@ #include "Engine/Graphics/GPUContext.h" #include "Engine/Graphics/RenderBuffers.h" #include "Engine/Graphics/RenderTools.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/RenderTargetPool.h" #include "Engine/Level/Actors/EnvironmentProbe.h" diff --git a/Source/Engine/Renderer/RenderList.cpp b/Source/Engine/Renderer/RenderList.cpp index 3d753cb25..4b68a8662 100644 --- a/Source/Engine/Renderer/RenderList.cpp +++ b/Source/Engine/Renderer/RenderList.cpp @@ -6,7 +6,7 @@ #include "Engine/Core/Collections/Sorting.h" #include "Engine/Graphics/Materials/IMaterial.h" #include "Engine/Graphics/Materials/MaterialShader.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/GPUContext.h" #include "Engine/Graphics/GPUDevice.h" #include "Engine/Graphics/GPULimits.h" diff --git a/Source/Engine/Renderer/RenderSetup.h b/Source/Engine/Renderer/RenderSetup.h index 1838f5bbd..bba7738b5 100644 --- a/Source/Engine/Renderer/RenderSetup.h +++ b/Source/Engine/Renderer/RenderSetup.h @@ -10,6 +10,7 @@ struct FLAXENGINE_API RenderSetup { RenderingUpscaleLocation UpscaleLocation = RenderingUpscaleLocation::DuringAntiAliasing; + float RenderScale = 1.0f; bool UseShadows = false; bool UseMotionVectors = false; bool UseTemporalAAJitter = false; diff --git a/Source/Engine/Renderer/Renderer.cpp b/Source/Engine/Renderer/Renderer.cpp index 983a07fd8..7b3f64727 100644 --- a/Source/Engine/Renderer/Renderer.cpp +++ b/Source/Engine/Renderer/Renderer.cpp @@ -6,6 +6,7 @@ #include "Engine/Graphics/RenderTargetPool.h" #include "Engine/Graphics/RenderBuffers.h" #include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/PostProcessEffect.h" #include "Engine/Engine/EngineService.h" #include "GBufferPass.h" @@ -71,7 +72,7 @@ public: RendererService RendererServiceInstance; -void RenderInner(SceneRenderTask* task, RenderContext& renderContext, RenderContextBatch& renderContextBatch); +void RenderInner(RenderContext& renderContext, RenderContextBatch& renderContextBatch); bool RendererService::Init() { @@ -181,7 +182,7 @@ void RenderAntiAliasingPass(RenderContext& renderContext, GPUTexture* input, GPU } } -void RenderLightBuffer(const SceneRenderTask* task, GPUContext* context, RenderContext& renderContext, GPUTexture* lightBuffer, const GPUTextureDescription& tempDesc) +void RenderLightBuffer(GPUContext* context, RenderContext& renderContext, GPUTexture* lightBuffer, const GPUTextureDescription& tempDesc) { context->ResetRenderTarget(); auto colorGradingLUT = ColorGradingPass::Instance()->RenderLUT(renderContext); @@ -196,8 +197,8 @@ void RenderLightBuffer(const SceneRenderTask* task, GPUContext* context, RenderC Swap(lightBuffer, tempBuffer); } RenderTargetPool::Release(lightBuffer); - context->SetRenderTarget(task->GetOutputView()); - context->SetViewportAndScissors(task->GetOutputViewport()); + context->SetRenderTarget(renderContext.Task->GetOutputView()); + context->SetViewportAndScissors(renderContext.Task->GetOutputViewport()); context->Draw(tempBuffer); RenderTargetPool::Release(tempBuffer); } @@ -278,7 +279,7 @@ void Renderer::Render(SceneRenderTask* task) // Perform the actual rendering task->OnPreRender(context, renderContext); - RenderInner(task, renderContext, renderContextBatch); + RenderInner(renderContext, renderContextBatch); task->OnPostRender(context, renderContext); #if USE_EDITOR @@ -362,216 +363,233 @@ void Renderer::DrawActors(RenderContext& renderContext, const Array& cus } } -void RenderInner(SceneRenderTask* task, RenderContext& renderContext, RenderContextBatch& renderContextBatch) +static void Setup(GPUContext* context, RenderContext& renderContext) { - auto context = GPUDevice::Instance->GetMainContext(); + PROFILE_CPU_NAMED("Setup"); auto* graphicsSettings = GraphicsSettings::Get(); - auto& view = renderContext.View; - ASSERT(renderContext.Buffers && renderContext.Buffers->GetWidth() > 0); + const bool isGBufferDebug = GBufferPass::IsDebugView(renderContext.View.Mode); + const int32 screenWidth = renderContext.Buffers->GetWidth(); + const int32 screenHeight = renderContext.Buffers->GetHeight(); // Perform postFx volumes blending and query before rendering - task->CollectPostFxVolumes(renderContext); + renderContext.Task->CollectPostFxVolumes(renderContext); renderContext.List->BlendSettings(); { auto aaMode = EnumHasAnyFlags(renderContext.View.Flags, ViewFlags::AntiAliasing) ? renderContext.List->Settings.AntiAliasing.Mode : AntialiasingMode::None; - if (aaMode == AntialiasingMode::TemporalAntialiasing && view.IsOrthographicProjection()) + if (aaMode == AntialiasingMode::TemporalAntialiasing && renderContext.View.IsOrthographicProjection()) aaMode = AntialiasingMode::None; // TODO: support TAA in ortho projection (see RenderView::Prepare to jitter projection matrix better) renderContext.List->Settings.AntiAliasing.Mode = aaMode; } - // Initialize setup + // Initialize render setup RenderSetup& setup = renderContext.List->Setup; - const bool isGBufferDebug = GBufferPass::IsDebugView(renderContext.View.Mode); + setup.UpscaleLocation = renderContext.Task->UpscaleLocation; + if (setup.UpscaleLocation == RenderingUpscaleLocation::DuringAntiAliasing && renderContext.List->Settings.AntiAliasing.Mode != AntialiasingMode::TemporalAntialiasing) + setup.UpscaleLocation = RenderingUpscaleLocation::AfterAntiAliasing; // Fall-back when AA doesn't support uplscaling +PRAGMA_DISABLE_DEPRECATION_WARNINGS + setup.RenderScale = renderContext.Task->RenderingPercentage * renderContext.Task->RenderScale; +PRAGMA_ENABLE_DEPRECATION_WARNINGS + setup.UseShadows = !isGBufferDebug && EnumHasAnyFlags(renderContext.View.Flags, ViewFlags::Shadows) && ShadowsPass::Instance()->IsReady(); + switch (renderContext.View.Mode) { - PROFILE_CPU_NAMED("Setup"); - const int32 screenWidth = renderContext.Buffers->GetWidth(); - const int32 screenHeight = renderContext.Buffers->GetHeight(); - setup.UpscaleLocation = renderContext.Task->UpscaleLocation; - if (setup.UpscaleLocation == RenderingUpscaleLocation::DuringAntiAliasing && renderContext.List->Settings.AntiAliasing.Mode != AntialiasingMode::TemporalAntialiasing) - setup.UpscaleLocation = RenderingUpscaleLocation::AfterAntiAliasing; // Fall-back when AA doesn't support uplscaling - setup.UseShadows = !isGBufferDebug && EnumHasAnyFlags(view.Flags, ViewFlags::Shadows) && ShadowsPass::Instance()->IsReady(); - switch (renderContext.View.Mode) - { - case ViewMode::QuadOverdraw: - case ViewMode::Emissive: - case ViewMode::LightmapUVsDensity: - case ViewMode::GlobalSurfaceAtlas: - case ViewMode::GlobalSDF: - case ViewMode::GlobalSDFOverdraw: - case ViewMode::MaterialComplexity: - case ViewMode::VertexColors: - case ViewMode::LightOverlap: - setup.UseShadows = false; - break; - } - if (screenWidth < 16 || screenHeight < 16 || renderContext.Task->IsCameraCut || isGBufferDebug || renderContext.View.Mode == ViewMode::NoPostFx) - setup.UseMotionVectors = false; - else - { - const MotionBlurSettings& motionBlurSettings = renderContext.List->Settings.MotionBlur; - const ScreenSpaceReflectionsSettings ssrSettings = renderContext.List->Settings.ScreenSpaceReflections; - setup.UseMotionVectors = - (EnumHasAnyFlags(renderContext.View.Flags, ViewFlags::MotionBlur) && motionBlurSettings.Enabled && motionBlurSettings.Scale > ZeroTolerance) || - renderContext.View.Mode == ViewMode::MotionVectors || - (ssrSettings.Intensity > ZeroTolerance && ssrSettings.TemporalEffect && EnumHasAnyFlags(renderContext.View.Flags, ViewFlags::SSR)) || - renderContext.List->Settings.AntiAliasing.Mode == AntialiasingMode::TemporalAntialiasing; - } - setup.UseTemporalAAJitter = renderContext.List->Settings.AntiAliasing.Mode == AntialiasingMode::TemporalAntialiasing; - setup.UseGlobalSurfaceAtlas = renderContext.View.Mode == ViewMode::GlobalSurfaceAtlas || - (EnumHasAnyFlags(renderContext.View.Flags, ViewFlags::Reflections) && renderContext.List->Settings.GlobalIllumination.Reflections == ReflectionsMode::DDGI) || - (EnumHasAnyFlags(renderContext.View.Flags, ViewFlags::GI) && renderContext.List->Settings.GlobalIllumination.Mode == GlobalIlluminationMode::DDGI); - setup.UseGlobalSDF = (graphicsSettings->EnableGlobalSDF && EnumHasAnyFlags(view.Flags, ViewFlags::GlobalSDF)) || - renderContext.View.Mode == ViewMode::GlobalSDF || - renderContext.View.Mode == ViewMode::GlobalSDFOverdraw || - setup.UseGlobalSurfaceAtlas; - setup.UseVolumetricFog = (view.Flags & ViewFlags::Fog) != ViewFlags::None; - - // Disable TAA jitter in debug modes - switch (renderContext.View.Mode) - { - case ViewMode::Unlit: - case ViewMode::Diffuse: - case ViewMode::Normals: - case ViewMode::Depth: - case ViewMode::Emissive: - case ViewMode::AmbientOcclusion: - case ViewMode::Metalness: - case ViewMode::Roughness: - case ViewMode::Specular: - case ViewMode::SpecularColor: - case ViewMode::SubsurfaceColor: - case ViewMode::ShadingModel: - case ViewMode::GlobalSDF: - case ViewMode::GlobalSDFOverdraw: - case ViewMode::GlobalSurfaceAtlas: - case ViewMode::LightmapUVsDensity: - case ViewMode::MaterialComplexity: - case ViewMode::Wireframe: - case ViewMode::NoPostFx: - case ViewMode::VertexColors: - case ViewMode::QuadOverdraw: - case ViewMode::LightOverlap: - setup.UseTemporalAAJitter = false; - break; - } - - // Customize setup (by postfx or custom gameplay effects) - renderContext.Task->SetupRender(renderContext); - for (PostProcessEffect* e : renderContext.List->PostFx) - e->PreRender(context, renderContext); + case ViewMode::QuadOverdraw: + case ViewMode::Emissive: + case ViewMode::LightmapUVsDensity: + case ViewMode::GlobalSurfaceAtlas: + case ViewMode::GlobalSDF: + case ViewMode::GlobalSDFOverdraw: + case ViewMode::MaterialComplexity: + case ViewMode::VertexColors: + case ViewMode::LightOverlap: + setup.UseShadows = false; + break; } + if (screenWidth < 16 || screenHeight < 16 || renderContext.Task->IsCameraCut || isGBufferDebug || renderContext.View.Mode == ViewMode::NoPostFx) + setup.UseMotionVectors = false; + else + { + const MotionBlurSettings& motionBlurSettings = renderContext.List->Settings.MotionBlur; + const ScreenSpaceReflectionsSettings ssrSettings = renderContext.List->Settings.ScreenSpaceReflections; + setup.UseMotionVectors = + (EnumHasAnyFlags(renderContext.View.Flags, ViewFlags::MotionBlur) && motionBlurSettings.Enabled && motionBlurSettings.Scale > ZeroTolerance) || + renderContext.View.Mode == ViewMode::MotionVectors || + (ssrSettings.Intensity > ZeroTolerance && ssrSettings.TemporalEffect && EnumHasAnyFlags(renderContext.View.Flags, ViewFlags::SSR)) || + renderContext.List->Settings.AntiAliasing.Mode == AntialiasingMode::TemporalAntialiasing; + } + setup.UseTemporalAAJitter = renderContext.List->Settings.AntiAliasing.Mode == AntialiasingMode::TemporalAntialiasing; + setup.UseGlobalSurfaceAtlas = renderContext.View.Mode == ViewMode::GlobalSurfaceAtlas || + (EnumHasAnyFlags(renderContext.View.Flags, ViewFlags::Reflections) && renderContext.List->Settings.GlobalIllumination.Reflections == ReflectionsMode::DDGI) || + (EnumHasAnyFlags(renderContext.View.Flags, ViewFlags::GI) && renderContext.List->Settings.GlobalIllumination.Mode == GlobalIlluminationMode::DDGI); + setup.UseGlobalSDF = (graphicsSettings->EnableGlobalSDF && EnumHasAnyFlags(renderContext.View.Flags, ViewFlags::GlobalSDF)) || + renderContext.View.Mode == ViewMode::GlobalSDF || + renderContext.View.Mode == ViewMode::GlobalSDFOverdraw || + setup.UseGlobalSurfaceAtlas; + setup.UseVolumetricFog = (renderContext.View.Flags & ViewFlags::Fog) != ViewFlags::None; + + // Disable TAA jitter in debug modes + switch (renderContext.View.Mode) + { + case ViewMode::Unlit: + case ViewMode::Diffuse: + case ViewMode::Normals: + case ViewMode::Depth: + case ViewMode::Emissive: + case ViewMode::AmbientOcclusion: + case ViewMode::Metalness: + case ViewMode::Roughness: + case ViewMode::Specular: + case ViewMode::SpecularColor: + case ViewMode::SubsurfaceColor: + case ViewMode::ShadingModel: + case ViewMode::GlobalSDF: + case ViewMode::GlobalSDFOverdraw: + case ViewMode::GlobalSurfaceAtlas: + case ViewMode::LightmapUVsDensity: + case ViewMode::MaterialComplexity: + case ViewMode::Wireframe: + case ViewMode::NoPostFx: + case ViewMode::VertexColors: + case ViewMode::QuadOverdraw: + case ViewMode::LightOverlap: + setup.UseTemporalAAJitter = false; + break; + } + + // Customize setup (by postfx or custom gameplay effects) + renderContext.Task->SetupRender(renderContext); + for (PostProcessEffect* e : renderContext.List->PostFx) + e->PreRender(context, renderContext); + + // Final render view preparations renderContext.View.Prepare(renderContext); +} + +static void CollectDrawCalls(GPUContext* context, RenderContext& renderContext, RenderContextBatch& renderContextBatch) +{ + PROFILE_CPU_NAMED("Collect Draw Calls"); + RenderSetup& setup = renderContext.List->Setup; + + renderContext.View.Pass = DrawPass::GBuffer | DrawPass::Forward | DrawPass::Distortion; + if (setup.UseMotionVectors) + renderContext.View.Pass |= DrawPass::MotionVectors; + renderContextBatch.GetMainContext() = renderContext; // Sync render context in batch with the current value + renderContext.List->PreDraw(context, renderContextBatch); + + LightPass::Instance()->SetupLights(renderContext, renderContextBatch); + if (setup.UseShadows) + ShadowsPass::Instance()->SetupShadows(renderContext, renderContextBatch); +#if GPU_ENABLE_DEVELOPMENT + GBufferPass::Instance()->PreOverrideDrawCalls(renderContext); +#endif + + // Dispatch drawing (via JobSystem - multiple job batches for every scene) + JobSystem::SetJobStartingOnDispatch(false); + renderContext.Task->OnCollectDrawCalls(renderContextBatch, SceneRendering::DrawCategory::SceneDraw); + renderContext.Task->OnCollectDrawCalls(renderContextBatch, SceneRendering::DrawCategory::SceneDrawAsync); + if (setup.UseGlobalSDF) + GlobalSignDistanceFieldPass::Instance()->OnCollectDrawCalls(renderContextBatch); + if (setup.UseGlobalSurfaceAtlas) + GlobalSurfaceAtlasPass::Instance()->OnCollectDrawCalls(renderContextBatch); + if (EnumHasAllFlags(renderContext.View.Flags, ViewFlags::CustomPostProcess)) + { + for (PostProcessEffect* fx : renderContext.List->PostFx) + fx->CollectDrawCalls(renderContextBatch); + } + + // Wait for async jobs to finish + JobSystem::SetJobStartingOnDispatch(true); + renderContextBatch.FlushWaitLabels(); + + // Perform custom post-scene drawing (eg. GPU dispatches used by VFX) + for (int32 i = 0; i < renderContextBatch.Contexts.Count(); i++) + renderContextBatch.Contexts[i].List->DrainDelayedDraws(context, renderContextBatch, i); + renderContext.List->PostDraw(context, renderContextBatch); + +#if GPU_ENABLE_DEVELOPMENT + GBufferPass::Instance()->OverrideDrawCalls(renderContext); +#endif +} + +static void ProcessDrawCalls(GPUContext* context, RenderContext& renderContext, RenderContextBatch& renderContextBatch) +{ + PROFILE_CPU_NAMED("Process Draw Calls"); + + // Utility that handles async jobs for a specific rendering routines in async + struct DrawCallsProcessor + { + RenderContextBatch& RenderContextBatch; + Pair MainContextSorting[5] = + { + // Draw List + Reverse Distance sorting + ToPair(DrawCallsListType::GBuffer, false), + ToPair(DrawCallsListType::GBufferNoDecals, false), + ToPair(DrawCallsListType::Forward, true), + ToPair(DrawCallsListType::Distortion, false), + ToPair(DrawCallsListType::MotionVectors, false), + }; + + void BuildObjectsBufferJob(int32 index) + { + RenderContextBatch.Contexts[index].List->BuildObjectsBuffer(); + } + + void SortDrawCallsJob(int32 index) + { + RenderContext& renderContext = RenderContextBatch.GetMainContext(); + if (index < ARRAY_COUNT(MainContextSorting)) + { + // Main context sorting + RenderSetup& setup = renderContext.List->Setup; + auto sorting = MainContextSorting[index]; + if (sorting.First == DrawCallsListType::MotionVectors && !setup.UseMotionVectors) + return; + renderContext.List->SortDrawCalls(renderContext, sorting.Second, sorting.First); + } + else + { + // Shadow context sorting + auto& shadowContext = RenderContextBatch.Contexts[index - ARRAY_COUNT(MainContextSorting)]; + shadowContext.List->SortDrawCalls(shadowContext, false, DrawCallsListType::Depth, DrawPass::Depth); + shadowContext.List->SortDrawCalls(shadowContext, false, shadowContext.List->ShadowDepthDrawCallsList, renderContext.List->DrawCalls, DrawCallsListType::Depth, DrawPass::Depth); + } + } + } processor = { renderContextBatch }; + + // Dispatch async jobs + Function func; + func.Bind(&processor); + const int64 buildObjectsBufferJob = JobSystem::Dispatch(func, renderContextBatch.Contexts.Count()); + func.Bind(&processor); + const int64 sortDrawCallsJob = JobSystem::Dispatch(func, ARRAY_COUNT(DrawCallsProcessor::MainContextSorting) + renderContextBatch.Contexts.Count()); + + // Upload objects buffers to the GPU + JobSystem::Wait(buildObjectsBufferJob); + { + PROFILE_CPU_NAMED("FlushObjectsBuffer"); + GPUMemoryPass pass(context); + for (auto& e : renderContextBatch.Contexts) + e.List->ObjectBuffer.Flush(context); + } + + // Wait for async jobs to finish + // TODO: use per-pass wait labels (eg. don't wait for shadow pass draws sorting until ShadowPass needs it) + JobSystem::Wait(sortDrawCallsJob); +} + +void RenderInner(RenderContext& renderContext, RenderContextBatch& renderContextBatch) +{ + auto context = GPUDevice::Instance->GetMainContext(); + ASSERT(renderContext.Buffers && renderContext.Buffers->GetWidth() > 0); + + // Setup rendering + RenderSetup& setup = renderContext.List->Setup; + Setup(context, renderContext); // Build batch of render contexts (main view and shadow projections) - { - PROFILE_CPU_NAMED("Collect Draw Calls"); - - view.Pass = DrawPass::GBuffer | DrawPass::Forward | DrawPass::Distortion; - if (setup.UseMotionVectors) - view.Pass |= DrawPass::MotionVectors; - renderContextBatch.GetMainContext() = renderContext; // Sync render context in batch with the current value - renderContext.List->PreDraw(context, renderContextBatch); - - LightPass::Instance()->SetupLights(renderContext, renderContextBatch); - if (setup.UseShadows) - ShadowsPass::Instance()->SetupShadows(renderContext, renderContextBatch); -#if GPU_ENABLE_DEVELOPMENT - GBufferPass::Instance()->PreOverrideDrawCalls(renderContext); -#endif - - // Dispatch drawing (via JobSystem - multiple job batches for every scene) - JobSystem::SetJobStartingOnDispatch(false); - task->OnCollectDrawCalls(renderContextBatch, SceneRendering::DrawCategory::SceneDraw); - task->OnCollectDrawCalls(renderContextBatch, SceneRendering::DrawCategory::SceneDrawAsync); - if (setup.UseGlobalSDF) - GlobalSignDistanceFieldPass::Instance()->OnCollectDrawCalls(renderContextBatch); - if (setup.UseGlobalSurfaceAtlas) - GlobalSurfaceAtlasPass::Instance()->OnCollectDrawCalls(renderContextBatch); - if (EnumHasAllFlags(renderContext.View.Flags, ViewFlags::CustomPostProcess)) - { - for (PostProcessEffect* fx : renderContext.List->PostFx) - fx->CollectDrawCalls(renderContextBatch); - } - - // Wait for async jobs to finish - JobSystem::SetJobStartingOnDispatch(true); - renderContextBatch.FlushWaitLabels(); - - // Perform custom post-scene drawing (eg. GPU dispatches used by VFX) - for (int32 i = 0; i < renderContextBatch.Contexts.Count(); i++) - renderContextBatch.Contexts[i].List->DrainDelayedDraws(context, renderContextBatch, i); - renderContext.List->PostDraw(context, renderContextBatch); - -#if GPU_ENABLE_DEVELOPMENT - GBufferPass::Instance()->OverrideDrawCalls(renderContext); -#endif - } + CollectDrawCalls(context, renderContext, renderContextBatch); // Process draw calls (sorting, objects buffer building) - { - PROFILE_CPU_NAMED("Process Draw Calls"); - - // Utility that handles async jobs for a specific rendering routines in async - struct DrawCallsProcessor - { - RenderContextBatch& RenderContextBatch; - Pair MainContextSorting[5] = - { - // Draw List + Reverse Distance sorting - ToPair(DrawCallsListType::GBuffer, false), - ToPair(DrawCallsListType::GBufferNoDecals, false), - ToPair(DrawCallsListType::Forward, true), - ToPair(DrawCallsListType::Distortion, false), - ToPair(DrawCallsListType::MotionVectors, false), - }; - - void BuildObjectsBufferJob(int32 index) - { - RenderContextBatch.Contexts[index].List->BuildObjectsBuffer(); - } - - void SortDrawCallsJob(int32 index) - { - RenderContext& renderContext = RenderContextBatch.GetMainContext(); - if (index < ARRAY_COUNT(MainContextSorting)) - { - // Main context sorting - RenderSetup& setup = renderContext.List->Setup; - auto sorting = MainContextSorting[index]; - if (sorting.First == DrawCallsListType::MotionVectors && !setup.UseMotionVectors) - return; - renderContext.List->SortDrawCalls(renderContext, sorting.Second, sorting.First); - } - else - { - // Shadow context sorting - auto& shadowContext = RenderContextBatch.Contexts[index - ARRAY_COUNT(MainContextSorting)]; - shadowContext.List->SortDrawCalls(shadowContext, false, DrawCallsListType::Depth, DrawPass::Depth); - shadowContext.List->SortDrawCalls(shadowContext, false, shadowContext.List->ShadowDepthDrawCallsList, renderContext.List->DrawCalls, DrawCallsListType::Depth, DrawPass::Depth); - } - } - } processor = { renderContextBatch }; - - // Dispatch async jobs - Function func; - func.Bind(&processor); - const int64 buildObjectsBufferJob = JobSystem::Dispatch(func, renderContextBatch.Contexts.Count()); - func.Bind(&processor); - const int64 sortDrawCallsJob = JobSystem::Dispatch(func, ARRAY_COUNT(DrawCallsProcessor::MainContextSorting) + renderContextBatch.Contexts.Count()); - - // Upload objects buffers to the GPU - JobSystem::Wait(buildObjectsBufferJob); - { - PROFILE_CPU_NAMED("FlushObjectsBuffer"); - GPUMemoryPass pass(context); - for (auto& e : renderContextBatch.Contexts) - e.List->ObjectBuffer.Flush(context); - } - - // Wait for async jobs to finish - // TODO: use per-pass wait labels (eg. don't wait for shadow pass draws sorting until ShadowPass needs it) - JobSystem::Wait(sortDrawCallsJob); - } + ProcessDrawCalls(context, renderContext, renderContextBatch); // Get the light accumulation buffer auto outputFormat = renderContext.Buffers->GetOutputFormat(); @@ -587,8 +605,8 @@ void RenderInner(SceneRenderTask* task, RenderContext& renderContext, RenderCont { QuadOverdrawPass::Instance()->Render(renderContext, context, lightBuffer->View()); context->ResetRenderTarget(); - context->SetRenderTarget(task->GetOutputView()); - context->SetViewportAndScissors(task->GetOutputViewport()); + context->SetRenderTarget(renderContext.Task->GetOutputView()); + context->SetViewportAndScissors(renderContext.Task->GetOutputViewport()); context->Draw(lightBuffer); RenderTargetPool::Release(lightBuffer); return; @@ -636,8 +654,8 @@ void RenderInner(SceneRenderTask* task, RenderContext& renderContext, RenderCont #endif { context->ResetRenderTarget(); - context->SetRenderTarget(task->GetOutputView()); - context->SetViewportAndScissors(task->GetOutputViewport()); + context->SetRenderTarget(renderContext.Task->GetOutputView()); + context->SetViewportAndScissors(renderContext.Task->GetOutputViewport()); context->Draw(lightBuffer->View()); RenderTargetPool::Release(lightBuffer); return; @@ -650,11 +668,11 @@ void RenderInner(SceneRenderTask* task, RenderContext& renderContext, RenderCont AmbientOcclusionPass::Instance()->Render(renderContext); // Check if use custom view mode - if (isGBufferDebug) + if (GBufferPass::IsDebugView(renderContext.View.Mode)) { context->ResetRenderTarget(); - context->SetRenderTarget(task->GetOutputView()); - context->SetViewportAndScissors(task->GetOutputViewport()); + context->SetRenderTarget(renderContext.Task->GetOutputView()); + context->SetViewportAndScissors(renderContext.Task->GetOutputViewport()); GBufferPass::Instance()->RenderDebug(renderContext); RenderTargetPool::Release(lightBuffer); return; @@ -676,7 +694,7 @@ void RenderInner(SceneRenderTask* task, RenderContext& renderContext, RenderCont } if (renderContext.View.Mode == ViewMode::LightBuffer) { - RenderLightBuffer(task, context, renderContext, lightBuffer, tempDesc); + RenderLightBuffer(context, renderContext, lightBuffer, tempDesc); return; } @@ -693,7 +711,7 @@ void RenderInner(SceneRenderTask* task, RenderContext& renderContext, RenderCont renderContext.List->Settings.CameraArtifacts.GrainAmount = 0.0f; renderContext.List->Settings.CameraArtifacts.ChromaticDistortion = 0.0f; renderContext.List->Settings.CameraArtifacts.VignetteIntensity = 0.0f; - RenderLightBuffer(task, context, renderContext, lightBuffer, tempDesc); + RenderLightBuffer(context, renderContext, lightBuffer, tempDesc); return; } @@ -735,8 +753,8 @@ void RenderInner(SceneRenderTask* task, RenderContext& renderContext, RenderCont // Check if skip post-processing if (renderContext.View.Mode == ViewMode::NoPostFx || renderContext.View.Mode == ViewMode::Wireframe) { - context->SetRenderTarget(task->GetOutputView()); - context->SetViewportAndScissors(task->GetOutputViewport()); + context->SetRenderTarget(renderContext.Task->GetOutputView()); + context->SetViewportAndScissors(renderContext.Task->GetOutputViewport()); if (!Graphics::GammaColorSpace) GBufferPass::Instance()->DrawLinearToSrgb(renderContext, frameBuffer); else @@ -752,10 +770,8 @@ void RenderInner(SceneRenderTask* task, RenderContext& renderContext, RenderCont renderContext.List->RunCustomPostFxPass(context, renderContext, PostProcessEffectLocation::BeforePostProcessingPass, frameBuffer, tempBuffer); // Temporal Anti-Aliasing (goes before post processing) -PRAGMA_DISABLE_DEPRECATION_WARNINGS - bool useUpscaling = task->RenderingPercentage * task->RenderScale < 1.0f; -PRAGMA_ENABLE_DEPRECATION_WARNINGS - const Viewport outputViewport = task->GetOutputViewport(); + bool useUpscaling = setup.RenderScale < 1.0f; + const Viewport outputViewport = renderContext.Task->GetOutputViewport(); if (renderContext.List->Settings.AntiAliasing.Mode == AntialiasingMode::TemporalAntialiasing) { if (useUpscaling && setup.UpscaleLocation == RenderingUpscaleLocation::DuringAntiAliasing) @@ -817,7 +833,7 @@ PRAGMA_ENABLE_DEPRECATION_WARNINGS ) { // PostFx -> Back Buffer - GPUTextureView* outputView = task->GetOutputView(); + GPUTextureView* outputView = renderContext.Task->GetOutputView(); PostProcessingPass::Instance()->Render(renderContext, frameBuffer, outputView, outputViewport, colorGradingLUT); RenderTargetPool::Release(tempBuffer); RenderTargetPool::Release(frameBuffer); @@ -853,7 +869,7 @@ PRAGMA_ENABLE_DEPRECATION_WARNINGS #endif // Anti Aliasing - GPUTextureView* outputView = task->GetOutputView(); + GPUTextureView* outputView = renderContext.Task->GetOutputView(); if (!renderContext.List->HasAnyPostFx(renderContext, PostProcessEffectLocation::AfterAntiAliasingPass, MaterialPostFxLocation::AfterAntiAliasingPass) && !useUpscaling) { // AA -> Back Buffer diff --git a/Source/Engine/Renderer/ScreenSpaceReflectionsPass.cpp b/Source/Engine/Renderer/ScreenSpaceReflectionsPass.cpp index 9477c81a8..7d95d75a3 100644 --- a/Source/Engine/Renderer/ScreenSpaceReflectionsPass.cpp +++ b/Source/Engine/Renderer/ScreenSpaceReflectionsPass.cpp @@ -12,7 +12,7 @@ #include "Engine/Content/Content.h" #include "Engine/Graphics/Graphics.h" #include "Engine/Graphics/RenderTools.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/RenderTargetPool.h" #include "Engine/Graphics/RenderBuffers.h" #include "Engine/Graphics/GPUContext.h" diff --git a/Source/Engine/Renderer/ShadowsPass.cpp b/Source/Engine/Renderer/ShadowsPass.cpp index 4a260380a..7a2e7810d 100644 --- a/Source/Engine/Renderer/ShadowsPass.cpp +++ b/Source/Engine/Renderer/ShadowsPass.cpp @@ -5,7 +5,7 @@ #include "VolumetricFogPass.h" #include "Engine/Graphics/Graphics.h" #include "Engine/Graphics/GPUContext.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/RenderBuffers.h" #include "Engine/Graphics/PixelFormatExtensions.h" #include "Engine/Content/Content.h" diff --git a/Source/Engine/Renderer/VolumetricFogPass.cpp b/Source/Engine/Renderer/VolumetricFogPass.cpp index 81acd36e0..b030b2e52 100644 --- a/Source/Engine/Renderer/VolumetricFogPass.cpp +++ b/Source/Engine/Renderer/VolumetricFogPass.cpp @@ -6,7 +6,7 @@ #include "DrawCall.h" #include "GI/DynamicDiffuseGlobalIllumination.h" #include "Engine/Graphics/Graphics.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/RenderTools.h" #include "Engine/Graphics/RenderBuffers.h" #include "Engine/Graphics/RenderTargetPool.h" diff --git a/Source/Engine/Terrain/Terrain.cpp b/Source/Engine/Terrain/Terrain.cpp index 9185f71a9..911037e33 100644 --- a/Source/Engine/Terrain/Terrain.cpp +++ b/Source/Engine/Terrain/Terrain.cpp @@ -13,7 +13,7 @@ #include "Engine/Physics/PhysicsBackend.h" #include "Engine/Content/Deprecated.h" #include "Engine/Graphics/RenderView.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/Textures/GPUTexture.h" #include "Engine/Level/Scene/Scene.h" #include "Engine/Profiler/ProfilerCPU.h" diff --git a/Source/Engine/Terrain/TerrainChunk.cpp b/Source/Engine/Terrain/TerrainChunk.cpp index b873173d6..f3b24ebc3 100644 --- a/Source/Engine/Terrain/TerrainChunk.cpp +++ b/Source/Engine/Terrain/TerrainChunk.cpp @@ -10,6 +10,7 @@ #include "Engine/Graphics/Textures/GPUTexture.h" #include "Engine/Renderer/RenderList.h" #include "Engine/Graphics/RenderTools.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Core/Math/OrientedBoundingBox.h" #include "Engine/Level/Scene/Scene.h" #if USE_EDITOR diff --git a/Source/Engine/UI/SpriteRender.cpp b/Source/Engine/UI/SpriteRender.cpp index d1e66ff1c..398337d80 100644 --- a/Source/Engine/UI/SpriteRender.cpp +++ b/Source/Engine/UI/SpriteRender.cpp @@ -7,7 +7,7 @@ #include "Engine/Content/Content.h" #include "Engine/Content/Assets/Model.h" #include "Engine/Content/Assets/MaterialInstance.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Level/Actors/Camera.h" #include "Engine/Serialization/Serialization.h" diff --git a/Source/Engine/UI/TextRender.cpp b/Source/Engine/UI/TextRender.cpp index 2a933f59d..fb4b3c814 100644 --- a/Source/Engine/UI/TextRender.cpp +++ b/Source/Engine/UI/TextRender.cpp @@ -6,7 +6,7 @@ #include "Engine/Graphics/GPUDevice.h" #include "Engine/Graphics/Models/Types.h" #include "Engine/Graphics/RenderView.h" -#include "Engine/Graphics/RenderTask.h" +#include "Engine/Graphics/RenderContext.h" #include "Engine/Graphics/RenderBuffers.h" #include "Engine/Graphics/RenderTools.h" #include "Engine/Graphics/Shaders/GPUVertexLayout.h" diff --git a/Source/Tools/Flax.Build/Bindings/BindingsGenerator.Cpp.cs b/Source/Tools/Flax.Build/Bindings/BindingsGenerator.Cpp.cs index a7791067c..5f8e47706 100644 --- a/Source/Tools/Flax.Build/Bindings/BindingsGenerator.Cpp.cs +++ b/Source/Tools/Flax.Build/Bindings/BindingsGenerator.Cpp.cs @@ -3093,6 +3093,7 @@ namespace Flax.Build.Bindings else throw new Exception("Not supported Non-POD type " + apiType); CppIncludeFiles.Add("Engine/Scripting/ManagedCLR/MClass.h"); + CppIncludeFiles.Add(apiType.File.Name); // Get the full typename with nested parent prefix var fullName = apiType.FullNameNative;