diff --git a/src/dxgi/dxgi_interfaces.h b/src/dxgi/dxgi_interfaces.h index 7974bce3d..0773196cf 100644 --- a/src/dxgi/dxgi_interfaces.h +++ b/src/dxgi/dxgi_interfaces.h @@ -11,7 +11,6 @@ namespace dxvk { class DxvkAdapter; class DxvkBuffer; class DxvkDevice; - class DxvkEvent; class DxvkImage; } diff --git a/src/dxvk/dxvk_cmdlist.cpp b/src/dxvk/dxvk_cmdlist.cpp index 1c401dff6..e510313a4 100644 --- a/src/dxvk/dxvk_cmdlist.cpp +++ b/src/dxvk/dxvk_cmdlist.cpp @@ -170,7 +170,6 @@ namespace dxvk { void DxvkCommandList::reset() { // Signal resources and events to // avoid stalling main thread - m_eventTracker.reset(); m_signalTracker.reset(); m_resources.reset(); diff --git a/src/dxvk/dxvk_cmdlist.h b/src/dxvk/dxvk_cmdlist.h index 4d4f1872a..6b1bdcadd 100644 --- a/src/dxvk/dxvk_cmdlist.h +++ b/src/dxvk/dxvk_cmdlist.h @@ -5,7 +5,6 @@ #include "dxvk_bind_mask.h" #include "dxvk_buffer.h" #include "dxvk_descriptor.h" -#include "dxvk_event.h" #include "dxvk_gpu_event.h" #include "dxvk_gpu_query.h" #include "dxvk_lifetime.h" @@ -151,16 +150,6 @@ namespace dxvk { m_resources.trackResource(std::move(rc)); } - /** - * \brief Adds an event revision to track - * - * The event will be signaled after the command - * buffer has finished executing on the GPU. - */ - void trackEvent(const DxvkEventRevision& event) { - m_eventTracker.trackEvent(event); - } - /** * \brief Tracks a descriptor pool * \param [in] pool The descriptor pool @@ -191,16 +180,6 @@ namespace dxvk { m_gpuQueryTracker.trackQuery(handle); } - /** - * \brief Signals tracked events - * - * Marks all tracked events as signaled. Call this after - * synchronizing with a fence for this command list. - */ - void signalEvents() { - m_eventTracker.signalEvents(); - } - /** * \brief Queues signal * @@ -786,7 +765,6 @@ namespace dxvk { DxvkCmdBufferFlags m_cmdBuffersUsed; DxvkLifetimeTracker m_resources; DxvkDescriptorPoolTracker m_descriptorPoolTracker; - DxvkEventTracker m_eventTracker; DxvkSignalTracker m_signalTracker; DxvkGpuEventTracker m_gpuEventTracker; DxvkGpuQueryTracker m_gpuQueryTracker; diff --git a/src/dxvk/dxvk_context.cpp b/src/dxvk/dxvk_context.cpp index e5b46911c..311225e7c 100644 --- a/src/dxvk/dxvk_context.cpp +++ b/src/dxvk/dxvk_context.cpp @@ -2357,11 +2357,6 @@ namespace dxvk { } - void DxvkContext::signalEvent(const DxvkEventRevision& event) { - m_cmd->trackEvent(event); - } - - void DxvkContext::signalGpuEvent(const Rc& event) { this->spillRenderPass(); diff --git a/src/dxvk/dxvk_context.h b/src/dxvk/dxvk_context.h index cd03b2222..b570026fe 100644 --- a/src/dxvk/dxvk_context.h +++ b/src/dxvk/dxvk_context.h @@ -5,7 +5,6 @@ #include "dxvk_cmdlist.h" #include "dxvk_context_state.h" #include "dxvk_data.h" -#include "dxvk_event.h" #include "dxvk_gpu_event.h" #include "dxvk_gpu_query.h" #include "dxvk_meta_clear.h" @@ -949,13 +948,6 @@ namespace dxvk { void setBarrierControl( DxvkBarrierControlFlags control); - /** - * \brief Signals an event - * \param [in] event The event - */ - void signalEvent( - const DxvkEventRevision& event); - /** * \brief Signals a GPU event * \param [in] event The event diff --git a/src/dxvk/dxvk_event.cpp b/src/dxvk/dxvk_event.cpp deleted file mode 100644 index 8ca0c6567..000000000 --- a/src/dxvk/dxvk_event.cpp +++ /dev/null @@ -1,84 +0,0 @@ -#include "dxvk_event.h" - -namespace dxvk { - - DxvkEvent::DxvkEvent() - : m_packed(pack({ DxvkEventStatus::Signaled, 0u })) { } - - - DxvkEvent::~DxvkEvent() { - - } - - - uint32_t DxvkEvent::reset() { - Status info; - - uint64_t packed = m_packed.load(); - - do { - info.status = DxvkEventStatus::Reset; - info.revision = unpack(packed).revision + 1; - } while (!m_packed.compare_exchange_strong(packed, pack(info))); - - return info.revision; - } - - - void DxvkEvent::signal(uint32_t revision) { - uint64_t expected = pack({ DxvkEventStatus::Reset, revision }); - uint64_t desired = pack({ DxvkEventStatus::Signaled, revision }); - m_packed.compare_exchange_strong(expected, desired); - } - - - DxvkEventStatus DxvkEvent::getStatus() const { - return unpack(m_packed.load()).status; - } - - - void DxvkEvent::wait() const { - while (this->getStatus() != DxvkEventStatus::Signaled) - dxvk::this_thread::yield(); - } - - - uint64_t DxvkEvent::pack(Status info) { - return (uint64_t(info.revision)) - | (uint64_t(info.status) << 32); - } - - - DxvkEvent::Status DxvkEvent::unpack(uint64_t packed) { - return { DxvkEventStatus(packed >> 32), uint32_t(packed) }; - } - - - - - DxvkEventTracker::DxvkEventTracker() { - - } - - - DxvkEventTracker::~DxvkEventTracker() { - - } - - - void DxvkEventTracker::trackEvent(const DxvkEventRevision& event) { - m_events.push_back(event); - } - - - void DxvkEventTracker::signalEvents() { - for (const DxvkEventRevision& event : m_events) - event.event->signal(event.revision); - } - - - void DxvkEventTracker::reset() { - m_events.clear(); - } - -} \ No newline at end of file diff --git a/src/dxvk/dxvk_event.h b/src/dxvk/dxvk_event.h deleted file mode 100644 index cef2190ad..000000000 --- a/src/dxvk/dxvk_event.h +++ /dev/null @@ -1,125 +0,0 @@ -#pragma once - -#include -#include - -#include "dxvk_include.h" - -namespace dxvk { - - /** - * \brief Event status - */ - enum class DxvkEventStatus { - Reset = 0, - Signaled = 1, - }; - - /** - * \brief Event - * - * A CPU-side fence that will be signaled after - * all previous Vulkan commands recorded to a - * command buffer have finished executing. - */ - class DxvkEvent : public RcObject { - - public: - - DxvkEvent(); - ~DxvkEvent(); - - /** - * \brief Resets the event - * \returns New revision ID - */ - uint32_t reset(); - - /** - * \brief Signals the event - * \param [in] revision The revision ID - */ - void signal(uint32_t revision); - - /** - * \brief Queries event status - * \returns Current event status - */ - DxvkEventStatus getStatus() const; - - /** - * \brief Waits for event to get signaled - * - * Blocks the calling thread until another - * thread calls \ref signal for the current - * revision of the event. - */ - void wait() const; - - private: - - struct Status { - DxvkEventStatus status = DxvkEventStatus::Signaled; - uint32_t revision = 0; - }; - - // Packed status and revision - std::atomic m_packed; - - static uint64_t pack(Status info); - static Status unpack(uint64_t packed); - - }; - - - /** - * \brief Event revision - * - * Stores the event object and the - * version ID for event operations. - */ - struct DxvkEventRevision { - Rc event; - uint32_t revision; - }; - - - /** - * \brief Event tracker - */ - class DxvkEventTracker { - - public: - - DxvkEventTracker(); - ~DxvkEventTracker(); - - /** - * \brief Adds an event to track - * \param [in] event The event revision - */ - void trackEvent(const DxvkEventRevision& event); - - /** - * \brief Signals tracked events - * - * Retrieves query data from the query pools - * and writes it back to the query objects. - */ - void signalEvents(); - - /** - * \brief Resets event tracker - * - * Releases all events from the tracker. - * Call this after signaling the events. - */ - void reset(); - - private: - - std::vector m_events; - - }; - -} \ No newline at end of file diff --git a/src/dxvk/dxvk_queue.cpp b/src/dxvk/dxvk_queue.cpp index e02b11713..53cf838b1 100644 --- a/src/dxvk/dxvk_queue.cpp +++ b/src/dxvk/dxvk_queue.cpp @@ -150,7 +150,6 @@ namespace dxvk { VkResult status = entry.submit.cmdList->synchronize(); if (status == VK_SUCCESS) { - entry.submit.cmdList->signalEvents(); entry.submit.cmdList->notifySignals(); entry.submit.cmdList->reset(); diff --git a/src/dxvk/meson.build b/src/dxvk/meson.build index 34f853a98..604434c21 100644 --- a/src/dxvk/meson.build +++ b/src/dxvk/meson.build @@ -59,7 +59,6 @@ dxvk_src = files([ 'dxvk_device.cpp', 'dxvk_device_filter.cpp', 'dxvk_extensions.cpp', - 'dxvk_event.cpp', 'dxvk_format.cpp', 'dxvk_framebuffer.cpp', 'dxvk_gpu_event.cpp',