1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2025-02-01 17:52:13 +01:00
dxvk/src/util/util_flush.h
Danylo Piliaiev 58d8ea2d31 [d3d11,d3d9,util] Add a config option for reproducible VK output
It ensures that for the same D3D commands the output VK commands
don't change between runs.

Useful for comparative benchmarking, can negatively affect performance.

Signed-off-by: Danylo Piliaiev <dpiliaiev@igalia.com>
2024-05-23 15:20:28 +02:00

76 lines
2.1 KiB
C++

#pragma once
#include <cstddef>
#include <cstdint>
#include <vector>
namespace dxvk {
/**
* \brief GPU context flush type
*/
enum class GpuFlushType : uint32_t {
/** Flush or Present called by application */
ExplicitFlush = 0,
/** Function that requires GPU synchronization and
* may require a flush called by application */
ImplicitSynchronization = 1,
/** GPU command that applications are likely to synchronize
* with soon has been recorded into the command list */
ImplicitStrongHint = 2,
/** GPU commands have been recorded and a flush should be
* performed if the current command list is large enough. */
ImplicitWeakHint = 3,
};
/**
* \brief GPU flush tracker
*
* Helper class that implements a context flush
* heuristic for various scenarios.
*/
class GpuFlushTracker {
public:
GpuFlushTracker(bool ensureReproducibleHeuristic);
/**
* \brief Checks whether a context flush should be performed
*
* Note that this modifies internal state, and depending on the
* flush type, this may influence the decision for future flushes.
* \param [in] flushType Flush type
* \param [in] chunkId GPU command sequence number
* \param [in] lastCompleteSubmissionId Last completed command submission ID
* \returns \c true if a flush should be performed
*/
bool considerFlush(
GpuFlushType flushType,
uint64_t chunkId,
uint32_t lastCompleteSubmissionId);
/**
* \brief Notifies tracker about a context flush
*
* \param [in] chunkId GPU command sequence number
* \param [in] submissionId Command submission ID
*/
void notifyFlush(
uint64_t chunkId,
uint64_t submissionId);
private:
bool m_ensureReproducibleHeuristic;
GpuFlushType m_lastMissedType = GpuFlushType::ImplicitWeakHint;
uint64_t m_lastFlushChunkId = 0ull;
uint64_t m_lastFlushSubmissionId = 0ull;
};
}