Implement support for frame caching
When re-rendering the same frame many times, we should cache the pre-processed result (before the output to screen) and re-blit it for performance.
In addition, we should also re-blit instead of aborting when trying to use a compute shader in an environment where the swapchain is not storable. This would likely be handled by the same code.