diff --git a/src/core/memory.cpp b/src/core/memory.cpp index 28d30eee29..3fed514008 100644 --- a/src/core/memory.cpp +++ b/src/core/memory.cpp @@ -322,7 +322,7 @@ struct Memory::Impl { } if (Settings::IsFastmemEnabled()) { - const bool is_read_enable = Settings::IsGPULevelHigh() || !cached; + const bool is_read_enable = !Settings::IsGPULevelExtreme() || !cached; system.DeviceMemory().buffer.Protect(vaddr, size, is_read_enable, !cached); } diff --git a/src/video_core/engines/maxwell_3d.cpp b/src/video_core/engines/maxwell_3d.cpp index 9251690631..45bd96395b 100644 --- a/src/video_core/engines/maxwell_3d.cpp +++ b/src/video_core/engines/maxwell_3d.cpp @@ -30,6 +30,7 @@ Maxwell3D::Maxwell3D(Core::System& system_, MemoryManager& memory_manager_) upload_state{memory_manager, regs.upload} { dirty.flags.flip(); InitializeRegisterDefaults(); + accelerated_reads = Settings::IsFastmemEnabled(); } Maxwell3D::~Maxwell3D() = default; @@ -696,7 +697,7 @@ void Maxwell3D::RecalculateVertexArrayLimit() { auto maybe_ptr = memory_manager.GpuToHostPointer(start_address + offset); u8* ptr; - if (maybe_ptr) { + if (accelerated_reads && maybe_ptr) { ptr = *maybe_ptr; } else { vn_state.index_buffer_cache.resize(Common::DivideUp(expected_size, sizeof(u32))); diff --git a/src/video_core/engines/maxwell_3d.h b/src/video_core/engines/maxwell_3d.h index 3419dfcd45..3940e89c5b 100644 --- a/src/video_core/engines/maxwell_3d.h +++ b/src/video_core/engines/maxwell_3d.h @@ -1506,6 +1506,8 @@ public: std::vector index_buffer_cache; } vertex_num_approx_state; + bool accelerated_reads{}; + private: void InitializeRegisterDefaults();