|
|
|
@ -359,6 +359,18 @@ auto BufferCache<P>::TryObtainWindowBufferGpu(GPUVAddr gpu_addr, u32 size, u64 a |
|
|
|
return TryObtainWindowBuffer(*device_addr, size, alignment, post_op); |
|
|
|
} |
|
|
|
|
|
|
|
template <class P> |
|
|
|
void BufferCache<P>::MarkGpuWrittenRange(DAddr device_addr, u32 size) { |
|
|
|
if (size == 0) { |
|
|
|
return; |
|
|
|
} |
|
|
|
const BufferId buffer_id = FindBuffer(device_addr, size); |
|
|
|
if (buffer_id == NULL_BUFFER_ID) { |
|
|
|
return; |
|
|
|
} |
|
|
|
MarkWrittenBuffer(buffer_id, device_addr, size); |
|
|
|
} |
|
|
|
|
|
|
|
template <class P> |
|
|
|
std::pair<typename P::Buffer*, u32> BufferCache<P>::ObtainBuffer(GPUVAddr gpu_addr, u32 size, |
|
|
|
ObtainBufferSynchronize sync_info, |
|
|
|
@ -2311,6 +2323,9 @@ bool BufferCache<P>::TryUnifiedUploadMemory([[maybe_unused]] Buffer& buffer, |
|
|
|
if (Settings::values.enable_gpu_buffer_readback.GetValue()) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
if (!runtime.SupportsUnifiedUploads()) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
boost::container::small_vector<u64, 4> window_ids; |
|
|
|
UnifiedWindowGroups groups; |
|
|
|
for (const BufferCopy& copy : copies) { |
|
|
|
|