cancel
Showing results for 
Search instead for 
Did you mean: 

Setting GPU level on Quest 2

menderbug
Honored Guest
I'm trying to profile a Unity app on the Quest 2, but I'm having trouble setting the GPU level. Here is what I've been trying to do:
  • I'm checking the current GPU level using adb logcat -s VrApi (under CPU4/GPU). It seems to hover around 2 or 3.
  • I tried using adb shell getprop debug.oculus.gpuLevel, but by default this returns nothing. I assume this property doesn't refer to the actual GPU Level but the enforced GPU Level, so having it empty means dynamic GPU level.
  • In my Unity project, I'm using:
    OVRManager.gpuLevel = 2;

    to try and fix the GPU level. This seems to be ignored by the Quest (logcat still reports GPU level 3 sometimes). Moreover, using adb shell getprop still returns nothing. Shouldn't that one pick up the fixed GPU Level now?
  • Alternatively, I tried using adb shell to fix the GPU level at runtime using:
    adb shell setprop debug.oculus.gpuLevel 2
    When I do that, getprop does pick up on the value I've set, but the GPU level reported by logcat still fluctuates sometimes.
Any idea what's going on there? Should any of these be working, or am I missing a step? We just tried the adb shell solution on a colleague's Quest 1 and it worked out of the box (though he was running a different app).

Having no control over the GPU level makes profiling a bit of a pain...
1 REPLY 1

Sandstedt
Expert Protege

I've been experience a bit. And when setting systemDisplayFrequency to 72 in the Unity Awake method...

OVRPlugin.systemDisplayFrequency = 72;
OVRManager.cpuLevel = 2;
OVRManager.gpuLevel = 2;  // or 3

...it gets picked up. But if I set gpuLevel to 4, it doesn't get picked up. Neither if I increase the display frequency to 90 or 120:

OVRPlugin.systemDisplayFrequency = 90;
OVRManager.cpuLevel = 2;
OVRManager.gpuLevel = 2;  // this changes to 3

 And for 120 fps:

OVRPlugin.systemDisplayFrequency = 120;
OVRManager.cpuLevel = 2; // this changes to 4
OVRManager.gpuLevel = 2;  // this changes set to 3​


So it seems like you can only set gpuLevel to a maximum of 3 (but the documentation says 2). But if you wanna set to 2 (or I assume lower), you need to also set the display frequency to 72. When setting to 90, gpuLevel gets automatically bumped to 3, and when setting the display frequency to 120, both the cpuLevel gets bumped to 4 and gpuLevel to 3.

(To observe the actual levels, I was using OVR Metrics Tool)