Search Unity

Today we’re releasing the first developer preview of the upcoming Vulkan renderer for Unity, as announced at Google I/O. Vulkan is a new generation graphics and compute API that provides high-efficiency, cross-platform access to modern GPUs in both PCs and on mobile platforms. The recently released Android Nougat version from Google brings official support for the Vulkan API, and we’re working towards enabling our users to boost the graphics performance to the next level.

Unity Labs scene running on Linux using the Vulkan renderer


The main benefit of Vulkan over older mobile rendering APIs such as OpenGL ES 3.x is speed. Vulkan is designed to take advantage of multiple CPU cores by allowing the application to build command lists in multiple threads in parallel. This allows the application to take advantage of all of the CPU cores on the device, improving performance. The Vulkan preview release supports this via the “Enable Graphics Jobs” checkbox in the player settings. However, we’re seeing large performance gains even when running the renderer in a single thread. In one of our internal benchmarks we’re seeing up to 35% improvement in frame times on Android, compared to OpenGL ES 3.1 renderer, even though they’re both running in a single rendering thread!

Getting started

Get the experimental build from our beta page. The build is based on Unity 5.5 beta 4 release. Remember to back up your projects before trying this out!

To enable Vulkan support, open “Player Settings…”, go to the “Other Settings” pane and clear the “Auto Graphics API” checkbox. You are presented with an ordered list of graphics APIs to choose from. If Vulkan is not on that list, click the ‘+’ sign at the bottom of the list to add it. Then drag Vulkan to be the first item on the list so that it’ll be used whenever supported, and you’re done! All your existing shaders will get translated to Vulkan SPIR-V (unless specifically disabled via #pragma only_renderers or similar), and the idea is that things should “Just Work”.

You can also experiment with the Enable Graphics Jobs checkbox, it can give a nice performance boost especially on multi-core CPUs.

NOTE! When targeting Android, make sure you never have both “Multithreaded Rendering” and “Graphics Jobs (Experimental)” settings enabled at the same time. They are mutually exclusive, and in the final version we’ll silently ignore the Multithreaded Renderer setting if Graphics Jobs are enabled.

Now, just build & run, and if everything went as planned, you should see something like this in the player log at startup:


Supported devices

This preview build has Vulkan support enabled for the following targets:

  • Windows standalone (no Vulkan support in the editor yet)
  • Android
  • Linux standalone

On Windows, we’ve been mainly testing on Nvidia and AMD GPUs. Remember to update your GPU drivers! Vulkan is a new technology and the drivers keep improving constantly, so before reporting a crash, check first if an updated driver fixes the problem.

On Android, we’ve tested on the following devices:

  • Samsung Galaxy S7 (European version, with ARM Mali GPU). Make sure you have the latest firmware, with build date August 2016 or later. Previous firmwares have older drivers that are known not to work.
  • Nvidia Shield Tablet (both versions), Shield Console.
  • Google Nexus 6P, 5X (although you might see more issues on these handsets compared to the others).

The following devices are known not to work with the currently available firmware:

  • Samsung Galaxy S7 (US version, with Qualcomm GPU). We expect that an upcoming firmware with an updated driver should fix this. UPDATE: Samsung confirmed that they will release a fixed Vulkan driver for the Qualcomm based Galaxy S7 with the next system update in October 2016.

On Linux, only the Nvidia GPUs have been tested. You’ll need to have libvulkan1 installed (either from your distro or via the LunarG Vulkan SDK) and recent enough drivers (367.x or newer). However, we’ve seen random hangs when transitioning from the splash screen into the game itself. So when testing this experimental release, you might consider disabling the Unity splash screen, if you have that option.

Known issues

As this is an experimental developer preview, there are some known issues we’re working on. We also welcome your feedback! Please let us know of any bugs or issues you find:

  • Graphics jobs on Vulkan are especially experimental at this stage. If you see crashes, try disabling Graphics Jobs to see if that’s the one causing it.
  • GrabPass is not supported with Graphics Jobs.
  • On Nvidia GPUs, when rendering with multiple cameras with MSAA enabled, display corruption may occur.
  • On Android the Graphics Jobs are currently configured to run in 2 concurrent threads only. Because of this, you’ll usually get better performance by using the Multithreaded renderer instead (this is the existing client/worker threaded renderer).
  • Compute shaders haven’t been thoroughly tested yet, YMMV.

We hope you’ll have fun experimenting with the new renderer. Please talk to us about it at our forums: what works, what doesn’t, what you like about it and what you’re missing. If you believe you’ve found a bug, please report it via our bug reporting system (make sure to mention it refers to the experimental Vulkan build). We’re especially interested in cases where the Vulkan renderer would be slower than GL ES 3.x on Android, or significantly slower than DX11 or DX9 on Windows.


Subscribe to comments

Comments are closed.

  1. Is this missing from 5.5.0b9 on MAC ?

    1. Mikko Strandborg

      November 1, 2016 at 5:26 pm

      First of all, Vulkan support will be available starting in Unity version 5.6 onwards, so yeah, no Vulkan in 5.5 yet. Secondly, MacOS does not support Vulkan: Apple is using their own rendering API (Metal) instead.

  2. Can Unity finally fix that uttery terrible Stuttering on Nvidia cards?

    We suffer terribly because of the stutter our users get while playing our game if you guys don’t fix this we will move to Unreal and never come back. I’m so getting tired of Unity and I was loving it so much. Very dissapointing engine. This bug is present from 2012 till now…………….

    1. I’m surprised you haven’t submitted a bugreport for this in 4 years. In Fact, nobody has – maybe because it isn’t an issue with Unity, but some users have enforced expensive features like ambient occlusion (SSAO) or DSR in the driver? If you provide some information (preferably a bug report with repro project), I’m sure someone will look into this.

        1. None of these links provide anything to reproduce or understand the issue. Also, the majority of these links says stuttering is caused by another tool or incorrect vsync or refresh rate setup in the driver, or incorrect FixedUpdate/PhysX usage. I have never had any stuttering or hickups like this, and I’m using Unity since 2010, with various nvidia cards on all Windows versions.
          Do you also have a stuttering effect if you play for example INSIDE on Steam? I played it from start to end in one sitting, there was no lag or stutter at all and all content is loaded/streamed dynamically. You get 60fps constantly – so what needs to be different to break this? Do you have these hickups also with an almost empty scene where just one cube is spinning?

  3. I’m afraid I get about 58FPS with OpenGL ES 3 and merely 26 with Vulkan on an Android 6P. Nothing fancy, just meshes with standard materials, no special effects. Still, keep the good work, Vulkan is the way to go :)

    1. Mikko Strandborg

      October 10, 2016 at 5:01 pm

      Can you file a bug with repro project attached please? We’d love to take a look.

      1. Ruben Torres Bonet

        October 11, 2016 at 11:53 am


  4. Will Unity take advantage of asynchronous compute on GPU as used by DOOM and other games (DX12 and Vulkan) link ->

  5. Wondering when vulkan was coming, thanks a bunch!

  6. I’m trying to build to GearVR but the screen doesn’t split. This preview works with VR, or Am I missing something in the building settings?

    1. According to Oculus GearVR forums, Vulkan isn’t yet supported on Gear VR.

  7. Was able to get our source to run with Vulkan, there were a slew of Shader Errors, will there be a forum for us to post questions?

    Overall THANK YOU, this is very promising

  8. Great work.
    Please, before you releasing the new update make a video about all new features.
    Thank you.

  9. It’s great to be able to get this kind of updates early on as a preview. The only rant i have is that everything is now delivered as a preview build !

    This means i must install at any given point in time, something like 7 different versions of Unity on my machine. (2d preview, scripting update preview, 5.5 beta, vulkan preview, along with the other 2-3 versions of the engine i have installed).

    Is this something you’re considering to improve somehow? for example – using the “module” system where each component could have a preview ? (not sure this is currently possible though)

    1. Get ready to install the Module System Preview

  10. Awesome news! Congrats gfx coders @ Unity :)
    I’ll have to add Vulcan support to AVPro Video soon – I’m curious to see if there are any improvements in texture upload speed. I hope that Android MediaPlayer API has Vulcan integration…I’m sure it must have….

  11. Maybe use an enum: None, Multithreaded Rendering, Graphics jobs

    1. “NOTE! When targeting Android, make sure you never have both “Multithreaded Rendering” and “Graphics Jobs (Experimental)” settings enabled at the same time. They are mutually exclusive, and in the final version we’ll silently ignore the Multithreaded Renderer setting if Graphics Jobs are enabled.”

      I can’t believe how someone thinks that silently ignoring something is a good idea ever. Unity, listen to this man, change it into enum or at least don’t silently ignore it, but disallow selecting both with an explanation message.

      1. Aras Pranckevičius

        September 30, 2016 at 7:56 am

        Yes, changing these into some sort of enum is a plan.

  12. Lermy García Mas

    September 29, 2016 at 5:14 pm

    This is excellent!! Keep polishing!!

  13. Thanks for the Linux Support!

  14. Marc Andre Jutras

    September 29, 2016 at 4:42 pm

    > GrabPass is not supported with Graphics Jobs.

    Wow… That’s quite a deal breaker. Is there a way to do refraction without GrabPass?

    1. Aras Pranckevičius

      September 29, 2016 at 4:43 pm

      CommandBuffer based approach should work – copy active render target into another texture, from a command buffer that executes after opaque geometry for example.

      1. Marc Andre Jutras

        September 29, 2016 at 5:00 pm

        Isn’t that an amazing way to kill your framerate?

        Already that CommandBuffer has poor performance, I would assume copying the render target from them sure won’t help.

        1. Aras Pranckevičius

          September 29, 2016 at 5:07 pm

          But that is exactly what a GrabPass does.

          GrabPass does this: “copy current render target into another texture”.

          I’m suggesting a command buffer that does this: “copy current render target into another texture”.

          Which part is more expensive, and do you have more details on what is the “command buffers are slow” problem?

    2. The reason for this is mostly that from Vulkan’s point of view, each render job builds its own secondary command buffer, and currently the secondary command buffers cannot begin or end render passes (so that we can have multiple threads building draw commands for the same renderpass in parallel). This also means that it is not possible to switch a rendertarget within a job either.

      On tile-based GPUs, doing a GrabPass means flushing the tiles to main memory, copying it to render texture, and then read the previous contents back to the tiles to continue rendering, and this is obviously quite slow, so I’d recommend trying alternative approaches; maybe reusing the contents of the previous frame for the refractions?

      1. Marc Andre Jutras

        September 29, 2016 at 5:05 pm

        That sounds like a terrible hack that would give ugly result when the camera start and stop moving. Might be wrong.

        And how would you get the last frame at the right moment, with all the stuff rendered, but without the translucent/refractive surface and no post-effect?

        1. If I remember rightly, that’s how the new Doom does it.

    3. Oh, and just to clarify: GrabPass should work fine when graphics jobs are not enabled. And, on tile based GPUs it causes a tile resolve+unresolve, just the same as would happen on GL ES.

  15. Really slow guys… being using Vulkan SDK with UE4 since February… and I still have the GI bugs in deferred rendering, simply falling back to forward path… I’m seriously disappointed guys.

    1. Aras Pranckevičius

      September 29, 2016 at 4:44 pm

      Are the GI+deferred bugs related to Vulkan, or just in general? In the latter case, do you have more detail on what these bugs are, e.g. case numbers?

      1. Marc Andre Jutras

        September 29, 2016 at 5:02 pm

        Don’t know about bug, but reflection probe in Deferred Shading still don’t blend. It’s pretty annoying to have edge showing up when two probes meets. On top, most of our pipeline requires Deferred Shading. So we are stuck with something butt ugly.

        1. Aras Pranckevičius

          October 1, 2016 at 8:25 am

          Details would be welcome. Reflection probes do blend in our tests.

        2. I would have this issue too, i had to switch to standard shader. i have noticed they arent blending as well as they used to, im not sure if this was caused by an update to 5.4 from 5.3 ill have to check.

      2. Pino of DFT Games Ltd.

        October 23, 2016 at 8:37 pm

        I’m referring to the shadows not working in mixed mode lighting, moved to experimental build againn… it was expected with 5.4, then some 5.4.x (see release notes) now not even in 5.5 :(

    2. Why not stick with UE4?

      1. Pino of DFT Games Ltd.

        October 23, 2016 at 8:39 pm

        Simply because projects already in advanced state on Unity would cost too much money to be moved to UE4… I'[m kinda stuck on a few projects and I feel the pain every time I cannot progress on those.

    3. Read your comment. This isn’t constructive criticism. Please add some details as to why you’re disappointed! It makes you look more creditable and maybe your issues will get solved eventually. Win-win.

      1. Pino of DFT Games Ltd.

        October 23, 2016 at 8:43 pm

        Is very constructive, it reads as follows in plain English: “Unity, stop divesting from the Engine to put money in useless services I didn’t buy in the first place. I expect Vulkan and fixed mixed light rendering ASAP, not more services that I never bought”.

        Simple and easy to understand I guess… having put a few ten of thousand dollars in this engin I’ve fill right to complain quite loud when I feel robbed.

        1. Did you pay for Vulkan renderer?
          Vulkan is a bit new and only supported by a few devices. By the time it is mature, I’m sure Unity will fix that before they release the build. Don’t complain about a feature in a beta build.

  16. Pechka_Productions

    September 29, 2016 at 4:18 pm

    Just as you promised at Google I/O. Great job!