Set system page blocks to gpu-written every frame
This commit is contained in:
parent
ba60b94c7d
commit
620aa3562e
|
@ -49,6 +49,10 @@ DEFINE_bool(d3d12_submit_on_primary_buffer_end, true,
|
||||||
"Submit the command list when a PM4 primary buffer ends if it's "
|
"Submit the command list when a PM4 primary buffer ends if it's "
|
||||||
"possible to submit immediately to try to reduce frame latency.",
|
"possible to submit immediately to try to reduce frame latency.",
|
||||||
"D3D12");
|
"D3D12");
|
||||||
|
DEFINE_bool(d3d12_clear_memory_page_state, false,
|
||||||
|
"Refresh state of memory pages to enable gpu written data. (Use "
|
||||||
|
"for 'Team Ninja' Games to fix missing character models)",
|
||||||
|
"D3D12");
|
||||||
|
|
||||||
namespace xe {
|
namespace xe {
|
||||||
namespace gpu {
|
namespace gpu {
|
||||||
|
@ -3008,6 +3012,9 @@ bool D3D12CommandProcessor::EndSubmission(bool is_swap) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_closing_frame) {
|
if (is_closing_frame) {
|
||||||
|
if (cvars::d3d12_clear_memory_page_state) {
|
||||||
|
shared_memory_->SetSystemPageBlocksValidWithGpuDataWritten();
|
||||||
|
}
|
||||||
// Close the capture after submitting.
|
// Close the capture after submitting.
|
||||||
if (pix_capturing_) {
|
if (pix_capturing_) {
|
||||||
IDXGraphicsAnalysis* graphics_analysis = provider.GetGraphicsAnalysis();
|
IDXGraphicsAnalysis* graphics_analysis = provider.GetGraphicsAnalysis();
|
||||||
|
|
|
@ -103,12 +103,13 @@ void SharedMemory::ClearCache() {
|
||||||
delete[] pool;
|
delete[] pool;
|
||||||
}
|
}
|
||||||
watch_range_pools_.clear();
|
watch_range_pools_.clear();
|
||||||
|
SetSystemPageBlocksValidWithGpuDataWritten();
|
||||||
|
}
|
||||||
|
|
||||||
{
|
void SharedMemory::SetSystemPageBlocksValidWithGpuDataWritten() {
|
||||||
auto global_lock = global_critical_region_.Acquire();
|
auto global_lock = global_critical_region_.Acquire();
|
||||||
for (SystemPageFlagsBlock& block : system_page_flags_) {
|
for (SystemPageFlagsBlock& block : system_page_flags_) {
|
||||||
block.valid = block.valid_and_gpu_written;
|
block.valid = block.valid_and_gpu_written;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -32,6 +32,7 @@ class SharedMemory {
|
||||||
virtual ~SharedMemory();
|
virtual ~SharedMemory();
|
||||||
// Call in the implementation-specific ClearCache.
|
// Call in the implementation-specific ClearCache.
|
||||||
virtual void ClearCache();
|
virtual void ClearCache();
|
||||||
|
virtual void SetSystemPageBlocksValidWithGpuDataWritten();
|
||||||
|
|
||||||
typedef void (*GlobalWatchCallback)(
|
typedef void (*GlobalWatchCallback)(
|
||||||
const std::unique_lock<std::recursive_mutex>& global_lock, void* context,
|
const std::unique_lock<std::recursive_mutex>& global_lock, void* context,
|
||||||
|
|
Loading…
Reference in New Issue