summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends/D3D12/D3DQueuedCommandList.cpp
diff options
context:
space:
mode:
authorStenzek <stenzek@gmail.com>2016-03-06 21:34:41 +1000
committerStenzek <stenzek@gmail.com>2016-05-08 23:18:57 +1000
commit4269abdc3e9ff2fe0cba7d42aa875afb8a1fa460 (patch)
tree4d61231deabaea1f165fa467efeee507e576901d /Source/Core/VideoBackends/D3D12/D3DQueuedCommandList.cpp
parent25d5da0ea38a405c7fe4d1e3e4207701035c4fd2 (diff)
D3D12: Implement perf query support
Diffstat (limited to 'Source/Core/VideoBackends/D3D12/D3DQueuedCommandList.cpp')
-rw-r--r--Source/Core/VideoBackends/D3D12/D3DQueuedCommandList.cpp72
1 files changed, 66 insertions, 6 deletions
diff --git a/Source/Core/VideoBackends/D3D12/D3DQueuedCommandList.cpp b/Source/Core/VideoBackends/D3D12/D3DQueuedCommandList.cpp
index 981b2e731c..8a84a0c42b 100644
--- a/Source/Core/VideoBackends/D3D12/D3DQueuedCommandList.cpp
+++ b/Source/Core/VideoBackends/D3D12/D3DQueuedCommandList.cpp
@@ -274,6 +274,45 @@ void ID3D12QueuedCommandList::BackgroundThreadFunction(ID3D12QueuedCommandList*
break;
}
+ case D3DQueueItemType::BeginQuery:
+ {
+ command_list->BeginQuery(
+ reinterpret_cast<D3DQueueItem*>(item)->BeginQuery.pQueryHeap,
+ reinterpret_cast<D3DQueueItem*>(item)->BeginQuery.Type,
+ reinterpret_cast<D3DQueueItem*>(item)->BeginQuery.Index
+ );
+
+ item += BufferOffsetForQueueItemType<BeginQueryArguments>();
+ break;
+ }
+
+ case D3DQueueItemType::EndQuery:
+ {
+ command_list->EndQuery(
+ reinterpret_cast<D3DQueueItem*>(item)->EndQuery.pQueryHeap,
+ reinterpret_cast<D3DQueueItem*>(item)->EndQuery.Type,
+ reinterpret_cast<D3DQueueItem*>(item)->EndQuery.Index
+ );
+
+ item += BufferOffsetForQueueItemType<EndQueryArguments>();
+ break;
+ }
+
+ case D3DQueueItemType::ResolveQueryData:
+ {
+ command_list->ResolveQueryData(
+ reinterpret_cast<D3DQueueItem*>(item)->ResolveQueryData.pQueryHeap,
+ reinterpret_cast<D3DQueueItem*>(item)->ResolveQueryData.Type,
+ reinterpret_cast<D3DQueueItem*>(item)->ResolveQueryData.StartElement,
+ reinterpret_cast<D3DQueueItem*>(item)->ResolveQueryData.ElementCount,
+ reinterpret_cast<D3DQueueItem*>(item)->ResolveQueryData.pDestinationBuffer,
+ reinterpret_cast<D3DQueueItem*>(item)->ResolveQueryData.AlignedDestinationBufferOffset
+ );
+
+ item += BufferOffsetForQueueItemType<ResolveQueryDataArguments>();
+ break;
+ }
+
case D3DQueueItemType::CloseCommandList:
{
CheckHR(command_list->Close());
@@ -916,8 +955,14 @@ void STDMETHODCALLTYPE ID3D12QueuedCommandList::BeginQuery(
_In_ UINT Index
)
{
- // Function not implemented yet.
- DEBUGCHECK(0, "Function not implemented yet.");
+ reinterpret_cast<D3DQueueItem*>(m_queue_array_back)->Type = D3DQueueItemType::BeginQuery;
+ reinterpret_cast<D3DQueueItem*>(m_queue_array_back)->BeginQuery.pQueryHeap = pQueryHeap;
+ reinterpret_cast<D3DQueueItem*>(m_queue_array_back)->BeginQuery.Type = Type;
+ reinterpret_cast<D3DQueueItem*>(m_queue_array_back)->BeginQuery.Index = Index;
+
+ m_queue_array_back += BufferOffsetForQueueItemType<BeginQueryArguments>();
+
+ CheckForOverflow();
}
void STDMETHODCALLTYPE ID3D12QueuedCommandList::EndQuery(
@@ -926,8 +971,14 @@ void STDMETHODCALLTYPE ID3D12QueuedCommandList::EndQuery(
_In_ UINT Index
)
{
- // Function not implemented yet.
- DEBUGCHECK(0, "Function not implemented yet.");
+ reinterpret_cast<D3DQueueItem*>(m_queue_array_back)->Type = D3DQueueItemType::EndQuery;
+ reinterpret_cast<D3DQueueItem*>(m_queue_array_back)->EndQuery.pQueryHeap = pQueryHeap;
+ reinterpret_cast<D3DQueueItem*>(m_queue_array_back)->EndQuery.Type = Type;
+ reinterpret_cast<D3DQueueItem*>(m_queue_array_back)->EndQuery.Index = Index;
+
+ m_queue_array_back += BufferOffsetForQueueItemType<EndQueryArguments>();
+
+ CheckForOverflow();
}
void STDMETHODCALLTYPE ID3D12QueuedCommandList::ResolveQueryData(
@@ -939,8 +990,17 @@ void STDMETHODCALLTYPE ID3D12QueuedCommandList::ResolveQueryData(
_In_ UINT64 AlignedDestinationBufferOffset
)
{
- // Function not implemented yet.
- DEBUGCHECK(0, "Function not implemented yet.");
+ reinterpret_cast<D3DQueueItem*>(m_queue_array_back)->Type = D3DQueueItemType::ResolveQueryData;
+ reinterpret_cast<D3DQueueItem*>(m_queue_array_back)->ResolveQueryData.pQueryHeap = pQueryHeap;
+ reinterpret_cast<D3DQueueItem*>(m_queue_array_back)->ResolveQueryData.Type = Type;
+ reinterpret_cast<D3DQueueItem*>(m_queue_array_back)->ResolveQueryData.StartElement = StartElement;
+ reinterpret_cast<D3DQueueItem*>(m_queue_array_back)->ResolveQueryData.ElementCount = ElementCount;
+ reinterpret_cast<D3DQueueItem*>(m_queue_array_back)->ResolveQueryData.pDestinationBuffer = pDestinationBuffer;
+ reinterpret_cast<D3DQueueItem*>(m_queue_array_back)->ResolveQueryData.AlignedDestinationBufferOffset = AlignedDestinationBufferOffset;
+
+ m_queue_array_back += BufferOffsetForQueueItemType<ResolveQueryDataArguments>();
+
+ CheckForOverflow();
}
void STDMETHODCALLTYPE ID3D12QueuedCommandList::SetPredication(