The Virtual Reality Check (VRC) Validator tool runs automated tests to determine whether your Oculus Rift application is ready for the Oculus Store technical review process. VRC Validator ensures that your app meets most of the Rift VRC guidelines and can reveal issues that must be addressed before your app can pass the review process. Using VRC Validator when your Rift app nears completion is a good way to make sure you are on the path to meet technical and performance-related requirements.
Some of the issues VRC Validator can assist you in identifying and fixing include:
In addition to providing results based on the various technical tests, VRC Validator provides guidance via relevant documentation and best practices to help you resolve issues.
VRC Validator is automatically installed with the Oculus PC runtime during Rift setup. It includes both a command-line interface and a GUI (through Oculus Debug Tool).
VRC Validator can run all default tests at once or selected tests based on which parts of your app concern you.
Before trying to run any tests, confirm that OculusVRCValidator.exe is in C:\Program Files\Oculus\Support\oculus-diagnostics (default installation). If the file is not present, reinstall the latest version of the Oculus runtime and the tool should be installed.
You do not need to wear the Rift during the tests, but one must be set up and connected to the PC running the tests. Each test should take between 10 to 30 seconds to complete. If a test does not complete in this time range, please re-run the test.
To run all default VRC Validator tests, follow these steps:
C:\Program Files\Oculus\Support\oculus-diagnostics\.OculusVRCValidator.exe with the --path parameter set to the executable file of your Rift app. For example:OculusVRCValidator --path "C:\Program Files\Oculus\Software\Software\oculus-first-contact\TouchNUX.exe"
The tests results are written to the command prompt window. You can also log the test results to a .txt file.
VRC Validator will retry the tests if any events were lost while the application was being evaluated.
To run a selected test, append the --test <test name> option to your OculusVRCValidator.exe command with <test name> specifying a single test. To see the list of available tests, run OculusVRCValidator --list_tests or see the “Tests and Pass Criteria” section of this topic. For example, to run the TestEntitlementCheck test, you would enter the following command:
OculusVRCValidator --path "C:\Program Files\Oculus\Software\Software\oculus-first-contact\TouchNUX.exe" --test TestEntitlementCheck
If you want to run several selected tests, you can add more than one --test <test name> option.
For example, to run the TestFrameRate and TestAppShouldQuit tests, you would enter the following command:
OculusVRCValidator --path "C:\Program Files\Oculus\Software\Software\oculus-first-contact\TouchNUX.exe" --test TestFrameRate --test TestAppShouldQuit
The tests results are written to the command prompt window. You can also log the test results to a .txt file.
Append the -l option to the end of your OculusVRCValidator.exe command to log the test results to a text file in the same directory as the tool. For example:
OculusVRCValidator --path "C:\Program Files\Oculus\Software\Software\oculus-oculus-video\Cinema.exe" -l
If you want to write the test results to a different file, use --log_file "<full path>". For example:
OculusVRCValidator --path "C:\Program Files\Oculus\Software\Software\oculus-oculus-video\Cinema.exe" --log_file "C:\temp\log.txt"
In addition to providing test results, log files may also provide links to relevant documentation and best practices to help you resolve issues.
In some cases, it may be necessary to add a delay before each test begins so you can navigate to a specific part of your app that needs testing. To do so, append the --load_time_ms <duration> option to your OculusVRCValidator.exe command. The duration is measured in milliseconds.
For example, the following command delays the start of tests for 30 seconds:
OculusVRCValidator --path "C:\Program Files\Oculus\Software\Software\oculus-first-contact\TouchNUX.exe" --load_time_ms 30000
To make the tests wait until you press Enter in the command prompt window, specify a duration of 0. The command prompt window must have focus. Here is an example:
OculusVRCValidator --path "C:\Program Files\Oculus\Software\Software\oculus-first-contact\TouchNUX.exe" --load_time_ms 0
The Oculus Debug Tool provides access to a VRC Validator dialog to simplify testing. To use this GUI interface, follow these steps:
Run the Oculus Debug Tool and select File > Validate App....

The Validate App dialog appears. For Executable Path, browse to an executable VR application that you want to test. For Arguments, enter any of the command-line arguments that you want to specify for the VR application. Then select the VRC tests that you want to run. In this example, three VRC tests are selected.

Click OK to run the tests. The Validating app dialog appears. In the left panel, a check mark indicates a successful test, an x indicates a failed test, and an animated clock icon indicates a test that is currently underway. Detailed results are shown in the right panel.

