Some alignment fixes

This commit is contained in:
Lander Gallastegi 2025-05-11 22:22:54 +02:00
parent bd31f1d12c
commit 2edb3c5cb1
2 changed files with 6 additions and 10 deletions

View File

@ -144,8 +144,8 @@ void BufferCache::InvalidateMemory(VAddr device_addr, u64 size, bool unmap) {
{ {
std::scoped_lock lock(dma_sync_ranges_mutex); std::scoped_lock lock(dma_sync_ranges_mutex);
const VAddr page_addr = Common::AlignDown(device_addr, CACHING_PAGESIZE); const VAddr aligned_addr = Common::AlignDown(device_addr, CACHING_PAGESIZE);
const u64 page_size = Common::AlignUp(size, CACHING_PAGESIZE); const u64 aligned_size = Common::AlignUp(device_addr + size, CACHING_PAGESIZE) - aligned_addr;
dma_sync_ranges.Add(device_addr, size); dma_sync_ranges.Add(device_addr, size);
} }
} }
@ -384,9 +384,7 @@ std::pair<Buffer*, u32> BufferCache::ObtainViewBuffer(VAddr gpu_addr, u32 size,
bool BufferCache::IsRegionRegistered(VAddr addr, size_t size) { bool BufferCache::IsRegionRegistered(VAddr addr, size_t size) {
// Check if we are missing some edge case here // Check if we are missing some edge case here
const u64 page = addr >> CACHING_PAGEBITS; return buffer_ranges.Intersects(addr, size);
const u64 page_size = Common::DivCeil(size, CACHING_PAGESIZE);
return buffer_ranges.Intersects(page, page_size);
} }
bool BufferCache::IsRegionCpuModified(VAddr addr, size_t size) { bool BufferCache::IsRegionCpuModified(VAddr addr, size_t size) {
@ -733,9 +731,9 @@ void BufferCache::ChangeRegister(BufferId buffer_id) {
} }
} }
if constexpr (insert) { if constexpr (insert) {
buffer_ranges.Add(page_begin, page_end - page_begin, buffer_id); buffer_ranges.Add(buffer.CpuAddr(), buffer.SizeBytes(), buffer_id);
} else { } else {
buffer_ranges.Subtract(page_begin, page_end - page_begin); buffer_ranges.Subtract(buffer.CpuAddr(), buffer.SizeBytes());
} }
} }

View File

@ -148,9 +148,7 @@ public:
private: private:
template <typename Func> template <typename Func>
void ForEachBufferInRange(VAddr device_addr, u64 size, Func&& func) { void ForEachBufferInRange(VAddr device_addr, u64 size, Func&& func) {
const u64 page = device_addr >> CACHING_PAGEBITS; buffer_ranges.ForEachInRange(device_addr, size, [&](u64 page_start, u64 page_end, BufferId id) {
const u64 page_size = Common::DivCeil(size, CACHING_PAGESIZE);
buffer_ranges.ForEachInRange(page, page_size, [&](u64 page_start, u64 page_end, BufferId id) {
Buffer& buffer = slot_buffers[id]; Buffer& buffer = slot_buffers[id];
func(id, buffer); func(id, buffer);
}); });