Phase 4 step 2a
This commit is contained in:
89
tests/RenderCommandQueueTests.cpp
Normal file
89
tests/RenderCommandQueueTests.cpp
Normal file
@@ -0,0 +1,89 @@
|
||||
#include "RenderCommandQueue.h"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
namespace
|
||||
{
|
||||
int gFailures = 0;
|
||||
|
||||
void Expect(bool condition, const char* message)
|
||||
{
|
||||
if (condition)
|
||||
return;
|
||||
|
||||
std::cerr << "FAIL: " << message << "\n";
|
||||
++gFailures;
|
||||
}
|
||||
|
||||
void TestPreviewRequestUsesLatestValue()
|
||||
{
|
||||
RenderCommandQueue queue;
|
||||
queue.RequestPreviewPresent({ 1920, 1080 });
|
||||
queue.RequestPreviewPresent({ 1280, 720 });
|
||||
|
||||
const RenderCommandQueueMetrics metrics = queue.GetMetrics();
|
||||
Expect(metrics.depth == 1, "preview requests coalesce to one pending command");
|
||||
Expect(metrics.enqueuedCount == 1, "first preview request is counted as enqueued");
|
||||
Expect(metrics.coalescedCount == 1, "second preview request is counted as coalesced");
|
||||
|
||||
RenderPreviewPresentRequest request;
|
||||
Expect(queue.TryTakePreviewPresent(request), "preview request can be consumed");
|
||||
Expect(request.outputFrameWidth == 1280 && request.outputFrameHeight == 720, "latest preview request wins");
|
||||
Expect(!queue.TryTakePreviewPresent(request), "preview request is removed after consume");
|
||||
Expect(queue.GetMetrics().depth == 0, "preview consume empties queue depth");
|
||||
}
|
||||
|
||||
void TestScreenshotRequestUsesLatestValue()
|
||||
{
|
||||
RenderCommandQueue queue;
|
||||
queue.RequestScreenshotCapture({ 640, 360 });
|
||||
queue.RequestScreenshotCapture({ 3840, 2160 });
|
||||
|
||||
RenderScreenshotCaptureRequest request;
|
||||
Expect(queue.TryTakeScreenshotCapture(request), "screenshot request can be consumed");
|
||||
Expect(request.width == 3840 && request.height == 2160, "latest screenshot request wins");
|
||||
Expect(!queue.TryTakeScreenshotCapture(request), "screenshot request is removed after consume");
|
||||
}
|
||||
|
||||
void TestRenderResetScopesCoalesceToStrongestRequest()
|
||||
{
|
||||
RenderCommandQueue queue;
|
||||
queue.RequestRenderReset(RenderCommandResetScope::TemporalHistoryOnly);
|
||||
queue.RequestRenderReset(RenderCommandResetScope::ShaderFeedbackOnly);
|
||||
|
||||
RenderCommandResetScope scope = RenderCommandResetScope::None;
|
||||
Expect(queue.TryTakeRenderReset(scope), "render reset request can be consumed");
|
||||
Expect(scope == RenderCommandResetScope::TemporalHistoryAndFeedback, "temporal and feedback reset requests merge");
|
||||
Expect(!queue.TryTakeRenderReset(scope), "render reset request is removed after consume");
|
||||
|
||||
queue.RequestRenderReset(RenderCommandResetScope::None);
|
||||
Expect(queue.GetMetrics().depth == 0, "none reset request is ignored");
|
||||
}
|
||||
|
||||
void TestIndependentCommandKindsShareDepth()
|
||||
{
|
||||
RenderCommandQueue queue;
|
||||
queue.RequestPreviewPresent({ 1, 2 });
|
||||
queue.RequestScreenshotCapture({ 3, 4 });
|
||||
queue.RequestRenderReset(RenderCommandResetScope::TemporalHistoryOnly);
|
||||
|
||||
Expect(queue.GetMetrics().depth == 3, "independent command kinds each contribute to depth");
|
||||
}
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
TestPreviewRequestUsesLatestValue();
|
||||
TestScreenshotRequestUsesLatestValue();
|
||||
TestRenderResetScopesCoalesceToStrongestRequest();
|
||||
TestIndependentCommandKindsShareDepth();
|
||||
|
||||
if (gFailures != 0)
|
||||
{
|
||||
std::cerr << gFailures << " RenderCommandQueue test failure(s).\n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
std::cout << "RenderCommandQueue tests passed.\n";
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user