OSD: Add GPU Info (#11808)

* OSD: Add GPU Info

* Qt: More Translatable Strings
This commit is contained in:
KamFretoZ 2024-09-15 19:24:05 +07:00 committed by GitHub
parent e8e0b97f6d
commit d12ef2b17c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 28 additions and 5 deletions

View File

@ -528,7 +528,7 @@ void GSUpdateDisplayWindow()
{
if (!g_gs_device->UpdateWindow())
{
Host::ReportErrorAsync("Error", "Failed to change window after update. The log may contain more information.");
Host::ReportErrorAsync("Error", TRANSLATE_SV("GS", "Failed to change window after update. The log may contain more information."));
return;
}

View File

@ -805,6 +805,7 @@ public:
// clang-format on
protected:
std::string m_name = "Unknown";
FeatureSupport m_features;
u32 m_max_texture_size = 0;
@ -870,6 +871,9 @@ public:
GSDevice();
virtual ~GSDevice();
/// Returns a string containing current adapter in use.
const std::string& GetName() const { return m_name; }
/// Returns a string representing the specified API.
static const char* RenderAPIToString(RenderAPI api);

View File

@ -112,7 +112,7 @@ bool GSDevice11::Create(GSVSyncMode vsync_mode, bool allow_present_throttle)
{
Host::ReportErrorAsync("GS",
fmt::format(
"Failed to create D3D device: 0x{:08X}. A GPU which supports Direct3D Feature Level 10.0 is required.",
TRANSLATE_FS("GS", "Failed to create D3D device: 0x{:08X}. A GPU which supports Direct3D Feature Level 10.0 is required."),
hr));
return false;
}
@ -147,7 +147,10 @@ bool GSDevice11::Create(GSVSyncMode vsync_mode, bool allow_present_throttle)
wil::com_ptr_nothrow<IDXGIDevice> dxgi_device;
if (m_dev.try_query_to(&dxgi_device) && SUCCEEDED(dxgi_device->GetParent(IID_PPV_ARGS(dxgi_adapter.put()))))
{
Console.WriteLn(fmt::format("D3D Adapter: {}", D3D::GetAdapterName(dxgi_adapter.get())));
m_name = D3D::GetAdapterName(dxgi_adapter.get());
}
else
Console.Error("Failed to obtain D3D adapter name.");

View File

@ -690,6 +690,8 @@ bool GSDevice12::Create(GSVSyncMode vsync_mode, bool allow_present_throttle)
return false;
}
m_name = D3D::GetAdapterName(m_adapter.get());
if (!CreateDescriptorHeaps() || !CreateCommandLists() || !CreateTimestampQuery())
return false;

View File

@ -855,8 +855,10 @@ bool GSDeviceMTL::Create(GSVSyncMode vsync_mode, bool allow_present_throttle)
Console.Warning("Metal: Couldn't find adapter %s, using default", GSConfig.Adapter.c_str());
m_dev = GSMTLDevice(MRCTransfer(MTLCreateSystemDefaultDevice()));
if (!m_dev.dev)
Host::ReportErrorAsync("No Metal Devices Available", "No Metal-supporting GPUs were found. PCSX2 requires a Metal GPU (available on all macs from 2012 onwards).");
Host::ReportErrorAsync(TRANSLATE_SV("GSDeviceMTL", "No Metal Devices Available"), TRANSLATE_SV("GSDeviceMTL", "No Metal-supporting GPUs were found. PCSX2 requires a Metal GPU (available on all Macs from 2012 onwards)."));
}
m_name = [[m_dev.dev name] UTF8String];
m_queue = MRCTransfer([m_dev.dev newCommandQueue]);
m_pass_desc = MRCTransfer([MTLRenderPassDescriptor new]);

View File

@ -184,6 +184,9 @@ bool GSDeviceOGL::Create(GSVSyncMode vsync_mode, bool allow_present_throttle)
if (!CheckFeatures(buggy_pbo))
return false;
// Store adapter name currently in use
m_name = reinterpret_cast<const char*>(glGetString(GL_RENDERER));
SetSwapInterval();
// Render a frame as soon as possible to clear out whatever was previously being displayed.
@ -635,7 +638,7 @@ bool GSDeviceOGL::CheckFeatures(bool& buggy_pbo)
if (!GLAD_GL_VERSION_3_3)
{
Host::ReportErrorAsync(
"GS", fmt::format("OpenGL renderer is not supported. Only OpenGL {}.{}\n was found", major_gl, minor_gl));
"GS", fmt::format(TRANSLATE_FS("GSDeviceOGL", "OpenGL renderer is not supported. Only OpenGL {}.{}\n was found"), major_gl, minor_gl));
return false;
}

View File

@ -2054,7 +2054,7 @@ bool GSDeviceVK::Create(GSVSyncMode vsync_mode, bool allow_present_throttle)
if (!CheckFeatures())
{
Host::ReportErrorAsync("GS", "Your GPU does not support the required Vulkan features.");
Host::ReportErrorAsync("GS", TRANSLATE_SV("GSDeviceVK", "Your GPU does not support the required Vulkan features."));
return false;
}
@ -2539,6 +2539,9 @@ bool GSDeviceVK::CreateDeviceAndSwapChain()
// Read device physical memory properties, we need it for allocating buffers
vkGetPhysicalDeviceProperties(m_physical_device, &m_device_properties);
// Stores the GPU name
m_name = m_device_properties.deviceName;
// We need this to be at least 32 byte aligned for AVX2 stores.
m_device_properties.limits.minUniformBufferOffsetAlignment =
std::max(m_device_properties.limits.minUniformBufferOffsetAlignment, static_cast<VkDeviceSize>(32));

View File

@ -213,12 +213,18 @@ __ri void ImGuiManager::DrawPerformanceOverlay(float& position_y, float scale, f
if (GSConfig.OsdShowHardwareInfo)
{
// CPU
text.clear();
text.append_format("CPU: {} ({}C/{}T)",
cpuinfo_get_package(0)->name,
cpuinfo_get_cores_count(),
cpuinfo_get_processors_count());
DRAW_LINE(fixed_font, text.c_str(), IM_COL32(255, 255, 255, 255));
// GPU
text.clear();
text.append_format("GPU: {}", g_gs_device->GetName());
DRAW_LINE(fixed_font, text.c_str(), IM_COL32(255, 255, 255, 255));
}
if (GSConfig.OsdShowCPU)