diff --git a/src/video_core/buffer_cache/buffer_cache.cpp b/src/video_core/buffer_cache/buffer_cache.cpp index 097c16473..e89906e10 100644 --- a/src/video_core/buffer_cache/buffer_cache.cpp +++ b/src/video_core/buffer_cache/buffer_cache.cpp @@ -566,18 +566,17 @@ void BufferCache::CreateFaultBuffers() { const auto cmdbuf = scheduler.CommandBuffer(); cmdbuf.copyBuffer(fault_readback_buffer.buffer, staging_buffer.Handle(), copy); scheduler.Finish(); - std::array buffer{}; - std::memcpy(buffer.data(), mapped, FAULT_READBACK_SIZE); + std::memcpy(fault_readback_cpu.data(), mapped, FAULT_READBACK_SIZE); // Create the fault buffers batched boost::icl::interval_set fault_ranges; for (u64 i = 0; i < FAULT_READBACK_SIZE; ++i) { - if (buffer[i] == 0) { + if (fault_readback_cpu[i] == 0) { continue; } // Each bit is a page const u64 page = i * 8; for (u8 j = 0; j < 8; ++j) { - if ((buffer[i] & (1 << j)) == 0) { + if ((fault_readback_cpu[i] & (1 << j)) == 0) { continue; } const VAddr start = (page + j) << CACHING_PAGEBITS; diff --git a/src/video_core/buffer_cache/buffer_cache.h b/src/video_core/buffer_cache/buffer_cache.h index 08f725d62..1c04ed249 100644 --- a/src/video_core/buffer_cache/buffer_cache.h +++ b/src/video_core/buffer_cache/buffer_cache.h @@ -39,9 +39,9 @@ class TextureCache; class BufferCache { public: - static constexpr u32 CACHING_PAGEBITS = 16; + static constexpr u32 CACHING_PAGEBITS = 14; static constexpr u64 CACHING_PAGESIZE = u64{1} << CACHING_PAGEBITS; - static constexpr u64 DEVICE_PAGESIZE = 64_KB; + static constexpr u64 DEVICE_PAGESIZE = 16_KB; static constexpr u64 CACHING_NUMPAGES = u64{1} << (40 - CACHING_PAGEBITS); static constexpr u64 BDA_PAGETABLE_SIZE = CACHING_NUMPAGES * sizeof(vk::DeviceAddress); @@ -50,7 +50,7 @@ public: struct Traits { using Entry = BufferId; static constexpr size_t AddressSpaceBits = 40; - static constexpr size_t FirstLevelBits = 18; + static constexpr size_t FirstLevelBits = 16; static constexpr size_t PageBits = CACHING_PAGEBITS; }; using PageTable = MultiLevelPageTable; @@ -200,6 +200,8 @@ private: Buffer gds_buffer; Buffer bda_pagetable_buffer; Buffer fault_readback_buffer; + // We need to define here to avoid stack overflow + std::array fault_readback_cpu; boost::icl::interval_set queued_imports; boost::icl::interval_set imported_regions; std::vector imported_buffers;