diff options
| -rw-r--r-- | src/video_core/renderer_base.h | 2 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_device.cpp | 33 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_device.h | 3 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/renderer_opengl.h | 4 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/renderer_vulkan.h | 4 | ||||
| -rw-r--r-- | src/video_core/vulkan_common/vulkan_device.cpp | 21 | ||||
| -rw-r--r-- | src/video_core/vulkan_common/vulkan_device.h | 3 | ||||
| -rw-r--r-- | src/yuzu/main.cpp | 11 | ||||
| -rw-r--r-- | src/yuzu/main.h | 4 | 
9 files changed, 75 insertions, 10 deletions
diff --git a/src/video_core/renderer_base.h b/src/video_core/renderer_base.h index 320ee8d30..63d8ad42a 100644 --- a/src/video_core/renderer_base.h +++ b/src/video_core/renderer_base.h @@ -42,6 +42,8 @@ public:      [[nodiscard]] virtual RasterizerInterface* ReadRasterizer() = 0; +    [[nodiscard]] virtual std::string GetDeviceVendor() const = 0; +      // Getter/setter functions:      // ------------------------ diff --git a/src/video_core/renderer_opengl/gl_device.cpp b/src/video_core/renderer_opengl/gl_device.cpp index 3f4532ca7..3d2674232 100644 --- a/src/video_core/renderer_opengl/gl_device.cpp +++ b/src/video_core/renderer_opengl/gl_device.cpp @@ -202,13 +202,13 @@ Device::Device() {          LOG_ERROR(Render_OpenGL, "OpenGL 4.6 is not available");          throw std::runtime_error{"Insufficient version"};      } -    const std::string_view vendor = reinterpret_cast<const char*>(glGetString(GL_VENDOR)); +    vendor_name = reinterpret_cast<const char*>(glGetString(GL_VENDOR));      const std::string_view version = reinterpret_cast<const char*>(glGetString(GL_VERSION));      const std::vector extensions = GetExtensions(); -    const bool is_nvidia = vendor == "NVIDIA Corporation"; -    const bool is_amd = vendor == "ATI Technologies Inc."; -    const bool is_intel = vendor == "Intel"; +    const bool is_nvidia = vendor_name == "NVIDIA Corporation"; +    const bool is_amd = vendor_name == "ATI Technologies Inc."; +    const bool is_intel = vendor_name == "Intel";  #ifdef __unix__      const bool is_linux = true; @@ -275,6 +275,31 @@ Device::Device() {      }  } +std::string Device::GetVendorName() const { +    if (vendor_name == "NVIDIA Corporation") { +        return "NVIDIA"; +    } +    if (vendor_name == "ATI Technologies Inc.") { +        return "AMD"; +    } +    if (vendor_name == "Intel" || vendor_name == "Intel Open Source Technology Center") { +        return "INTEL"; +    } +    if (vendor_name == "Mesa Project") { +        return "MESA"; +    } +    if (vendor_name == "Mesa/X.org") { +        return "LLVMPIPE"; +    } +    if (vendor_name == "AMD") { +        return "RADEONSI"; +    } +    if (vendor_name == "nouveau") { +        return "NOUVEAU"; +    } +    return vendor_name; +} +  Device::Device(std::nullptr_t) {      max_uniform_buffers.fill(std::numeric_limits<u32>::max());      uniform_buffer_alignment = 4; diff --git a/src/video_core/renderer_opengl/gl_device.h b/src/video_core/renderer_opengl/gl_device.h index f24bd0c7b..2c2b13767 100644 --- a/src/video_core/renderer_opengl/gl_device.h +++ b/src/video_core/renderer_opengl/gl_device.h @@ -22,6 +22,8 @@ public:      explicit Device();      explicit Device(std::nullptr_t); +    [[nodiscard]] std::string GetVendorName() const; +      u32 GetMaxUniformBuffers(Tegra::Engines::ShaderType shader_type) const noexcept {          return max_uniform_buffers[static_cast<std::size_t>(shader_type)];      } @@ -130,6 +132,7 @@ private:      static bool TestVariableAoffi();      static bool TestPreciseBug(); +    std::string vendor_name;      std::array<u32, Tegra::Engines::MaxShaderTypes> max_uniform_buffers{};      std::array<BaseBindings, Tegra::Engines::MaxShaderTypes> base_bindings{};      size_t uniform_buffer_alignment{}; diff --git a/src/video_core/renderer_opengl/renderer_opengl.h b/src/video_core/renderer_opengl/renderer_opengl.h index cc19a110f..0b66f8332 100644 --- a/src/video_core/renderer_opengl/renderer_opengl.h +++ b/src/video_core/renderer_opengl/renderer_opengl.h @@ -70,6 +70,10 @@ public:          return &rasterizer;      } +    [[nodiscard]] std::string GetDeviceVendor() const override { +        return device.GetVendorName(); +    } +  private:      /// Initializes the OpenGL state and creates persistent objects.      void InitOpenGLObjects(); diff --git a/src/video_core/renderer_vulkan/renderer_vulkan.h b/src/video_core/renderer_vulkan/renderer_vulkan.h index 72071316c..d7d17e110 100644 --- a/src/video_core/renderer_vulkan/renderer_vulkan.h +++ b/src/video_core/renderer_vulkan/renderer_vulkan.h @@ -47,6 +47,10 @@ public:          return &rasterizer;      } +    [[nodiscard]] std::string GetDeviceVendor() const override { +        return device.GetDriverName(); +    } +  private:      void Report() const; diff --git a/src/video_core/vulkan_common/vulkan_device.cpp b/src/video_core/vulkan_common/vulkan_device.cpp index 64206b3d2..c52cd246b 100644 --- a/src/video_core/vulkan_common/vulkan_device.cpp +++ b/src/video_core/vulkan_common/vulkan_device.cpp @@ -531,6 +531,27 @@ bool Device::IsFormatSupported(VkFormat wanted_format, VkFormatFeatureFlags want      return (supported_usage & wanted_usage) == wanted_usage;  } +std::string Device::GetDriverName() const { +    switch (driver_id) { +    case VK_DRIVER_ID_AMD_PROPRIETARY: +        return "AMD"; +    case VK_DRIVER_ID_AMD_OPEN_SOURCE: +        return "AMDVLK"; +    case VK_DRIVER_ID_MESA_RADV: +        return "RADV"; +    case VK_DRIVER_ID_NVIDIA_PROPRIETARY: +        return "NVIDIA"; +    case VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS: +        return "INTEL"; +    case VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA: +        return "ANV"; +    case VK_DRIVER_ID_MESA_LLVMPIPE: +        return "LAVAPIPE"; +    default: +        return vendor_name; +    } +} +  void Device::CheckSuitability(bool requires_swapchain) const {      std::bitset<REQUIRED_EXTENSIONS.size()> available_extensions;      bool has_swapchain = false; diff --git a/src/video_core/vulkan_common/vulkan_device.h b/src/video_core/vulkan_common/vulkan_device.h index 67d70cd22..c5504467d 100644 --- a/src/video_core/vulkan_common/vulkan_device.h +++ b/src/video_core/vulkan_common/vulkan_device.h @@ -45,6 +45,9 @@ public:      /// Reports a shader to Nsight Aftermath.      void SaveShader(const std::vector<u32>& spirv) const; +    /// Returns the name of the VkDriverId reported from Vulkan. +    std::string GetDriverName() const; +      /// Returns the dispatch loader with direct function pointers of the device.      const vk::DeviceDispatch& GetDispatchLoader() const {          return dld; diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index be8933c5c..f4dd53b9b 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp @@ -104,6 +104,7 @@ static FileSys::VirtualFile VfsDirectoryCreateFileWrapper(const FileSys::Virtual  #include "input_common/main.h"  #include "util/overlay_dialog.h"  #include "video_core/gpu.h" +#include "video_core/renderer_base.h"  #include "video_core/shader_notify.h"  #include "yuzu/about_dialog.h"  #include "yuzu/bootmanager.h" @@ -1418,7 +1419,8 @@ void GMainWindow::BootGame(const QString& filename, std::size_t program_index, S              std::filesystem::path{filename.toStdU16String()}.filename());      }      LOG_INFO(Frontend, "Booting game: {:016X} | {} | {}", title_id, title_name, title_version); -    UpdateWindowTitle(title_name, title_version); +    const auto gpu_vendor = system.GPU().Renderer().GetDeviceVendor(); +    UpdateWindowTitle(title_name, title_version, gpu_vendor);      loading_screen->Prepare(system.GetAppLoader());      loading_screen->show(); @@ -2847,8 +2849,8 @@ void GMainWindow::MigrateConfigFiles() {      }  } -void GMainWindow::UpdateWindowTitle(const std::string& title_name, -                                    const std::string& title_version) { +void GMainWindow::UpdateWindowTitle(std::string_view title_name, std::string_view title_version, +                                    std::string_view gpu_vendor) {      const auto branch_name = std::string(Common::g_scm_branch);      const auto description = std::string(Common::g_scm_desc);      const auto build_id = std::string(Common::g_build_id); @@ -2860,7 +2862,8 @@ void GMainWindow::UpdateWindowTitle(const std::string& title_name,      if (title_name.empty()) {          setWindowTitle(QString::fromStdString(window_title));      } else { -        const auto run_title = fmt::format("{} | {} | {}", window_title, title_name, title_version); +        const auto run_title = +            fmt::format("{} | {} | {} | {}", window_title, title_name, title_version, gpu_vendor);          setWindowTitle(QString::fromStdString(run_title));      }  } diff --git a/src/yuzu/main.h b/src/yuzu/main.h index 11f152cbe..5c199155a 100644 --- a/src/yuzu/main.h +++ b/src/yuzu/main.h @@ -287,8 +287,8 @@ private:      InstallResult InstallNSPXCI(const QString& filename);      InstallResult InstallNCA(const QString& filename);      void MigrateConfigFiles(); -    void UpdateWindowTitle(const std::string& title_name = {}, -                           const std::string& title_version = {}); +    void UpdateWindowTitle(std::string_view title_name = {}, std::string_view title_version = {}, +                           std::string_view gpu_vendor = {});      void UpdateStatusBar();      void UpdateStatusButtons();      void UpdateUISettings();  | 
