1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2024-12-12 13:08:50 +01:00

[dxvk] Add submission feedback to command submissions

This commit is contained in:
Philip Rebohle 2023-03-16 12:44:58 +01:00
parent 27f3648a44
commit da32453b42
13 changed files with 29 additions and 19 deletions

View File

@ -895,7 +895,7 @@ namespace dxvk {
cSubmissionId = submissionId cSubmissionId = submissionId
] (DxvkContext* ctx) { ] (DxvkContext* ctx) {
ctx->signal(cSubmissionFence, cSubmissionId); ctx->signal(cSubmissionFence, cSubmissionId);
ctx->flushCommandList(); ctx->flushCommandList(nullptr);
}); });
FlushCsChunk(); FlushCsChunk();

View File

@ -278,7 +278,7 @@ namespace dxvk {
void D3D11Initializer::FlushInternal() { void D3D11Initializer::FlushInternal() {
m_context->flushCommandList(); m_context->flushCommandList(nullptr);
m_transferCommands = 0; m_transferCommands = 0;
m_transferMemory = 0; m_transferMemory = 0;

View File

@ -415,7 +415,7 @@ namespace dxvk {
cCommandList = m_context->endRecording() cCommandList = m_context->endRecording()
] (DxvkContext* ctx) { ] (DxvkContext* ctx) {
cCommandList->setWsiSemaphores(cSync); cCommandList->setWsiSemaphores(cSync);
m_device->submitCommandList(cCommandList); m_device->submitCommandList(cCommandList, nullptr);
if (cHud != nullptr && !cFrameId) if (cHud != nullptr && !cFrameId)
cHud->update(); cHud->update();
@ -630,7 +630,8 @@ namespace dxvk {
subresources, VK_IMAGE_LAYOUT_UNDEFINED); subresources, VK_IMAGE_LAYOUT_UNDEFINED);
m_device->submitCommandList( m_device->submitCommandList(
m_context->endRecording()); m_context->endRecording(),
nullptr);
} }

View File

@ -5253,7 +5253,7 @@ namespace dxvk {
// Add commands to flush the threaded // Add commands to flush the threaded
// context, then flush the command list // context, then flush the command list
EmitCs([](DxvkContext* ctx) { EmitCs([](DxvkContext* ctx) {
ctx->flushCommandList(); ctx->flushCommandList(nullptr);
}); });
FlushCsChunk(); FlushCsChunk();

View File

@ -142,7 +142,7 @@ namespace dxvk {
void D3D9FormatHelper::FlushInternal() { void D3D9FormatHelper::FlushInternal() {
m_context->flushCommandList(); m_context->flushCommandList(nullptr);
m_transferCommands = 0; m_transferCommands = 0;
} }

View File

@ -153,7 +153,7 @@ namespace dxvk {
void D3D9Initializer::FlushInternal() { void D3D9Initializer::FlushInternal() {
m_context->flushCommandList(); m_context->flushCommandList(nullptr);
m_transferCommands = 0; m_transferCommands = 0;
m_transferMemory = 0; m_transferMemory = 0;

View File

@ -730,7 +730,7 @@ namespace dxvk {
cCommandList = m_context->endRecording() cCommandList = m_context->endRecording()
] (DxvkContext* ctx) { ] (DxvkContext* ctx) {
cCommandList->setWsiSemaphores(cSync); cCommandList->setWsiSemaphores(cSync);
m_device->submitCommandList(cCommandList); m_device->submitCommandList(cCommandList, nullptr);
if (cHud != nullptr && !cFrameId) if (cHud != nullptr && !cFrameId)
cHud->update(); cHud->update();
@ -927,7 +927,8 @@ namespace dxvk {
} }
m_device->submitCommandList( m_device->submitCommandList(
m_context->endRecording()); m_context->endRecording(),
nullptr);
} }

View File

@ -101,9 +101,9 @@ namespace dxvk {
} }
void DxvkContext::flushCommandList() { void DxvkContext::flushCommandList(DxvkSubmitStatus* status) {
m_device->submitCommandList( m_device->submitCommandList(
this->endRecording()); this->endRecording(), status);
this->beginRecording( this->beginRecording(
m_device->createCommandList()); m_device->createCommandList());

View File

@ -6,6 +6,7 @@
#include "dxvk_context_state.h" #include "dxvk_context_state.h"
#include "dxvk_data.h" #include "dxvk_data.h"
#include "dxvk_objects.h" #include "dxvk_objects.h"
#include "dxvk_queue.h"
#include "dxvk_resource.h" #include "dxvk_resource.h"
#include "dxvk_util.h" #include "dxvk_util.h"
#include "dxvk_marker.h" #include "dxvk_marker.h"
@ -63,8 +64,9 @@ namespace dxvk {
* *
* Transparently submits the current command * Transparently submits the current command
* buffer and allocates a new one. * buffer and allocates a new one.
* \param [out] status Submission feedback
*/ */
void flushCommandList(); void flushCommandList(DxvkSubmitStatus* status);
/** /**
* \brief Begins generating query data * \brief Begins generating query data

View File

@ -256,10 +256,11 @@ namespace dxvk {
void DxvkDevice::submitCommandList( void DxvkDevice::submitCommandList(
const Rc<DxvkCommandList>& commandList) { const Rc<DxvkCommandList>& commandList,
DxvkSubmitStatus* status) {
DxvkSubmitInfo submitInfo = { }; DxvkSubmitInfo submitInfo = { };
submitInfo.cmdList = commandList; submitInfo.cmdList = commandList;
m_submissionQueue.submit(submitInfo); m_submissionQueue.submit(submitInfo, status);
std::lock_guard<sync::Spinlock> statLock(m_statLock); std::lock_guard<sync::Spinlock> statLock(m_statLock);
m_statCounters.merge(commandList->statCounters()); m_statCounters.merge(commandList->statCounters());

View File

@ -452,9 +452,11 @@ namespace dxvk {
* Submits the given command list to the device using * Submits the given command list to the device using
* the given set of optional synchronization primitives. * the given set of optional synchronization primitives.
* \param [in] commandList The command list to submit * \param [in] commandList The command list to submit
* \param [out] status Submission feedback
*/ */
void submitCommandList( void submitCommandList(
const Rc<DxvkCommandList>& commandList); const Rc<DxvkCommandList>& commandList,
DxvkSubmitStatus* status);
/** /**
* \brief Locks submission queue * \brief Locks submission queue

View File

@ -26,7 +26,7 @@ namespace dxvk {
} }
void DxvkSubmissionQueue::submit(DxvkSubmitInfo submitInfo) { void DxvkSubmissionQueue::submit(DxvkSubmitInfo submitInfo, DxvkSubmitStatus* status) {
std::unique_lock<dxvk::mutex> lock(m_mutex); std::unique_lock<dxvk::mutex> lock(m_mutex);
m_finishCond.wait(lock, [this] { m_finishCond.wait(lock, [this] {
@ -34,6 +34,7 @@ namespace dxvk {
}); });
DxvkSubmitEntry entry = { }; DxvkSubmitEntry entry = { };
entry.status = status;
entry.submit = std::move(submitInfo); entry.submit = std::move(submitInfo);
m_pending += 1; m_pending += 1;

View File

@ -111,9 +111,11 @@ namespace dxvk {
* dedicated submission thread. Use this to take * dedicated submission thread. Use this to take
* the submission overhead off the calling thread. * the submission overhead off the calling thread.
* \param [in] submitInfo Submission parameters * \param [in] submitInfo Submission parameters
* \param [out] status Submission feedback
*/ */
void submit( void submit(
DxvkSubmitInfo submitInfo); DxvkSubmitInfo submitInfo,
DxvkSubmitStatus* status);
/** /**
* \brief Presents an image synchronously * \brief Presents an image synchronously
@ -122,7 +124,7 @@ namespace dxvk {
* and then presents the current swap chain image * and then presents the current swap chain image
* of the presenter. May stall the calling thread. * of the presenter. May stall the calling thread.
* \param [in] present Present parameters * \param [in] present Present parameters
* \returns Status of the operation * \param [out] status Submission feedback
*/ */
void present( void present(
DxvkPresentInfo presentInfo, DxvkPresentInfo presentInfo,