mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-03-15 07:29:17 +01:00
[dxvk] Reset query pools on the init buffer
This commit is contained in:
parent
3135359ee9
commit
5f3b65014f
@ -8,6 +8,7 @@ namespace dxvk {
|
|||||||
DxvkDevice* device,
|
DxvkDevice* device,
|
||||||
uint32_t queueFamily)
|
uint32_t queueFamily)
|
||||||
: m_vkd (vkd),
|
: m_vkd (vkd),
|
||||||
|
m_cmdBuffersUsed(0),
|
||||||
m_descAlloc (vkd),
|
m_descAlloc (vkd),
|
||||||
m_stagingAlloc (device) {
|
m_stagingAlloc (device) {
|
||||||
VkFenceCreateInfo fenceInfo;
|
VkFenceCreateInfo fenceInfo;
|
||||||
@ -52,8 +53,13 @@ namespace dxvk {
|
|||||||
VkQueue queue,
|
VkQueue queue,
|
||||||
VkSemaphore waitSemaphore,
|
VkSemaphore waitSemaphore,
|
||||||
VkSemaphore wakeSemaphore) {
|
VkSemaphore wakeSemaphore) {
|
||||||
std::array<VkCommandBuffer, 2> cmdBuffers
|
std::array<VkCommandBuffer, 2> cmdBuffers;
|
||||||
= {{ m_initBuffer, m_execBuffer }};
|
uint32_t cmdBufferCount = 0;
|
||||||
|
|
||||||
|
if (m_cmdBuffersUsed.test(DxvkCmdBufferFlag::InitBuffer))
|
||||||
|
cmdBuffers[cmdBufferCount++] = m_initBuffer;
|
||||||
|
if (m_cmdBuffersUsed.test(DxvkCmdBufferFlag::ExecBuffer))
|
||||||
|
cmdBuffers[cmdBufferCount++] = m_execBuffer;
|
||||||
|
|
||||||
const VkPipelineStageFlags waitStageMask
|
const VkPipelineStageFlags waitStageMask
|
||||||
= VK_PIPELINE_STAGE_ALL_COMMANDS_BIT;
|
= VK_PIPELINE_STAGE_ALL_COMMANDS_BIT;
|
||||||
@ -64,7 +70,7 @@ namespace dxvk {
|
|||||||
info.waitSemaphoreCount = waitSemaphore == VK_NULL_HANDLE ? 0 : 1;
|
info.waitSemaphoreCount = waitSemaphore == VK_NULL_HANDLE ? 0 : 1;
|
||||||
info.pWaitSemaphores = &waitSemaphore;
|
info.pWaitSemaphores = &waitSemaphore;
|
||||||
info.pWaitDstStageMask = &waitStageMask;
|
info.pWaitDstStageMask = &waitStageMask;
|
||||||
info.commandBufferCount = cmdBuffers.size();
|
info.commandBufferCount = cmdBufferCount;
|
||||||
info.pCommandBuffers = cmdBuffers.data();
|
info.pCommandBuffers = cmdBuffers.data();
|
||||||
info.signalSemaphoreCount = wakeSemaphore == VK_NULL_HANDLE ? 0 : 1;
|
info.signalSemaphoreCount = wakeSemaphore == VK_NULL_HANDLE ? 0 : 1;
|
||||||
info.pSignalSemaphores = &wakeSemaphore;
|
info.pSignalSemaphores = &wakeSemaphore;
|
||||||
@ -102,6 +108,10 @@ namespace dxvk {
|
|||||||
|
|
||||||
if (m_vkd->vkResetFences(m_vkd->device(), 1, &m_fence) != VK_SUCCESS)
|
if (m_vkd->vkResetFences(m_vkd->device(), 1, &m_fence) != VK_SUCCESS)
|
||||||
Logger::err("DxvkCommandList: Failed to reset fence");
|
Logger::err("DxvkCommandList: Failed to reset fence");
|
||||||
|
|
||||||
|
// Unconditionally mark the exec buffer as used. There
|
||||||
|
// is virtually no use case where this isn't correct.
|
||||||
|
m_cmdBuffersUsed.set(DxvkCmdBufferFlag::ExecBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -16,6 +16,19 @@
|
|||||||
|
|
||||||
namespace dxvk {
|
namespace dxvk {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Command buffer flags
|
||||||
|
*
|
||||||
|
* A set of flags used to specify which of
|
||||||
|
* the command buffers need to be submitted.
|
||||||
|
*/
|
||||||
|
enum class DxvkCmdBufferFlag : uint32_t {
|
||||||
|
InitBuffer = 0,
|
||||||
|
ExecBuffer = 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
using DxvkCmdBufferFlags = Flags<DxvkCmdBufferFlag>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief DXVK command list
|
* \brief DXVK command list
|
||||||
*
|
*
|
||||||
@ -468,7 +481,9 @@ namespace dxvk {
|
|||||||
VkQueryPool queryPool,
|
VkQueryPool queryPool,
|
||||||
uint32_t firstQuery,
|
uint32_t firstQuery,
|
||||||
uint32_t queryCount) {
|
uint32_t queryCount) {
|
||||||
m_vkd->vkCmdResetQueryPool(m_execBuffer,
|
m_cmdBuffersUsed.set(DxvkCmdBufferFlag::InitBuffer);
|
||||||
|
|
||||||
|
m_vkd->vkCmdResetQueryPool(m_initBuffer,
|
||||||
queryPool, firstQuery, queryCount);
|
queryPool, firstQuery, queryCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -564,6 +579,7 @@ namespace dxvk {
|
|||||||
VkCommandBuffer m_execBuffer;
|
VkCommandBuffer m_execBuffer;
|
||||||
VkCommandBuffer m_initBuffer;
|
VkCommandBuffer m_initBuffer;
|
||||||
|
|
||||||
|
DxvkCmdBufferFlags m_cmdBuffersUsed;
|
||||||
DxvkLifetimeTracker m_resources;
|
DxvkLifetimeTracker m_resources;
|
||||||
DxvkDescriptorAlloc m_descAlloc;
|
DxvkDescriptorAlloc m_descAlloc;
|
||||||
DxvkStagingAlloc m_stagingAlloc;
|
DxvkStagingAlloc m_stagingAlloc;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user