* The previous implemention was fine, but it wasted space. Buckets now are just ticks attached to a particular buffer region, which means we can flush/map arbitrary regions
* A bug in the texture runtime is also fixed which commited to the same buffer twice
* Async is pretty nice but games that do a lot of flushes might have worse performance due to thread synchronization overhead
* I haven't noticed any cases of this yet but it doesn't hurt making this a UI option
* This commit ports yuzu's async scheduler replacing our older and crummier version
Commands are recorded by the scheduler and processed by a separate worker thread.
* Queue submission is also moved to the worker thread which should alliviate slowdowns related to vkQueueSubmit stalls
* Fragment shader compilation and queue submission are also moved to that thread to reduce stutters
* Also use separate upload and download buffers optimized for write and readback respectively. This gives a huge 20+ FPS boost in most games which were bottlenecked by slow reads
* RGBA8 surfaces now expose an additional R32Uint view used for storage descriptors. The format is guaranteed by the spec to support atomic loads/stores. This requires the mutable flag which incurs a performance cost, but might be better than breaking the current renderpass each draw when rendering shadows, especially on mobile
* Color mask is also implemented which fixes Street Fighter and Monster Hunter Stories
* This commit includes large changes to have textures are handling. Instead of using ImageAlloc, Surface is used instead which provides multiple benefits: automatic recycling on destruction and ability to use the TextureRuntime interface to simplify operations
* Layout tracking is also implemented which allows transitioning of individual mip levels without errors
* This fixes graphical errors in multiple games which relied on framebuffer uploads
* The cache didn't take into account the framebuffer and render area used, so if these changed the renderpass wouldn't restart. This caused graphical bugs in Pokemon X/Y
* Intel iGPUs don't support blit on all depth/stencil formats which caused issues since the runtime checks for this while the renderpass cache does not