mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-07-27 20:44:28 +00:00
16K pages and stack overflow fix
This commit is contained in:
parent
68a33cd38c
commit
31df795701
@ -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<u8, FAULT_READBACK_SIZE> 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<VAddr> 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;
|
||||
|
@ -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<Traits>;
|
||||
@ -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<u8, FAULT_READBACK_SIZE> fault_readback_cpu;
|
||||
boost::icl::interval_set<VAddr> queued_imports;
|
||||
boost::icl::interval_set<u64> imported_regions;
|
||||
std::vector<ImportedHostBuffer> imported_buffers;
|
||||
|
Loading…
Reference in New Issue
Block a user