From 2d4d53bccfbd0cde0323fef985a6daac7f1054eb Mon Sep 17 00:00:00 2001 From: Doug McDiarmid Date: Tue, 22 Jun 2021 20:10:49 -0700 Subject: [PATCH 1/3] Change viewport and scissor state to use the output image size --- .../ReflectionScreenSpaceBlurChildPass.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Gems/Atom/Feature/Common/Code/Source/ReflectionScreenSpace/ReflectionScreenSpaceBlurChildPass.cpp b/Gems/Atom/Feature/Common/Code/Source/ReflectionScreenSpace/ReflectionScreenSpaceBlurChildPass.cpp index 2d4b6ee85f..690a2d63c2 100644 --- a/Gems/Atom/Feature/Common/Code/Source/ReflectionScreenSpace/ReflectionScreenSpaceBlurChildPass.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/ReflectionScreenSpace/ReflectionScreenSpaceBlurChildPass.cpp @@ -47,8 +47,12 @@ namespace AZ m_updateSrg = true; } - params.m_viewportState = RHI::Viewport(0, static_cast(m_imageSize.m_width), 0, static_cast(m_imageSize.m_height)); - params.m_scissorState = RHI::Scissor(0, 0, m_imageSize.m_width, m_imageSize.m_height); + float inverseScale = 1.0f / m_outputScale; + uint32_t outputWidth = m_imageSize.m_width * inverseScale; + uint32_t outputHeight = m_imageSize.m_height * inverseScale; + + params.m_viewportState = RHI::Viewport(0, static_cast(outputWidth), 0, static_cast(outputHeight)); + params.m_scissorState = RHI::Scissor(0, 0, outputWidth, outputHeight); FullscreenTrianglePass::FrameBeginInternal(params); } From d98ad8eda83aabaffaef46245da68d560f7362f4 Mon Sep 17 00:00:00 2001 From: Doug McDiarmid Date: Tue, 22 Jun 2021 23:48:14 -0700 Subject: [PATCH 2/3] Fix for FullscreenTrianglePass viewport and scissor state (author: moudgils). --- .../Pass/FullscreenTrianglePass.cpp | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/FullscreenTrianglePass.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/FullscreenTrianglePass.cpp index 67a6fcaa5b..d1fe6e5ec0 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/FullscreenTrianglePass.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/FullscreenTrianglePass.cpp @@ -24,6 +24,7 @@ #include #include +#include namespace AZ { @@ -181,19 +182,13 @@ namespace AZ RHI::Size targetImageSize = outputAttachment->m_descriptor.m_image.m_size; - m_viewportState = params.m_viewportState; - if (m_viewportState.IsNull()) - { - // compute viewport from target attachment - m_viewportState = RHI::Viewport(0, static_cast(targetImageSize.m_width), 0, static_cast(targetImageSize.m_height)); - } + m_viewportState.m_minX = m_viewportState.m_minY = 0; + m_viewportState.m_maxX = AZStd::min(static_cast(params.m_viewportState.m_maxX), targetImageSize.m_width); + m_viewportState.m_maxY = AZStd::min(static_cast(params.m_viewportState.m_maxY), targetImageSize.m_height); - m_scissorState = params.m_scissorState; - if (m_scissorState.IsNull()) - { - // compute scissor from target attachment - m_scissorState = RHI::Scissor(0, 0, targetImageSize.m_width, targetImageSize.m_height); - } + m_scissorState.m_minX = m_scissorState.m_minY = 0; + m_scissorState.m_maxX = AZStd::min(static_cast(params.m_scissorState.m_maxX), targetImageSize.m_width); + m_scissorState.m_maxY = AZStd::min(static_cast(params.m_scissorState.m_maxY), targetImageSize.m_height); RenderPass::FrameBeginInternal(params); } From 1221b0f74fc74142c2ea83a77dbd850a644473b7 Mon Sep 17 00:00:00 2001 From: Doug McDiarmid Date: Wed, 23 Jun 2021 02:06:31 -0700 Subject: [PATCH 3/3] Minor formatting change. --- .../Code/Source/RPI.Public/Pass/FullscreenTrianglePass.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/FullscreenTrianglePass.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/FullscreenTrianglePass.cpp index d1fe6e5ec0..5c76b084b1 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/FullscreenTrianglePass.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/FullscreenTrianglePass.cpp @@ -182,11 +182,13 @@ namespace AZ RHI::Size targetImageSize = outputAttachment->m_descriptor.m_image.m_size; - m_viewportState.m_minX = m_viewportState.m_minY = 0; + m_viewportState.m_minX = 0.0f; + m_viewportState.m_minY = 0.0f; m_viewportState.m_maxX = AZStd::min(static_cast(params.m_viewportState.m_maxX), targetImageSize.m_width); m_viewportState.m_maxY = AZStd::min(static_cast(params.m_viewportState.m_maxY), targetImageSize.m_height); - m_scissorState.m_minX = m_scissorState.m_minY = 0; + m_scissorState.m_minX = 0.0f; + m_scissorState.m_minY = 0.0f; m_scissorState.m_maxX = AZStd::min(static_cast(params.m_scissorState.m_maxX), targetImageSize.m_width); m_scissorState.m_maxY = AZStd::min(static_cast(params.m_scissorState.m_maxY), targetImageSize.m_height);