Fix scissor rect larger than render pass width/height in Metal backend
BUG=dawn:116
TEST=dawn_end2end_tests
Change-Id: I3e36e19d20b271ba58652bcaea973f3999e9e7ac
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/5560
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Hao Li <hao.x.li@intel.com>
diff --git a/src/dawn_native/metal/CommandBufferMTL.mm b/src/dawn_native/metal/CommandBufferMTL.mm
index bb76ca2..a15adcb 100644
--- a/src/dawn_native/metal/CommandBufferMTL.mm
+++ b/src/dawn_native/metal/CommandBufferMTL.mm
@@ -667,6 +667,15 @@
rect.width = cmd->width;
rect.height = cmd->height;
+ // The scissor rect x + width must be <= render pass width
+ if ((rect.x + rect.width) > renderPassCmd->width) {
+ rect.width = renderPassCmd->width - rect.x;
+ }
+ // The scissor rect y + height must be <= render pass height
+ if ((rect.y + rect.height > renderPassCmd->height)) {
+ rect.height = renderPassCmd->height - rect.y;
+ }
+
[encoder setScissorRect:rect];
} break;