|
|
|
@ -20,7 +20,6 @@
|
|
|
|
|
#include "video_core/gpu.h"
|
|
|
|
|
#include "video_core/rasterizer_download_area.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
namespace Core::Memory {
|
|
|
|
|
|
|
|
|
|
// Implementation class used to keep the specifics of the memory subsystem hidden
|
|
|
|
@ -465,7 +464,8 @@ struct Memory::Impl {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (Settings::IsFastmemEnabled()) {
|
|
|
|
|
const bool is_read_enable = !Settings::values.use_reactive_flushing.GetValue() || !cached;
|
|
|
|
|
const bool is_read_enable =
|
|
|
|
|
!Settings::values.use_reactive_flushing.GetValue() || !cached;
|
|
|
|
|
system.DeviceMemory().buffer.Protect(vaddr, size, is_read_enable, !cached);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -654,9 +654,7 @@ struct Memory::Impl {
|
|
|
|
|
LOG_ERROR(HW_Memory, "Unmapped Read{} @ 0x{:016X}", sizeof(T) * 8,
|
|
|
|
|
GetInteger(vaddr));
|
|
|
|
|
},
|
|
|
|
|
[&]() {
|
|
|
|
|
HandleRasterizerDownload(GetInteger(vaddr), sizeof(T));
|
|
|
|
|
});
|
|
|
|
|
[&]() { HandleRasterizerDownload(GetInteger(vaddr), sizeof(T)); });
|
|
|
|
|
if (ptr) {
|
|
|
|
|
std::memcpy(&result, ptr, sizeof(T));
|
|
|
|
|
}
|
|
|
|
@ -721,7 +719,8 @@ struct Memory::Impl {
|
|
|
|
|
const size_t core = system.GetCurrentHostThreadID();
|
|
|
|
|
auto& current_area = rasterizer_areas[core];
|
|
|
|
|
const VAddr end_address = address + size;
|
|
|
|
|
if (current_area.start_address <= address && end_address <= current_area.end_address) [[likely]] {
|
|
|
|
|
if (current_area.start_address <= address && end_address <= current_area.end_address)
|
|
|
|
|
[[likely]] {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
current_area = system.GPU().OnCPURead(address, size);
|
|
|
|
|