From 887e51444276502889c720562d3f9e0053a4cc62 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Mon, 12 Mar 2018 13:14:27 +0100 Subject: [PATCH] [dxvk] Use dummy viewport if requested viewport size is 0 Fixes a bunch of validation errors in various games, including The Witcher 3. --- src/dxvk/dxvk_context.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/dxvk/dxvk_context.cpp b/src/dxvk/dxvk_context.cpp index d3f2b0190..46d1fb873 100644 --- a/src/dxvk/dxvk_context.cpp +++ b/src/dxvk/dxvk_context.cpp @@ -1128,10 +1128,17 @@ namespace dxvk { for (uint32_t i = 0; i < viewportCount; i++) { m_state.vp.viewports[i] = viewports[i]; m_state.vp.scissorRects[i] = scissorRects[i]; + + // Vulkan viewports are not allowed to have a width or + // height of zero, so we fall back to a dummy viewport. + if (viewports[i].width == 0.0f || viewports[i].height == 0.0f) { + m_state.vp.viewports[i] = VkViewport { + 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f }; + } } - m_cmd->cmdSetViewport(0, viewportCount, viewports); - m_cmd->cmdSetScissor (0, viewportCount, scissorRects); + m_cmd->cmdSetViewport(0, viewportCount, m_state.vp.viewports.data()); + m_cmd->cmdSetScissor (0, viewportCount, m_state.vp.scissorRects.data()); }