diff --git a/src/dxvk/dxvk_context.cpp b/src/dxvk/dxvk_context.cpp index 8dd47615..6a647075 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 40c4da4b..f6b4d1f1 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 7fe3af19..3076d0f4 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 fc967f77..878c4933 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;