Vulkan: Implement scissor test and add a simple test for it
Bug: angleproject:2338
Change-Id: I699189fcd41feca1656c8553fdf4c1078421524d
Reviewed-on: https://chromium-review.googlesource.com/904861
Commit-Queue: Luc Ferron <lucferron@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libANGLE/renderer/vulkan/ContextVk.cpp b/src/libANGLE/renderer/vulkan/ContextVk.cpp
index 835e058..cf6a62f 100644
--- a/src/libANGLE/renderer/vulkan/ContextVk.cpp
+++ b/src/libANGLE/renderer/vulkan/ContextVk.cpp
@@ -416,14 +416,34 @@
switch (dirtyBit)
{
case gl::State::DIRTY_BIT_SCISSOR_TEST_ENABLED:
- WARN() << "DIRTY_BIT_SCISSOR_TEST_ENABLED unimplemented";
+ if (glState.isScissorTestEnabled())
+ {
+ mPipelineDesc->updateScissor(glState.getScissor());
+ }
+ else
+ {
+ mPipelineDesc->updateScissor(glState.getViewport());
+ }
break;
case gl::State::DIRTY_BIT_SCISSOR:
- WARN() << "DIRTY_BIT_SCISSOR unimplemented";
+ // Only modify the scissor region if the test is enabled, otherwise we want to keep
+ // the viewport size as the scissor region.
+ if (glState.isScissorTestEnabled())
+ {
+ mPipelineDesc->updateScissor(glState.getScissor());
+ }
break;
case gl::State::DIRTY_BIT_VIEWPORT:
mPipelineDesc->updateViewport(glState.getViewport(), glState.getNearPlane(),
glState.getFarPlane());
+
+ // If the scissor test isn't enabled, we have to also update the scissor to
+ // be equal to the viewport to make sure we keep rendering everything in the
+ // viewport.
+ if (!glState.isScissorTestEnabled())
+ {
+ mPipelineDesc->updateScissor(glState.getViewport());
+ }
break;
case gl::State::DIRTY_BIT_DEPTH_RANGE:
WARN() << "DIRTY_BIT_DEPTH_RANGE unimplemented";