mirror of
https://github.com/KytyPS5/KytyPS5.git
synced 2026-10-20 10:56:58 +02:00
shader: synchronize GPU-written descriptor dependencies through buffer cache
This commit is contained in:
@@ -95,7 +95,7 @@ void PipelineCacheLog(fmt::format_string<Args...> format, Args&&... args) {
|
||||
|
||||
bool ReadShaderGuestMemory(void*, uint64_t address, std::span<uint32_t> values) {
|
||||
return !values.empty() &&
|
||||
Libs::LibKernel::Memory::TryReadGpuCleanBacking(address, values.data(), values.size_bytes());
|
||||
Libs::LibKernel::Memory::TryReadGpuBacking(address, values.data(), values.size_bytes());
|
||||
}
|
||||
|
||||
void DumpShaderSpirv(const char* stage_name, uint64_t shader_hash,
|
||||
|
||||
@@ -881,13 +881,16 @@ bool TryReadBacking(uint64_t vaddr, void* data, uint64_t size) {
|
||||
g_guest_address_space->TryReadBacking(vaddr, data, size);
|
||||
}
|
||||
|
||||
bool TryReadGpuCleanBacking(uint64_t vaddr, void* data, uint64_t size) {
|
||||
bool TryReadGpuBacking(uint64_t vaddr, void* data, uint64_t size) {
|
||||
if (g_gpu_resources != nullptr && IsGpuAddressRange(vaddr, size)) {
|
||||
if (!Graphics::GuestGpu::IsGpuThread() ||
|
||||
GetGpuResources().GetBufferCache().HasGpuDirtyBytes(vaddr, size) ||
|
||||
GetGpuResources().GetTextureCache().IsRegionGpuModified(vaddr, size)) {
|
||||
return false;
|
||||
}
|
||||
auto& buffers = GetGpuResources().GetBufferCache();
|
||||
if (buffers.HasGpuDirtyBytes(vaddr, size)) {
|
||||
buffers.ReadMemory(vaddr, size);
|
||||
}
|
||||
}
|
||||
return TryReadBacking(vaddr, data, size);
|
||||
}
|
||||
|
||||
+1
-1
@@ -114,7 +114,7 @@ int AllocateDirectMemory(int64_t search_start, int64_t search_end, size_t size,
|
||||
int MapAutomaticMemory(uint64_t vaddr, size_t size, int type, int prot);
|
||||
bool TryWriteBacking(uint64_t vaddr, const void* data, uint64_t size);
|
||||
bool TryReadBacking(uint64_t vaddr, void* data, uint64_t size);
|
||||
bool TryReadGpuCleanBacking(uint64_t vaddr, void* data, uint64_t size);
|
||||
bool TryReadGpuBacking(uint64_t vaddr, void* data, uint64_t size);
|
||||
bool TryReadSparseBacking(uint64_t vaddr, void* data, uint64_t size);
|
||||
[[nodiscard]] uint64_t ClampRangeSize(uint64_t vaddr, uint64_t size);
|
||||
void WriteBacking(uint64_t vaddr, const void* data, uint64_t size) noexcept;
|
||||
|
||||
Reference in New Issue
Block a user