video_core.cpp 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. // Copyright 2014 Citra Emulator Project
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #include <memory>
  5. #include "common/logging/log.h"
  6. #include "core/core.h"
  7. #include "core/settings.h"
  8. #include "video_core/gpu_asynch.h"
  9. #include "video_core/gpu_synch.h"
  10. #include "video_core/renderer_base.h"
  11. #include "video_core/renderer_opengl/renderer_opengl.h"
  12. #ifdef HAS_VULKAN
  13. #include "video_core/renderer_vulkan/renderer_vulkan.h"
  14. #endif
  15. #include "video_core/video_core.h"
  16. namespace VideoCore {
  17. std::unique_ptr<RendererBase> CreateRenderer(Core::Frontend::EmuWindow& emu_window,
  18. Core::System& system) {
  19. switch (Settings::values.renderer_backend) {
  20. case Settings::RendererBackend::OpenGL:
  21. return std::make_unique<OpenGL::RendererOpenGL>(emu_window, system);
  22. #ifdef HAS_VULKAN
  23. case Settings::RendererBackend::Vulkan:
  24. return std::make_unique<Vulkan::RendererVulkan>(emu_window, system);
  25. #endif
  26. default:
  27. return nullptr;
  28. }
  29. }
  30. std::unique_ptr<Tegra::GPU> CreateGPU(Core::System& system) {
  31. if (Settings::values.use_asynchronous_gpu_emulation) {
  32. return std::make_unique<VideoCommon::GPUAsynch>(system, system.Renderer());
  33. }
  34. return std::make_unique<VideoCommon::GPUSynch>(system, system.Renderer());
  35. }
  36. u16 GetResolutionScaleFactor(const RendererBase& renderer) {
  37. return static_cast<u16>(
  38. Settings::values.resolution_factor != 0
  39. ? Settings::values.resolution_factor
  40. : renderer.GetRenderWindow().GetFramebufferLayout().GetScalingRatio());
  41. }
  42. } // namespace VideoCore