|
|
@@ -481,6 +481,38 @@ inline void CommandBufferImpl::drawcallCommon()
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ // Flush viewport
|
|
|
+ if(ANKI_UNLIKELY(m_viewportDirty))
|
|
|
+ {
|
|
|
+ // Do some hacks to flip the viewport
|
|
|
+
|
|
|
+ const I minx = m_viewport[0];
|
|
|
+ const I miny = m_viewport[1];
|
|
|
+ const I maxx = m_viewport[2];
|
|
|
+ const I maxy = m_viewport[3];
|
|
|
+
|
|
|
+ U32 fbWidth, fbHeight;
|
|
|
+ m_activeFb->m_impl->getAttachmentsSize(fbWidth, fbHeight);
|
|
|
+
|
|
|
+ VkViewport s;
|
|
|
+ s.x = minx;
|
|
|
+ s.y = fbHeight - miny; // Move to the bottom
|
|
|
+ s.width = maxx - minx;
|
|
|
+ s.height = -(maxy - miny); // Negative to flip
|
|
|
+ s.minDepth = 0.0;
|
|
|
+ s.maxDepth = 1.0;
|
|
|
+ ANKI_CMD(vkCmdSetViewport(m_handle, 0, 1, &s), ANY_OTHER_COMMAND);
|
|
|
+
|
|
|
+ VkRect2D scissor = {};
|
|
|
+ scissor.extent.width = maxx - minx;
|
|
|
+ scissor.extent.height = maxy - miny;
|
|
|
+ scissor.offset.x = minx;
|
|
|
+ scissor.offset.y = fbHeight - maxy;
|
|
|
+ ANKI_CMD(vkCmdSetScissor(m_handle, 0, 1, &scissor), ANY_OTHER_COMMAND);
|
|
|
+
|
|
|
+ m_viewportDirty = false;
|
|
|
+ }
|
|
|
+
|
|
|
ANKI_TRACE_INC_COUNTER(GR_DRAWCALLS, 1);
|
|
|
}
|
|
|
|