60 lines
1.5 KiB
C++
60 lines
1.5 KiB
C++
#pragma once
|
|
|
|
#include <cstddef>
|
|
#include <cstdint>
|
|
#include <mutex>
|
|
|
|
enum class RenderCommandResetScope
|
|
{
|
|
None,
|
|
ShaderFeedbackOnly,
|
|
TemporalHistoryOnly,
|
|
TemporalHistoryAndFeedback
|
|
};
|
|
|
|
struct RenderPreviewPresentRequest
|
|
{
|
|
unsigned outputFrameWidth = 0;
|
|
unsigned outputFrameHeight = 0;
|
|
};
|
|
|
|
struct RenderScreenshotCaptureRequest
|
|
{
|
|
unsigned width = 0;
|
|
unsigned height = 0;
|
|
};
|
|
|
|
struct RenderCommandQueueMetrics
|
|
{
|
|
std::size_t depth = 0;
|
|
uint64_t enqueuedCount = 0;
|
|
uint64_t coalescedCount = 0;
|
|
};
|
|
|
|
class RenderCommandQueue
|
|
{
|
|
public:
|
|
void RequestPreviewPresent(const RenderPreviewPresentRequest& request);
|
|
bool TryTakePreviewPresent(RenderPreviewPresentRequest& request);
|
|
|
|
void RequestScreenshotCapture(const RenderScreenshotCaptureRequest& request);
|
|
bool TryTakeScreenshotCapture(RenderScreenshotCaptureRequest& request);
|
|
|
|
void RequestRenderReset(RenderCommandResetScope scope);
|
|
bool TryTakeRenderReset(RenderCommandResetScope& scope);
|
|
|
|
RenderCommandQueueMetrics GetMetrics() const;
|
|
|
|
private:
|
|
static RenderCommandResetScope MergeResetScopes(RenderCommandResetScope current, RenderCommandResetScope requested);
|
|
|
|
mutable std::mutex mMutex;
|
|
bool mHasPreviewPresentRequest = false;
|
|
RenderPreviewPresentRequest mPreviewPresentRequest;
|
|
bool mHasScreenshotCaptureRequest = false;
|
|
RenderScreenshotCaptureRequest mScreenshotCaptureRequest;
|
|
RenderCommandResetScope mRenderResetScope = RenderCommandResetScope::None;
|
|
uint64_t mEnqueuedCount = 0;
|
|
uint64_t mCoalescedCount = 0;
|
|
};
|