Vulkan: Fix how the viewport is calculated with Y flip
- This fixes all ViewportTest.* and MipmapTest.*
- Tests left to fix in end2end:
- BlitFramebuffer*
- MaxTextureSizeTest.*
- PointSpritesTest.*
Every other test in angle_end2end_tests are working.
Bug: angleproject:2673
Change-Id: I162083bc847c15fa5490ab524ad4c22747d232ea
Reviewed-on: https://chromium-review.googlesource.com/1126333
Commit-Queue: Luc Ferron <lucferron@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libANGLE/renderer/vulkan/FramebufferVk.cpp b/src/libANGLE/renderer/vulkan/FramebufferVk.cpp
index 1bd9774..0ffe5b4 100644
--- a/src/libANGLE/renderer/vulkan/FramebufferVk.cpp
+++ b/src/libANGLE/renderer/vulkan/FramebufferVk.cpp
@@ -782,8 +782,15 @@
// There is nothing to clear since the scissor is outside of the render area.
return gl::NoError();
}
+
clearRect.rect = gl_vk::GetRect(intersection);
+ if (contextVk->isViewportFlipEnabled())
+ {
+ clearRect.rect.offset.y = getRenderPassRenderArea().height - clearRect.rect.offset.y -
+ clearRect.rect.extent.height;
+ }
+
gl::AttachmentArray<VkClearAttachment> clearAttachments;
int clearAttachmentIndex = 0;
@@ -889,7 +896,7 @@
pipelineDesc.updateColorWriteMask(colorMaskFlags, getEmulatedAlphaAttachmentMask());
pipelineDesc.updateRenderPassDesc(getRenderPassDesc());
pipelineDesc.updateShaders(fullScreenQuad->queueSerial(), pushConstantColor->queueSerial());
- pipelineDesc.updateViewport(renderArea, 0.0f, 1.0f, contextVk->isViewportFlipEnabled());
+ pipelineDesc.updateViewport(this, renderArea, 0.0f, 1.0f, contextVk->isViewportFlipEnabled());
const gl::State &glState = contextVk->getGLState();
if (glState.isScissorTestEnabled())