From a8144370c89a4fca09985dc4ba97238ae147635c Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Sat, 17 Nov 2018 10:18:32 +0100 Subject: [PATCH] [dxvk] Create new query pool and forward it to the context --- src/dxvk/dxvk_context.cpp | 8 ++++++-- src/dxvk/dxvk_context.h | 3 +++ src/dxvk/dxvk_device.cpp | 10 ++++++++++ src/dxvk/dxvk_device.h | 14 ++++++++++++++ 4 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/dxvk/dxvk_context.cpp b/src/dxvk/dxvk_context.cpp index 8dd476158..6a647075a 100644 --- a/src/dxvk/dxvk_context.cpp +++ b/src/dxvk/dxvk_context.cpp @@ -10,6 +10,7 @@ namespace dxvk { const Rc& device, const Rc& pipelineManager, const Rc& gpuEventPool, + const Rc& gpuQueryPool, const Rc& metaClearObjects, const Rc& metaCopyObjects, const Rc& metaMipGenObjects, @@ -23,8 +24,11 @@ namespace dxvk { m_metaMipGen (metaMipGenObjects), m_metaPack (metaPackObjects), m_metaResolve (metaResolveObjects), - m_queries (device->vkd()) { } - + m_queries (device->vkd()), + m_queryManager(gpuQueryPool) { + + } + DxvkContext::~DxvkContext() { diff --git a/src/dxvk/dxvk_context.h b/src/dxvk/dxvk_context.h index 40c4da4b5..f6b4d1f16 100644 --- a/src/dxvk/dxvk_context.h +++ b/src/dxvk/dxvk_context.h @@ -7,6 +7,7 @@ #include "dxvk_data.h" #include "dxvk_event.h" #include "dxvk_gpu_event.h" +#include "dxvk_gpu_query.h" #include "dxvk_meta_clear.h" #include "dxvk_meta_copy.h" #include "dxvk_meta_mipgen.h" @@ -36,6 +37,7 @@ namespace dxvk { const Rc& device, const Rc& pipelineManager, const Rc& gpuEventPool, + const Rc& gpuQueryPool, const Rc& metaClearObjects, const Rc& metaCopyObjects, const Rc& metaMipGenObjects, @@ -809,6 +811,7 @@ namespace dxvk { DxvkBarrierControlFlags m_barrierControl; DxvkQueryManager m_queries; + DxvkGpuQueryManager m_queryManager; VkPipeline m_gpActivePipeline = VK_NULL_HANDLE; VkPipeline m_cpActivePipeline = VK_NULL_HANDLE; diff --git a/src/dxvk/dxvk_device.cpp b/src/dxvk/dxvk_device.cpp index 7fe3af192..3076d0f42 100644 --- a/src/dxvk/dxvk_device.cpp +++ b/src/dxvk/dxvk_device.cpp @@ -20,6 +20,7 @@ namespace dxvk { m_renderPassPool (new DxvkRenderPassPool (vkd)), m_pipelineManager (new DxvkPipelineManager (this, m_renderPassPool.ptr())), m_gpuEventPool (new DxvkGpuEventPool (vkd)), + m_gpuQueryPool (new DxvkGpuQueryPool (vkd)), m_metaClearObjects (new DxvkMetaClearObjects (vkd)), m_metaCopyObjects (new DxvkMetaCopyObjects (vkd)), m_metaMipGenObjects (new DxvkMetaMipGenObjects (vkd)), @@ -142,6 +143,7 @@ namespace dxvk { return new DxvkContext(this, m_pipelineManager, m_gpuEventPool, + m_gpuQueryPool, m_metaClearObjects, m_metaCopyObjects, m_metaMipGenObjects, @@ -153,6 +155,14 @@ namespace dxvk { Rc DxvkDevice::createGpuEvent() { return new DxvkGpuEvent(m_vkd); } + + + Rc DxvkDevice::createGpuQuery( + VkQueryType type, + VkQueryControlFlags flags, + uint32_t index) { + return new DxvkGpuQuery(m_vkd, type, flags, index); + } Rc DxvkDevice::createFramebuffer( diff --git a/src/dxvk/dxvk_device.h b/src/dxvk/dxvk_device.h index fc967f77e..878c4933d 100644 --- a/src/dxvk/dxvk_device.h +++ b/src/dxvk/dxvk_device.h @@ -207,6 +207,19 @@ namespace dxvk { * \returns New GPU event */ Rc createGpuEvent(); + + /** + * \brief Creates a query + * + * \param [in] type Query type + * \param [in] flags Query flags + * \param [in] index Query index + * \returns New query + */ + Rc createGpuQuery( + VkQueryType type, + VkQueryControlFlags flags, + uint32_t index); /** * \brief Creates framebuffer for a set of render targets @@ -405,6 +418,7 @@ namespace dxvk { Rc m_pipelineManager; Rc m_gpuEventPool; + Rc m_gpuQueryPool; Rc m_metaClearObjects; Rc m_metaCopyObjects;