2018-02-12 16:36:42 +01:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "dxvk_query.h"
|
|
|
|
|
|
|
|
namespace dxvk {
|
|
|
|
|
2018-02-15 13:25:18 +01:00
|
|
|
class DxvkCommandList;
|
|
|
|
class DxvkQueryPool;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* \brief Query range
|
|
|
|
*
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
struct DxvkQueryRange {
|
|
|
|
Rc<DxvkQueryPool> queryPool;
|
|
|
|
|
|
|
|
uint32_t queryIndex = 0;
|
|
|
|
uint32_t queryCount = 0;
|
|
|
|
};
|
|
|
|
|
2018-02-12 16:36:42 +01:00
|
|
|
/**
|
|
|
|
* \brief Query pool
|
|
|
|
*
|
|
|
|
* Manages a Vulkan query pool. This is used
|
|
|
|
* to allocate actual query objects for virtual
|
|
|
|
* query objects.
|
|
|
|
*/
|
|
|
|
class DxvkQueryPool : public RcObject {
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
DxvkQueryPool(
|
2018-02-13 13:43:27 +01:00
|
|
|
const Rc<vk::DeviceFn>& vkd,
|
2018-02-15 13:25:18 +01:00
|
|
|
VkQueryType queryType,
|
|
|
|
uint32_t queryCount);
|
2018-02-12 16:36:42 +01:00
|
|
|
|
|
|
|
~DxvkQueryPool();
|
|
|
|
|
2018-02-13 13:43:27 +01:00
|
|
|
/**
|
|
|
|
* \brief Query pool handle
|
|
|
|
* \returns Query pool handle
|
|
|
|
*/
|
|
|
|
VkQueryPool handle() const {
|
|
|
|
return m_queryPool;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* \brief Allocates a Vulkan query
|
|
|
|
*
|
|
|
|
* \param [in] revision Query revision
|
|
|
|
* \returns The query ID and pool handle
|
|
|
|
*/
|
|
|
|
DxvkQueryHandle allocQuery(
|
|
|
|
const DxvkQueryRevision& revision);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* \brief Writes back data for a range of queries
|
|
|
|
*
|
|
|
|
* \param [in] queryIndex First query in the range
|
|
|
|
* \param [in] queryCount Number of queries
|
|
|
|
* \returns Query result status
|
|
|
|
*/
|
|
|
|
VkResult getData(
|
|
|
|
uint32_t queryIndex,
|
|
|
|
uint32_t queryCount);
|
|
|
|
|
2018-02-15 13:25:18 +01:00
|
|
|
/**
|
|
|
|
* \brief Resets query pool
|
|
|
|
*
|
|
|
|
* Resets the Vulkan query pool itself, as
|
|
|
|
* well as the the internal query allocator.
|
|
|
|
* \param [in] cmd Command list
|
|
|
|
*/
|
|
|
|
void reset(
|
|
|
|
const Rc<DxvkCommandList>& cmd);
|
|
|
|
|
2018-02-12 16:36:42 +01:00
|
|
|
private:
|
|
|
|
|
|
|
|
Rc<vk::DeviceFn> m_vkd;
|
|
|
|
|
2018-02-15 13:25:18 +01:00
|
|
|
uint32_t m_queryCount;
|
2018-02-13 13:43:27 +01:00
|
|
|
VkQueryType m_queryType;
|
|
|
|
VkQueryPool m_queryPool = VK_NULL_HANDLE;
|
|
|
|
|
2018-02-15 13:25:18 +01:00
|
|
|
std::vector<DxvkQueryRevision> m_queries;
|
|
|
|
|
|
|
|
uint32_t m_queryRangeOffset = 0;
|
|
|
|
uint32_t m_queryRangeLength = 0;
|
2018-02-12 16:36:42 +01:00
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
}
|