Multisample Anti-Aliasing Analysis for Quest

On this Page

Important

All Oculus Quest developers MUST PASS the concept review prior to gaining publishing access to the Quest Store and additional resources. Submit a concept document for review as early in your Quest application development cycle as possible. For additional information and context, please see Submitting Your App to the Oculus Quest Store.

Multi-sample anti-aliasing (MSAA) is a technique for improving the quality of computer graphics. Using MSAA on a PC-based platform comes at a lower cost than using the technique on Quest. Depending on how much content you are rendering and the GPU level your app is running on, the overall overhead of using MSAA ranges from 0.5 ms to 1.5 ms per frame.

In general, you should almost always use MSAA in your apps for Quest, however you should not go over 4x MSAA sampling. It is better to spend GPU time on higher resolution render targets than further increase MSAA.

The following tests and sample images demonstrate the results of turning MSAA 4x on or off on Quest devices with different kinds of apps.

Test specs:

  • Eye buffer Resolution 1216 x 1344
  • Hardware: Oculus Quest

Test 1: Normal Fragment GPU Workload App

This test was conducted with a Unity simple scene that contains lighting.

  • GPU Level: 2
  • Data measured on one eye only.

Test Results:

MetricMSAA OffMSAA 4x On
Render Cost2.65 ms3.15 ms
Resolve Cost0.17 ms0.44 ms

Rendered Image:


Test 2: Heavy Fragment Shader Workload App

This test was conducted with a scene that contains a Mandlebrot set visualization.

  • GPU level: 4
  • Data was measured on both eyes

Test Results:

MetricMSAA OffMSAA 4x On
Render Cost10.449 ms11.497 ms
Resolve Cost0.313 ms0.626 ms

Rendered Image:


Test 3. Heavy Vertex Shader, Low Fragment App

This test was was conducted with a heavy vertex scene that contains point rendering. This test features a lot of tiny, barely visible vertices. It demonstrates MSAA’s impact on Binning. The binning cost is very similar whether MSAA is off or on: 1.419 ms vs 1.534 ms. The binning algorithm from Qualcomm has an approximate O(1) bin count, which is considered good.

  • GPU level: 2
  • Data measured on a single eye

Test Results:

MetricMSAA OffMSAA 4x On
Binning1.419 ms1.534 ms
Render Cost0.4 ms1.38 ms
Resolve Cost0.14 ms0.43 ms

Rendered Image:


Test 4. Trivial GPU workload

This test was for a scene with a trivial GPU workload. The intention with this test is to get the pure overhead when there is almost no load on the GPU. With this test you can see if MSAA is off, there is almost no resolve cost. In this simple case, the driver is smart enough to direct-render into system memory instead of rendering into tiler and then copying from the tiler to system memory.

Per Qualcomm, direct-rendering can only occur when MSAA is off. Most of time, an app is complex enough that direct-rendering doesn’t make sense. There are special cases like like if you need to render a quad into a smaller RT that direct-rendering can save you some cost. In addition, Qualcomm offers an extension to control whether something is direct-rendered, if you do not want to let the driver decide.

  • GPU level: 2
  • Data measured on a single eye

Test Results:

MetricMSAA OffMSAA 4x On
Render Cost0.044ms0.388ms
Resolve Cost0.0msvs 0.44 ms

Rendered Image:

Summary

MSAA does add some cost.

Render comparison:

The tests show that as a scene’s fragment complexity increases, the render overhead percentage decreases with MSAA, but with some cost. For example, when you enable 4x MSAA on a medium complexity app, you can reasonably expect that MSAA will add approximately 10-15% in time overhead.

  • GPU 2: high vertex, low frag: 0.4 ms (MSAA off) vs. 1.38 ms (MSAA 4x)
  • GPU 2: normal frag workload: 2.65 ms (MSAA off) vs. 3.15 ms (MSAA 4x)
  • GPU 4: heavy frag workload: 10.449 ms (MSAA off) vs 11.497 ms (MSAA 4x)

Resolve comparison:

The resolve cost difference is fixed under the same GPU level regardless the GPU workload. According Qualcomm, the resolving cost difference is due to the high bin count of 4x MSAA, with per-bin cost roughly the same.

  • GPU 2: 0.17 ms (MSAA off) vs 0.44 ms (MSAA 4x)
  • GPU 4: 0.14 ms (MSAA off) vs 0.30 ms (MSAA 4x)

Also consider that some overhead might be coming from the profiler used for these tests, and the real difference in resolving cost might be smaller.