/*
================================================================================================================================
Time warp rendering test.
================================================================================================================================
/
boolRenderTimeWarp( ksStartupSettings startupSettings )
{
ksThread_SetAffinity( THREAD_AFFINITY_BIG_CORES );
ksDriverInstance instance;
ksDriverInstance_Create( &instance );
const ksGpuQueueInfo queueInfo =
{
1,
KS_GPU_QUEUE_PROPERTY_GRAPHICS | KS_GPU_QUEUE_PROPERTY_COMPUTE,
{ KS_GPU_QUEUE_PRIORITY_MEDIUM }
};
ksGpuWindow window;
ksGpuWindow_Create( &window, &instance, &queueInfo, 0,
KS_GPU_SURFACE_COLOR_FORMAT_R8G8B8A8, KS_GPU_SURFACE_DEPTH_FORMAT_NONE, KS_GPU_SAMPLE_COUNT_1,
WINDOW_RESOLUTION( displayResolutionTable[startupSettings->displayResolutionLevel 2 + 0], startupSettings->fullscreen ),
WINDOW_RESOLUTION( displayResolutionTable[startupSettings->displayResolutionLevel 2 + 1], startupSettings->fullscreen ),
startupSettings->fullscreen );
intswapInterval = ( startupSettings->noVSyncNanoseconds <= 0 );
ksGpuWindow_SwapInterval( &window, swapInterval );
ksTimeWarptimeWarp;
ksTimeWarp_Create( &timeWarp, &window );
ksTimeWarp_SetBarGraphState( &timeWarp, startupSettings->hideGraphs ? BAR_GRAPH_HIDDEN : BAR_GRAPH_VISIBLE );
ksTimeWarp_SetImplementation( &timeWarp, startupSettings->timeWarpImplementation );
ksTimeWarp_SetChromaticAberrationCorrection( &timeWarp, startupSettings->correctChromaticAberration );
ksTimeWarp_SetDisplayResolutionLevel( &timeWarp, startupSettings->displayResolutionLevel );
hmd_headRotationDisabled = startupSettings->headRotationDisabled;
ksNanoseconds startupTimeNanoseconds = startupSettings->startupTimeNanoseconds;
ksNanoseconds noVSyncNanoseconds = startupSettings->noVSyncNanoseconds;
ksNanoseconds noLogNanoseconds = startupSettings->noLogNanoseconds;
ksThread_SetName( “atw:timewarp” );
boolexit = false;
while ( !exit )
{
const ksNanoseconds time = GetTimeNanoseconds();
const ksGpuWindowEvent handleEvent = ksGpuWindow_ProcessEvents( &window );
if ( handleEvent == KS_GPU_WINDOW_EVENT_ACTIVATED )
{
PrintInfo( &window, 0, 0 );
}
elseif ( handleEvent == KS_GPU_WINDOW_EVENT_EXIT )
{
exit = true;
}
if ( ksGpuWindowInput_ConsumeKeyboardKey( &window.input, KEY_ESCAPE ) )
{
ksGpuWindow_Exit( &window );
}
if ( ksGpuWindowInput_ConsumeKeyboardKey( &window.input, KEY_Z ) )
{
startupSettings->renderMode = (ksRenderMode) ( ( startupSettings->renderMode + 1 ) % RENDER_MODE_MAX );
break;
}
if ( ksGpuWindowInput_ConsumeKeyboardKey( &window.input, KEY_F ) )
{
startupSettings->fullscreen = !startupSettings->fullscreen;
break;
}
if ( ksGpuWindowInput_ConsumeKeyboardKey( &window.input, KEY_V ) ||
( noVSyncNanoseconds > 0 && time - startupTimeNanoseconds > noVSyncNanoseconds ) )
{
swapInterval = !swapInterval;
ksGpuWindow_SwapInterval( &window, swapInterval );
noVSyncNanoseconds = 0;
}
if ( ksGpuWindowInput_ConsumeKeyboardKey( &window.input, KEY_L ) ||
( noLogNanoseconds > 0 && time - startupTimeNanoseconds > noLogNanoseconds ) )
{
ksFrameLog_Open( OUTPUT_PATH “framelog_timewarp.txt”, 10 );
noLogNanoseconds = 0;
}
if ( ksGpuWindowInput_ConsumeKeyboardKey( &window.input, KEY_H ) )
{
hmd_headRoksDriverInstance
if ( ksGpuWindowInput_ConsumeKeyboardKey( &window.input, KEY_I ) )
{
ksTimeWarp_CycleImplementation( &timeWarp );
}
if ( ksGpuWindowInput_ConsumeKeyboardKey( &window.input, KEY_C ) )
{
ksTimeWarp_ToggleChromaticAberrationCorrection( &timeWarp );
}
if ( ksGpuWindowInput_ConsumeKeyboardKey( &window.input, KEY_D ) )
{
DumpGLSL();
}
if ( window.windowActive )
{
ksTimeWarp_Render( &timeWarp );
}
}
ksGpuContext_WaitIdle( &window.context );
ksTimeWarp_Destroy( &timeWarp, &window );
ksGpuWindow_Destroy( &window );
ksDriverInstance_Destroy( &instance );
returnexit;
}
