diff --git a/src/renderer_mtl.cpp b/src/renderer_mtl.cpp index 1b9f52b53..85b919cdb 100644 --- a/src/renderer_mtl.cpp +++ b/src/renderer_mtl.cpp @@ -5375,9 +5375,32 @@ static_assert(BX_COUNTOF(s_accessNames) == Access::Count, "Invalid s_accessNames if (!isCompute) { - const Rect& clippedRect = _render->m_view[view].m_clippedRect; - const Rect& scissorRect = _render->m_view[view].m_scissor; - viewHasScissor = !scissorRect.isZero(); + const FrameBufferHandle viewFbh = _render->m_view[view].m_fbh; + + uint32_t width = m_resolution.width; + uint32_t height = m_resolution.height; + + if (isValid(viewFbh) ) + { + const FrameBufferMtl& frameBuffer = m_frameBuffers[viewFbh.idx]; + width = frameBuffer.m_width; + height = frameBuffer.m_height; + } + + const Rect framebufferRect( + 0 + , 0 + , bx::narrowCast(width) + , bx::narrowCast(height) + ); + + Rect clippedRect; + clippedRect.setIntersect(_render->m_view[view].m_clippedRect, framebufferRect); + + Rect scissorRect; + scissorRect.setIntersect(_render->m_view[view].m_scissor, framebufferRect); + + viewHasScissor = !_render->m_view[view].m_scissor.isZero(); viewScissorRect = viewHasScissor ? scissorRect : clippedRect; Clear& clr = _render->m_view[view].m_clear; @@ -5394,16 +5417,6 @@ static_assert(BX_COUNTOF(s_accessNames) == Access::Count, "Invalid s_accessNames fbh = _render->m_view[view].m_fbh; - uint32_t width = m_resolution.width; - uint32_t height = m_resolution.height; - - if (isValid(fbh) ) - { - FrameBufferMtl& frameBuffer = m_frameBuffers[fbh.idx]; - width = frameBuffer.m_width; - height = frameBuffer.m_height; - } - clearWithRenderPass = true && 0 == viewRect.m_x && 0 == viewRect.m_y diff --git a/src/renderer_webgpu.cpp b/src/renderer_webgpu.cpp index 6878a7ce7..3a17bfd40 100644 --- a/src/renderer_webgpu.cpp +++ b/src/renderer_webgpu.cpp @@ -5962,11 +5962,15 @@ m_resolution.formatColor = TextureFormat::BGRA8; ; viewState.m_rect = _render->m_view[view].m_rect; - const Rect& viewRect = _render->m_view[view].m_rect; - const Rect& clippedRect = _render->m_view[view].m_clippedRect; - Rect scissorRect = _render->m_view[view].m_scissor; const Rect fbRect(0, 0, bx::narrowCast(fb.m_width), bx::narrowCast(fb.m_height) ); + + const Rect& viewRect = _render->m_view[view].m_rect; + + Rect clippedRect; + clippedRect.setIntersect(_render->m_view[view].m_clippedRect, fbRect); + + Rect scissorRect = _render->m_view[view].m_scissor; scissorRect.intersect(fbRect); viewHasScissor = !scissorRect.isZero();