mirror of https://github.com/PCSX2/pcsx2.git
GS: Don't show GPU OSD when timing init fails
This commit is contained in:
parent
1f5d2c49fc
commit
fa3bd58b7f
|
@ -634,8 +634,14 @@ namespace Vulkan
|
|||
vkGetDeviceQueue(m_device, m_present_queue_family_index, 0, &m_present_queue);
|
||||
}
|
||||
|
||||
m_gpu_timing_supported = (queue_family_properties[m_graphics_queue_family_index].timestampValidBits > 0);
|
||||
DevCon.WriteLn("GPU timing is %s", m_gpu_timing_supported ? "supported" : "not supported");
|
||||
m_gpu_timing_supported = (m_device_properties.limits.timestampComputeAndGraphics != 0 &&
|
||||
queue_family_properties[m_graphics_queue_family_index].timestampValidBits > 0 &&
|
||||
m_device_properties.limits.timestampPeriod > 0);
|
||||
DevCon.WriteLn("GPU timing is %s (TS=%u TS valid bits=%u, TS period=%f)",
|
||||
m_gpu_timing_supported ? "supported" : "not supported",
|
||||
static_cast<u32>(m_device_properties.limits.timestampComputeAndGraphics),
|
||||
queue_family_properties[m_graphics_queue_family_index].timestampValidBits,
|
||||
m_device_properties.limits.timestampPeriod);
|
||||
|
||||
ProcessDeviceExtensions();
|
||||
return true;
|
||||
|
@ -845,6 +851,7 @@ namespace Vulkan
|
|||
if (res != VK_SUCCESS)
|
||||
{
|
||||
LOG_VULKAN_ERROR(res, "vkCreateQueryPool failed: ");
|
||||
m_gpu_timing_supported = false;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -959,9 +966,10 @@ namespace Vulkan
|
|||
return time;
|
||||
}
|
||||
|
||||
void Context::SetEnableGPUTiming(bool enabled)
|
||||
bool Context::SetEnableGPUTiming(bool enabled)
|
||||
{
|
||||
m_gpu_timing_enabled = enabled && m_gpu_timing_supported;
|
||||
return (enabled == m_gpu_timing_enabled);
|
||||
}
|
||||
|
||||
void Context::WaitForCommandBufferCompletion(u32 index)
|
||||
|
@ -1199,8 +1207,8 @@ namespace Vulkan
|
|||
// if we didn't write the timestamp at the start of the cmdbuffer (just enabled timing), the first TS will be zero
|
||||
if (timestamps[0] > 0)
|
||||
{
|
||||
const u64 ns_diff = (timestamps[1] - timestamps[0]) * static_cast<u64>(m_device_properties.limits.timestampPeriod);
|
||||
m_accumulated_gpu_time += static_cast<double>(ns_diff) / 1000000.0;
|
||||
const double ns_diff = (timestamps[1] - timestamps[0]) * static_cast<double>(m_device_properties.limits.timestampPeriod);
|
||||
m_accumulated_gpu_time += ns_diff / 1000000.0;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
|
@ -221,7 +221,7 @@ namespace Vulkan
|
|||
void WaitForGPUIdle();
|
||||
|
||||
float GetAndResetAccumulatedGPUTime();
|
||||
void SetEnableGPUTiming(bool enabled);
|
||||
bool SetEnableGPUTiming(bool enabled);
|
||||
|
||||
private:
|
||||
Context(VkInstance instance, VkPhysicalDevice physical_device);
|
||||
|
|
|
@ -47,7 +47,6 @@
|
|||
#include "QtUtils.h"
|
||||
|
||||
EmuThread* g_emu_thread = nullptr;
|
||||
WindowInfo g_gs_window_info;
|
||||
|
||||
static std::unique_ptr<HostDisplay> s_host_display;
|
||||
|
||||
|
@ -678,8 +677,6 @@ HostDisplay* EmuThread::acquireHostDisplay(HostDisplay::RenderAPI api)
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
g_gs_window_info = s_host_display->GetWindowInfo();
|
||||
|
||||
Console.WriteLn(Color_StrongGreen, "%s Graphics Driver Info:", HostDisplay::RenderAPIToString(s_host_display->GetRenderAPI()));
|
||||
Console.Indent().WriteLn(s_host_display->GetDriverInfo());
|
||||
|
||||
|
@ -696,8 +693,6 @@ void EmuThread::releaseHostDisplay()
|
|||
s_host_display->DestroyRenderDevice();
|
||||
}
|
||||
|
||||
g_gs_window_info = WindowInfo();
|
||||
|
||||
emit onDestroyDisplayRequested();
|
||||
|
||||
s_host_display.reset();
|
||||
|
|
|
@ -757,7 +757,7 @@ void D3D11HostDisplay::EndPresent()
|
|||
KickTimestampQuery();
|
||||
}
|
||||
|
||||
void D3D11HostDisplay::CreateTimestampQueries()
|
||||
bool D3D11HostDisplay::CreateTimestampQueries()
|
||||
{
|
||||
for (u32 i = 0; i < NUM_TIMESTAMP_QUERIES; i++)
|
||||
{
|
||||
|
@ -768,12 +768,13 @@ void D3D11HostDisplay::CreateTimestampQueries()
|
|||
if (FAILED(hr))
|
||||
{
|
||||
m_timestamp_queries = {};
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
KickTimestampQuery();
|
||||
return true;
|
||||
}
|
||||
|
||||
void D3D11HostDisplay::DestroyTimestampQueries()
|
||||
|
@ -835,7 +836,7 @@ void D3D11HostDisplay::PopTimestampQuery()
|
|||
|
||||
void D3D11HostDisplay::KickTimestampQuery()
|
||||
{
|
||||
if (m_timestamp_query_started)
|
||||
if (m_timestamp_query_started || !m_timestamp_queries[0][0])
|
||||
return;
|
||||
|
||||
m_context->Begin(m_timestamp_queries[m_write_timestamp_query][0].Get());
|
||||
|
@ -843,16 +844,21 @@ void D3D11HostDisplay::KickTimestampQuery()
|
|||
m_timestamp_query_started = true;
|
||||
}
|
||||
|
||||
void D3D11HostDisplay::SetGPUTimingEnabled(bool enabled)
|
||||
bool D3D11HostDisplay::SetGPUTimingEnabled(bool enabled)
|
||||
{
|
||||
if (m_gpu_timing_enabled == enabled)
|
||||
return;
|
||||
return true;
|
||||
|
||||
m_gpu_timing_enabled = enabled;
|
||||
if (m_gpu_timing_enabled)
|
||||
CreateTimestampQueries();
|
||||
{
|
||||
return CreateTimestampQueries();
|
||||
}
|
||||
else
|
||||
{
|
||||
DestroyTimestampQueries();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
float D3D11HostDisplay::GetAndResetAccumulatedGPUTime()
|
||||
|
|
|
@ -69,7 +69,7 @@ public:
|
|||
bool BeginPresent(bool frame_skip) override;
|
||||
void EndPresent() override;
|
||||
|
||||
void SetGPUTimingEnabled(bool enabled) override;
|
||||
bool SetGPUTimingEnabled(bool enabled) override;
|
||||
float GetAndResetAccumulatedGPUTime() override;
|
||||
|
||||
static AdapterAndModeList StaticGetAdapterAndModeList();
|
||||
|
@ -87,7 +87,7 @@ protected:
|
|||
bool CreateSwapChain(const DXGI_MODE_DESC* fullscreen_mode);
|
||||
bool CreateSwapChainRTV();
|
||||
|
||||
void CreateTimestampQueries();
|
||||
bool CreateTimestampQueries();
|
||||
void DestroyTimestampQueries();
|
||||
void PopTimestampQuery();
|
||||
void KickTimestampQuery();
|
||||
|
|
|
@ -645,9 +645,10 @@ void D3D12HostDisplay::EndPresent()
|
|||
m_swap_chain->Present(static_cast<UINT>(vsync), 0);
|
||||
}
|
||||
|
||||
void D3D12HostDisplay::SetGPUTimingEnabled(bool enabled)
|
||||
bool D3D12HostDisplay::SetGPUTimingEnabled(bool enabled)
|
||||
{
|
||||
g_d3d12_context->SetEnableGPUTiming(enabled);
|
||||
return true;
|
||||
}
|
||||
|
||||
float D3D12HostDisplay::GetAndResetAccumulatedGPUTime()
|
||||
|
|
|
@ -75,7 +75,7 @@ public:
|
|||
bool BeginPresent(bool frame_skip) override;
|
||||
void EndPresent() override;
|
||||
|
||||
void SetGPUTimingEnabled(bool enabled) override;
|
||||
bool SetGPUTimingEnabled(bool enabled) override;
|
||||
float GetAndResetAccumulatedGPUTime() override;
|
||||
|
||||
static AdapterAndModeList StaticGetAdapterAndModeList();
|
||||
|
|
|
@ -481,18 +481,21 @@ void OpenGLHostDisplay::KickTimestampQuery()
|
|||
m_timestamp_query_started = true;
|
||||
}
|
||||
|
||||
void OpenGLHostDisplay::SetGPUTimingEnabled(bool enabled)
|
||||
bool OpenGLHostDisplay::SetGPUTimingEnabled(bool enabled)
|
||||
{
|
||||
enabled &= (!m_gl_context->IsGLES() || GLAD_GL_EXT_disjoint_timer_query);
|
||||
|
||||
if (m_gpu_timing_enabled == enabled)
|
||||
return;
|
||||
return true;
|
||||
|
||||
if (enabled && m_gl_context->IsGLES() && !GLAD_GL_EXT_disjoint_timer_query)
|
||||
return false;
|
||||
|
||||
m_gpu_timing_enabled = enabled;
|
||||
if (m_gpu_timing_enabled)
|
||||
CreateTimestampQueries();
|
||||
else
|
||||
DestroyTimestampQueries();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
float OpenGLHostDisplay::GetAndResetAccumulatedGPUTime()
|
||||
|
|
|
@ -62,7 +62,7 @@ public:
|
|||
bool BeginPresent(bool frame_skip) override;
|
||||
void EndPresent() override;
|
||||
|
||||
void SetGPUTimingEnabled(bool enabled) override;
|
||||
bool SetGPUTimingEnabled(bool enabled) override;
|
||||
float GetAndResetAccumulatedGPUTime() override;
|
||||
|
||||
protected:
|
||||
|
|
|
@ -419,9 +419,9 @@ void VulkanHostDisplay::EndPresent()
|
|||
g_vulkan_context->MoveToNextCommandBuffer();
|
||||
}
|
||||
|
||||
void VulkanHostDisplay::SetGPUTimingEnabled(bool enabled)
|
||||
bool VulkanHostDisplay::SetGPUTimingEnabled(bool enabled)
|
||||
{
|
||||
g_vulkan_context->SetEnableGPUTiming(enabled);
|
||||
return g_vulkan_context->SetEnableGPUTiming(enabled);
|
||||
}
|
||||
|
||||
float VulkanHostDisplay::GetAndResetAccumulatedGPUTime()
|
||||
|
|
|
@ -51,7 +51,7 @@ public:
|
|||
bool BeginPresent(bool frame_skip) override;
|
||||
void EndPresent() override;
|
||||
|
||||
void SetGPUTimingEnabled(bool enabled) override;
|
||||
bool SetGPUTimingEnabled(bool enabled) override;
|
||||
float GetAndResetAccumulatedGPUTime() override;
|
||||
|
||||
static AdapterAndModeList StaticGetAdapterAndModeList(const WindowInfo* wi);
|
||||
|
|
|
@ -281,10 +281,10 @@ static bool DoGSOpen(GSRendererType renderer, u8* basemem)
|
|||
return false;
|
||||
}
|
||||
|
||||
g_gs_renderer->SetRegsMem(basemem);
|
||||
|
||||
display->SetVSync(EmuConfig.GetEffectiveVsyncMode());
|
||||
display->SetGPUTimingEnabled(GSConfig.OsdShowGPU);
|
||||
GSConfig.OsdShowGPU = EmuConfig.GS.OsdShowGPU && display->SetGPUTimingEnabled(true);
|
||||
|
||||
g_gs_renderer->SetRegsMem(basemem);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -861,7 +861,10 @@ void GSUpdateConfig(const Pcsx2Config::GSOptions& new_config)
|
|||
if (GSConfig.OsdShowGPU != old_config.OsdShowGPU)
|
||||
{
|
||||
if (HostDisplay* display = Host::GetHostDisplay(); display)
|
||||
display->SetGPUTimingEnabled(GSConfig.OsdShowGPU);
|
||||
{
|
||||
if (!display->SetGPUTimingEnabled(GSConfig.OsdShowGPU))
|
||||
GSConfig.OsdShowGPU = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -65,8 +65,9 @@ bool HostDisplay::GetHostRefreshRate(float* refresh_rate)
|
|||
return WindowInfo::QueryRefreshRateForWindow(m_window_info, refresh_rate);
|
||||
}
|
||||
|
||||
void HostDisplay::SetGPUTimingEnabled(bool enabled)
|
||||
bool HostDisplay::SetGPUTimingEnabled(bool enabled)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
float HostDisplay::GetAndResetAccumulatedGPUTime()
|
||||
|
|
|
@ -136,7 +136,7 @@ public:
|
|||
virtual bool GetHostRefreshRate(float* refresh_rate);
|
||||
|
||||
/// Enables/disables GPU frame timing.
|
||||
virtual void SetGPUTimingEnabled(bool enabled);
|
||||
virtual bool SetGPUTimingEnabled(bool enabled);
|
||||
|
||||
/// Returns the amount of GPU time utilized since the last time this method was called.
|
||||
virtual float GetAndResetAccumulatedGPUTime();
|
||||
|
|
Loading…
Reference in New Issue