Blit color&depth texture to current MTKView

I have a fbo generated by last frame, which contain a color texture and a depth texture. Then i want blit that fbo to current MTKView, but failed. Thanks a lot for any suggestions.

Here is the code:

last frame:

id <MTLTexture> src_color;
id <MTLTexture> src_depth;
drawTo(src_color, src_depth);

current frame:

first, init a depth texture if null:

id<MTLTexture> depth_texture_;
if(depth_texture_) {
    depth_texture_ = [device_ newTextureWithDescriptor:desc];
}

second, create desc for encoder:

current_desc = metal_view_.currentRenderPassDescriptor;
current_desc.depthAttachment.texture     = depth_texture_;
current_desc.depthAttachment.loadAction  = MTLLoadActionClear;
current_desc.depthAttachment.clearDepth  = 1.0;
current_desc.stencilAttachment.texture     = depth_texture_;
current_desc.stencilAttachment.loadAction  = MTLLoadActionClear;
current_desc.stencilAttachment.clearStencil = 0;
current_desc.colorAttachments[0].loadAction = MTLLoadActionClear;
current_desc.colorAttachments[0].clearColor = MTLClearColorMake(1.0, 1, 1, 1.0);

third, blit to current MTKView:

auto dst_color = current_desc.colorAttachments[0].texture;
auto dst_depth = current_desc.depthAttachment.texture;
id<MTLCommandBuffer> commandBuffer = [command_queue_ commandBuffer];
commandBuffer.label = @"blit";
id <MTLBlitCommandEncoder> blitEncoder = [commandBuffer blitCommandEncoder];
[blitEncoder copyFromTexture:src_color
                             sourceSlice:0
                             sourceLevel:0
                             sourceOrigin:MTLOriginMake(srcRect.x, srcRect.y, 0)
                             sourceSize:MTLSizeMake(srcRect.width, srcRect.height, 1)
                             toTexture:dst_color
                             destinationSlice:0
                             destinationLevel:0
                             destinationOrigin:MTLOriginMake(dstRect.x, dstRect.y, 0)];
[blitEncoder copyFromTexture:src_depth
                             sourceSlice:0
                             sourceLevel:0
                             sourceOrigin:MTLOriginMake(srcRect.x, srcRect.y, 0)
                             sourceSize:MTLSizeMake(srcRect.width, srcRect.height, 1)
                             toTexture:dst_depth
                             destinationSlice:0
                             destinationLevel:0
                             destinationOrigin:MTLOriginMake(dstRect.x, dstRect.y, 0)];
[blitEncoder endEncoding];
[commandBuffer commit];
[commandBuffer waitUntilCompleted];

Replies

And one points here: metal_view_.framebufferOnly set false, at current frame beginning