summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends
diff options
context:
space:
mode:
authorStenzek <stenzek@gmail.com>2016-02-17 02:44:17 +1000
committerStenzek <stenzek@gmail.com>2016-02-28 17:18:38 +1000
commit2f7870b04608e82f5995cd75e53a7eade5cedc73 (patch)
treedfe1245ae83f71025456f14443a6b14e868223e2 /Source/Core/VideoBackends
parent31bc0cf2c3d8995763fac0d1b04bfd83196b3d2a (diff)
D3D12: Don't add fence tracking entries without buffer offset changes
Diffstat (limited to 'Source/Core/VideoBackends')
-rw-r--r--Source/Core/VideoBackends/D3D12/D3DStreamBuffer.cpp15
-rw-r--r--Source/Core/VideoBackends/D3D12/D3DStreamBuffer.h2
2 files changed, 15 insertions, 2 deletions
diff --git a/Source/Core/VideoBackends/D3D12/D3DStreamBuffer.cpp b/Source/Core/VideoBackends/D3D12/D3DStreamBuffer.cpp
index fa91352b99..aa868b0004 100644
--- a/Source/Core/VideoBackends/D3D12/D3DStreamBuffer.cpp
+++ b/Source/Core/VideoBackends/D3D12/D3DStreamBuffer.cpp
@@ -293,7 +293,7 @@ void D3DStreamBuffer::UpdateGPUProgress()
m_queued_fences.pop();
// Has fence gone past this point?
- if (fence_value > tracking_information.fence_value)
+ if (fence_value >= tracking_information.fence_value)
{
m_buffer_gpu_completion_offset = tracking_information.buffer_offset;
}
@@ -307,7 +307,18 @@ void D3DStreamBuffer::UpdateGPUProgress()
void D3DStreamBuffer::QueueFenceCallback(void* owning_object, UINT64 fence_value)
{
- reinterpret_cast<D3DStreamBuffer*>(owning_object)->QueueFence(fence_value);
+ D3DStreamBuffer* owning_stream_buffer = reinterpret_cast<D3DStreamBuffer*>(owning_object);
+ if (owning_stream_buffer->HasBufferOffsetChangedSinceLastFence())
+ owning_stream_buffer->QueueFence(fence_value);
+}
+
+bool D3DStreamBuffer::HasBufferOffsetChangedSinceLastFence() const
+{
+ if (m_queued_fences.empty())
+ return true;
+
+ // Don't add a new fence tracking entry when our offset hasn't changed.
+ return (m_queued_fences.back().buffer_offset != m_buffer_offset);
}
void D3DStreamBuffer::QueueFence(UINT64 fence_value)
diff --git a/Source/Core/VideoBackends/D3D12/D3DStreamBuffer.h b/Source/Core/VideoBackends/D3D12/D3DStreamBuffer.h
index 897e30a66d..e931904fbd 100644
--- a/Source/Core/VideoBackends/D3D12/D3DStreamBuffer.h
+++ b/Source/Core/VideoBackends/D3D12/D3DStreamBuffer.h
@@ -39,6 +39,8 @@ private:
bool AttemptToFindExistingFenceToStallOn(size_t allocation_size);
void UpdateGPUProgress();
+
+ bool HasBufferOffsetChangedSinceLastFence() const;
void QueueFence(UINT64 fence_value);
struct FenceTrackingInformation