diff --git a/impeller/renderer/backend/metal/render_pass_mtl.mm b/impeller/renderer/backend/metal/render_pass_mtl.mm index 2d0876dcbdf76..a257754b4c04f 100644 --- a/impeller/renderer/backend/metal/render_pass_mtl.mm +++ b/impeller/renderer/backend/metal/render_pass_mtl.mm @@ -429,28 +429,28 @@ static bool Bind(PassBindingsCache& pass, : MTLWindingCounterClockwise]; [encoder setCullMode:ToMTLCullMode(command.cull_mode)]; [encoder setStencilReferenceValue:command.stencil_reference]; - if (command.viewport.has_value()) { - auto v = command.viewport.value(); - MTLViewport viewport = { - .originX = v.rect.origin.x, - .originY = v.rect.origin.y, - .width = v.rect.size.width, - .height = v.rect.size.height, - .znear = v.depth_range.z_near, - .zfar = v.depth_range.z_far, - }; - [encoder setViewport:viewport]; - } - if (command.scissor.has_value()) { - auto s = command.scissor.value(); - MTLScissorRect scissor = { - .x = static_cast(s.origin.x), - .y = static_cast(s.origin.y), - .width = static_cast(s.size.width), - .height = static_cast(s.size.height), - }; - [encoder setScissorRect:scissor]; - } + + auto v = command.viewport.value_or( + {.rect = Rect::MakeSize(Size(GetRenderTargetSize()))}); + MTLViewport viewport = { + .originX = v.rect.origin.x, + .originY = v.rect.origin.y, + .width = v.rect.size.width, + .height = v.rect.size.height, + .znear = v.depth_range.z_near, + .zfar = v.depth_range.z_far, + }; + [encoder setViewport:viewport]; + + auto s = command.scissor.value_or(IRect::MakeSize(GetRenderTargetSize())); + MTLScissorRect scissor = { + .x = static_cast(s.origin.x), + .y = static_cast(s.origin.y), + .width = static_cast(s.size.width), + .height = static_cast(s.size.height), + }; + [encoder setScissorRect:scissor]; + if (!bind_stage_resources(command.vertex_bindings, ShaderStage::kVertex)) { return false; }