VideoBackendBase: Check Core state in PopulateBackendInfo
Remove the PopulateBackendInfoFromUI function, which had a single caller (GraphicsWindow::OnBackendChanged) and checked that the core wasn't running or starting before calling PopulateBackendInfo. Move the core state check into PopulateBackendInfo and have OnBackendChanged call that instead. This guarantees the check is performed by all callers of PopulateBackendInfo, preventing potential reintroduction of the crash fixed in 3d4ae63f if another call to PopulateBackendInfo is added. As of the previous commit the only other caller of PopulateBackendInfo is Core::Init shortly before s_state is set to Starting, so it will always pass the check and so maintain its current behavior.
This commit is contained in:
parent
2b82c34ea8
commit
0a1084fad5
|
@ -67,7 +67,7 @@ void GraphicsWindow::CreateMainLayout()
|
||||||
|
|
||||||
void GraphicsWindow::OnBackendChanged(const QString& backend_name)
|
void GraphicsWindow::OnBackendChanged(const QString& backend_name)
|
||||||
{
|
{
|
||||||
VideoBackendBase::PopulateBackendInfoFromUI(m_main_window->GetWindowSystemInfo());
|
VideoBackendBase::PopulateBackendInfo(m_main_window->GetWindowSystemInfo());
|
||||||
|
|
||||||
setWindowTitle(
|
setWindowTitle(
|
||||||
tr("%1 Graphics Configuration").arg(tr(g_video_backend->GetDisplayName().c_str())));
|
tr("%1 Graphics Configuration").arg(tr(g_video_backend->GetDisplayName().c_str())));
|
||||||
|
|
|
@ -284,6 +284,11 @@ void VideoBackendBase::ActivateBackend(const std::string& name)
|
||||||
|
|
||||||
void VideoBackendBase::PopulateBackendInfo(const WindowSystemInfo& wsi)
|
void VideoBackendBase::PopulateBackendInfo(const WindowSystemInfo& wsi)
|
||||||
{
|
{
|
||||||
|
// If the core is running, the backend info will have been populated already. If we did it here,
|
||||||
|
// the UI thread could race with the GPU thread.
|
||||||
|
if (Core::IsRunningOrStarting(Core::System::GetInstance()))
|
||||||
|
return;
|
||||||
|
|
||||||
g_Config.Refresh();
|
g_Config.Refresh();
|
||||||
// Reset backend_info so if the backend forgets to initialize something it doesn't end up using
|
// Reset backend_info so if the backend forgets to initialize something it doesn't end up using
|
||||||
// a value from the previously used renderer
|
// a value from the previously used renderer
|
||||||
|
@ -296,14 +301,6 @@ void VideoBackendBase::PopulateBackendInfo(const WindowSystemInfo& wsi)
|
||||||
g_Config.VerifyValidity();
|
g_Config.VerifyValidity();
|
||||||
}
|
}
|
||||||
|
|
||||||
void VideoBackendBase::PopulateBackendInfoFromUI(const WindowSystemInfo& wsi)
|
|
||||||
{
|
|
||||||
// If the core is running, the backend info will have been populated already.
|
|
||||||
// If we did it here, the UI thread can race with the with the GPU thread.
|
|
||||||
if (!Core::IsRunningOrStarting(Core::System::GetInstance()))
|
|
||||||
PopulateBackendInfo(wsi);
|
|
||||||
}
|
|
||||||
|
|
||||||
void VideoBackendBase::DoState(PointerWrap& p)
|
void VideoBackendBase::DoState(PointerWrap& p)
|
||||||
{
|
{
|
||||||
auto& system = Core::System::GetInstance();
|
auto& system = Core::System::GetInstance();
|
||||||
|
|
|
@ -70,8 +70,6 @@ public:
|
||||||
|
|
||||||
// Fills the backend_info fields with the capabilities of the selected backend/device.
|
// Fills the backend_info fields with the capabilities of the selected backend/device.
|
||||||
static void PopulateBackendInfo(const WindowSystemInfo& wsi);
|
static void PopulateBackendInfo(const WindowSystemInfo& wsi);
|
||||||
// Called by the UI thread when the graphics config is opened.
|
|
||||||
static void PopulateBackendInfoFromUI(const WindowSystemInfo& wsi);
|
|
||||||
|
|
||||||
// Wrapper function which pushes the event to the GPU thread.
|
// Wrapper function which pushes the event to the GPU thread.
|
||||||
void DoState(PointerWrap& p);
|
void DoState(PointerWrap& p);
|
||||||
|
|
Loading…
Reference in New Issue