diff --git a/Source/Engine/Renderer/PostProcessingPass.cpp b/Source/Engine/Renderer/PostProcessingPass.cpp index 7c93177e0..6222153b6 100644 --- a/Source/Engine/Renderer/PostProcessingPass.cpp +++ b/Source/Engine/Renderer/PostProcessingPass.cpp @@ -194,8 +194,18 @@ void PostProcessingPass::Render(RenderContext& renderContext, GPUTexture* input, bool useCameraArtifacts = EnumHasAnyFlags(view.Flags, ViewFlags::CameraArtifacts) && (settings.CameraArtifacts.VignetteIntensity > 0.0f || settings.CameraArtifacts.GrainAmount > 0.0f || settings.CameraArtifacts.ChromaticDistortion > 0.0f || settings.CameraArtifacts.ScreenFadeColor.A > 0.0f); bool useLensFlares = EnumHasAnyFlags(view.Flags, ViewFlags::LensFlares) && settings.LensFlares.Intensity > 0.0f && useBloom; + // Cache viewport sizes + int32 w1 = input->Width(); + int32 w2 = w1 >> 1; + int32 w4 = w2 >> 1; + int32 w8 = w4 >> 1; + int32 h1 = input->Height(); + int32 h2 = h1 >> 1; + int32 h4 = h2 >> 1; + int32 h8 = h4 >> 1; + // Ensure to have valid data and if at least one effect should be applied - if (!(useBloom || useToneMapping || useCameraArtifacts) || checkIfSkipPass()) + if (!(useBloom || useToneMapping || useCameraArtifacts) || checkIfSkipPass() || w8 == 0 || h8 ==0) { // Resources are missing. Do not perform rendering. Just copy raw frame context->SetViewportAndScissors((float)output->Width(), (float)output->Height()); @@ -209,16 +219,6 @@ void PostProcessingPass::Render(RenderContext& renderContext, GPUTexture* input, auto cb0 = shader->GetCB(0); auto cb1 = shader->GetCB(1); - // Cache viewport sizes - int32 w1 = input->Width(); - int32 w2 = w1 >> 1; - int32 w4 = w2 >> 1; - int32 w8 = w4 >> 1; - int32 h1 = input->Height(); - int32 h2 = h1 >> 1; - int32 h4 = h2 >> 1; - int32 h8 = h4 >> 1; - //////////////////////////////////////////////////////////////////////////////////// // Setup shader diff --git a/Source/Engine/Renderer/ScreenSpaceReflectionsPass.cpp b/Source/Engine/Renderer/ScreenSpaceReflectionsPass.cpp index 80bacf650..7ba9fbb50 100644 --- a/Source/Engine/Renderer/ScreenSpaceReflectionsPass.cpp +++ b/Source/Engine/Renderer/ScreenSpaceReflectionsPass.cpp @@ -176,6 +176,8 @@ void ScreenSpaceReflectionsPass::Render(RenderContext& renderContext, GPUTexture // Prepare resolutions for passes const int32 width = buffers->GetWidth(); const int32 height = buffers->GetHeight(); + if (width < 4 || height < 4) + return; const int32 traceWidth = width / static_cast(settings.RayTracePassResolution); const int32 traceHeight = height / static_cast(settings.RayTracePassResolution); const int32 resolveWidth = width / static_cast(settings.RayTracePassResolution);