diff --git a/src/common/func_traits.h b/src/common/func_traits.h index fe938c613..58f1ddeb3 100644 --- a/src/common/func_traits.h +++ b/src/common/func_traits.h @@ -38,7 +38,6 @@ template struct FuncTraits::operator())>> : FuncTraits::operator())> {}; - // For lambdas: for compat (may be removed) template struct LambdaTraits : LambdaTraits::operator())> {}; diff --git a/src/video_core/buffer_cache/buffer_cache.cpp b/src/video_core/buffer_cache/buffer_cache.cpp index ba5a35f60..3e7b8ba60 100644 --- a/src/video_core/buffer_cache/buffer_cache.cpp +++ b/src/video_core/buffer_cache/buffer_cache.cpp @@ -1069,35 +1069,41 @@ void BufferCache::SynchronizeBuffersForDma() { }; mapped_ranges.ForEach([&](VAddr device_addr, u64 size) { RENDERER_TRACE; - memory_tracker->ForEachUploadRange(device_addr, size, false, [&](u64 device_addr_out, u64 range_size, RegionBits& clear_mask) { - RENDERER_TRACE; - ForEachBufferInRange(device_addr_out, range_size, [&](BufferId buffer_id, Buffer& buffer) { + memory_tracker->ForEachUploadRange( + device_addr, size, false, + [&](u64 device_addr_out, u64 range_size, RegionBits& clear_mask) { RENDERER_TRACE; - if (last_buffer_id != buffer_id) { - upload_pending(); - last_buffer_id = buffer_id; - } - const VAddr copy_start = std::max(buffer.CpuAddr(), device_addr_out); - const VAddr copy_end = std::min(buffer.CpuAddr() + buffer.SizeBytes(), device_addr_out + range_size); - const u32 copy_size = static_cast(copy_end - copy_start); - if (copy_size == 0) { - return; - } - const u64 offset = staging_buffer.Copy(copy_start, copy_size); - copies.push_back(vk::BufferCopy{ - .srcOffset = offset, - .dstOffset = copy_start - buffer.CpuAddr(), - .size = copy_size, - }); + ForEachBufferInRange( + device_addr_out, range_size, [&](BufferId buffer_id, Buffer& buffer) { + RENDERER_TRACE; + if (last_buffer_id != buffer_id) { + upload_pending(); + last_buffer_id = buffer_id; + } + const VAddr copy_start = std::max(buffer.CpuAddr(), device_addr_out); + const VAddr copy_end = std::min(buffer.CpuAddr() + buffer.SizeBytes(), + device_addr_out + range_size); + const u32 copy_size = static_cast(copy_end - copy_start); + if (copy_size == 0) { + return; + } + const u64 offset = staging_buffer.Copy(copy_start, copy_size); + copies.push_back(vk::BufferCopy{ + .srcOffset = offset, + .dstOffset = copy_start - buffer.CpuAddr(), + .size = copy_size, + }); - // We need to use tracker page size here, we are marking the clear mask - const u64 page_start = (copy_start & TRACKER_HIGHER_PAGE_MASK) >> TRACKER_PAGE_BITS; - const u64 page_end = - Common::DivCeil((copy_end - 1) & TRACKER_HIGHER_PAGE_MASK, TRACKER_BYTES_PER_PAGE); - ASSERT(page_start < page_end); - clear_mask.SetRange(page_start, page_end); - }); - }, upload_pending); + // We need to use tracker page size here, we are marking the clear mask + const u64 page_start = + (copy_start & TRACKER_HIGHER_PAGE_MASK) >> TRACKER_PAGE_BITS; + const u64 page_end = Common::DivCeil( + (copy_end - 1) & TRACKER_HIGHER_PAGE_MASK, TRACKER_BYTES_PER_PAGE); + ASSERT(page_start < page_end); + clear_mask.SetRange(page_start, page_end); + }); + }, + upload_pending); }); MemoryBarrier(); } diff --git a/src/video_core/buffer_cache/region_definitions.h b/src/video_core/buffer_cache/region_definitions.h index 760096df2..136d8236c 100644 --- a/src/video_core/buffer_cache/region_definitions.h +++ b/src/video_core/buffer_cache/region_definitions.h @@ -23,7 +23,6 @@ enum class Type { GPU, }; - using RegionBits = Common::BitArray; } // namespace VideoCore