The default tests of VRC Validator test your app against specific Oculus Store technical review criteria. If your app fails any of these default tests, it is likely to fail its official Oculus Store technical review.
There are also a number of optional tests. These tests are not run during Oculus Store technical review, but ensuring that your app can pass them adds quality to your app.
Default Tests (in order they will be tested)
| Test Name | Pass Criteria |
|---|---|
| TestSdkVersion | Your app must use the correct versions of Oculus PC SDK, Unity, or Unreal Engine. |
| TestEntitlementCheck | Your app must perform an Oculus Platform entitlement check within 10 seconds of launch. |
| TestOculusDLLIncludes | Your app must not distribute its own copies of Oculus DLLs. |
| TestLaunchIntoVR | Your app must launch into VR within 4 seconds and display a non-headlocked layer. |
| TestFrameRate | Your app must maintain 90 frames per second. |
| TestSubmitFramesWhenVisible | Your app must submit frames when visible. |
| TestSubmitFramesWhenNotVisible | Your app must stop submitting frames when the Universal Menu is open. |
| TestResponseToRecenterRequest | Your app must respond to requests to reset the view. |
| TestAppShouldQuit | Your app must quit gracefully. |
| CheckForExtraneousFiles | Your app must not contain DLLs from other platforms. |
| TestAudioOutput | Your app must target the audio device specified in the Oculus app. |
Optional Tests (in order they will be tested)
| Test Name | Pass Criteria |
|---|---|
| TestMismatchedAdapters | Your app must run correctly when the HMD is connected to a different GPU than the main display. |
| TestResponseToDisplayLost | Your app must either quit properly or stop submitting frames when the HMD is unplugged from the GPU. |
| TestPropertyAccess | Your app must not use any deprecated properties. |
| RunErrorCapture | Your app must not generate runtime errors. |
| TestResponseToIadChanges | Your app must respond to changes in the lens slider. |
This section provides additional information on the tests run by VRC Validator.
Tests if your app is built with the supported versions of Oculus PC SDK, Unity, or Unreal Engine.
Tests if your app performs an Oculus Platform entitlement check within 10 seconds of launch.
Tests if your app is distributing copies of the following Oculus DLLs instead of loading the DLLs from the Oculus runtime directory:
Tests if your app displays a non-headlocked graphic in VR and responds to head tracking within 4 seconds of launch. If you want to test a different duration, append the --max_time_to_frame **duration** option to your command line. Specify the duration in milliseconds.
Note: This test is known to fail every time if you are using Unity Personal (the free version of Unity). The issue is that Unity Personal takes a long time to load, and during this period it always displays a splash screen. However, the splash screen produced by Unity Personal does not render into VR, although it appears on the computer monitor. The workaround for this is to use one of the Pro versions of Unity to generate your app for submission to the Oculus Store.
Tests if your app displays graphics in the headset at 90 frames per second.
Note: If desired, you may add
--output_fpsto print the fps at 500ms intervals as the test runs.
Tests if your app renders when it is visible. The test counts the number of texture swap chains committed and reports it at the end of the test.
Tests if your app stops submitting frames when the Universal Menu is open.
Tests if your app resets the user’s position and orientation when a user selects Reset View in the Universal Menu.
Tests if your app quits properly from the Universal Menu with ovr_Destroy when it receives a quit request.
Tests if your app folder contains extraneous .pdb symbol files.
Tests if your app targets the audio device selected in the Audio Output in VR setting in the Oculus app.
Tests if the application supports plugging the HMD and the primary display into different display adapters. To run this test, the system must have at least two separate display adapters, with the HMD and primary display connected to different display adapters.
Tests if the application responds gracefully if the HMD cable is unplugged from the display adapter. Once the HMD display is lost, the application should either quit with ovr_Destroy, or pause and stop submitting frames to the HMD. For example:
OculusVRCValidator --path "C:\Program Files\Oculus\Software\Software\oculus-first-contact\TouchNUX.exe" --test TestResponseToDisplayLost
During this test, you will be asked to unplug the HMD from the display adapter, allow the test to run, and then plug the HMD back in.
Tests if your app calls any internal, deprecated, or otherwise unsupported API functions that are carryovers from DK2 development. Deprecated property functions include:
Tests if your app generates runtime errors. Some common errors include:
ovrError_InvalidParameter - Invalid parameter provided. More information is output about the function which is called with invalid parameter.ovrError_MismatchedAdapters - Occurs when the HMD is not plugged in the primary display adapter and the application is not handling this.ovrError_LeakingResources - Calling application has leaked resources.ovrError_TextureSwapChainFull - ovr_CommitTextureSwapChain was called too many times on a texture swapchain without calling submit to use the chain.Tests if your app correctly adjusts for Inter Axial Distance (IAD) changes by getting updated HmdToEyeOffset values from ovr_GetRenderDesc at least once every 500ms. It also tests that your app actually responds to IAD changes.