From 40eca20e12b8cbe94f0f722aa88897406359b316 Mon Sep 17 00:00:00 2001 From: Samuliak Date: Mon, 8 Apr 2024 17:03:25 +0200 Subject: [PATCH] metal: implement buffer to buffer copy --- src/video_core/renderer_metal/mtl_buffer_cache.cpp | 9 ++++----- src/video_core/renderer_metal/mtl_graphics_pipeline.cpp | 4 +++- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/video_core/renderer_metal/mtl_buffer_cache.cpp b/src/video_core/renderer_metal/mtl_buffer_cache.cpp index 61a4570920..dfde651144 100644 --- a/src/video_core/renderer_metal/mtl_buffer_cache.cpp +++ b/src/video_core/renderer_metal/mtl_buffer_cache.cpp @@ -81,11 +81,10 @@ void BufferCacheRuntime::Finish() {} void BufferCacheRuntime::CopyBuffer(MTL::Buffer* dst_buffer, MTL::Buffer* src_buffer, std::span copies, bool barrier, bool can_reorder_upload) { - // HACK: needs to be commented out, since it interrupts render pass - // for (const VideoCommon::BufferCopy& copy : copies) { - // command_recorder.GetBlitCommandEncoder()->copyFromBuffer( - // src_buffer, copy.src_offset, dst_buffer, copy.dst_offset, copy.size); - // } + for (const VideoCommon::BufferCopy& copy : copies) { + command_recorder.GetBlitCommandEncoder()->copyFromBuffer( + src_buffer, copy.src_offset, dst_buffer, copy.dst_offset, copy.size); + } } void BufferCacheRuntime::ClearBuffer(MTL::Buffer* dest_buffer, u32 offset, size_t size, u32 value) { diff --git a/src/video_core/renderer_metal/mtl_graphics_pipeline.cpp b/src/video_core/renderer_metal/mtl_graphics_pipeline.cpp index acca0c5bbf..4399b75297 100644 --- a/src/video_core/renderer_metal/mtl_graphics_pipeline.cpp +++ b/src/video_core/renderer_metal/mtl_graphics_pipeline.cpp @@ -59,7 +59,9 @@ void GraphicsPipeline::Configure(bool is_indexed) { buffer_cache.UpdateGraphicsBuffers(is_indexed); buffer_cache.BindHostGeometryBuffers(is_indexed); - texture_cache.UpdateRenderTargets(true); + texture_cache.SynchronizeGraphicsDescriptors(); + + texture_cache.UpdateRenderTargets(false); const Framebuffer* const framebuffer = texture_cache.GetFramebuffer(); if (!framebuffer) { return;