Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge pull request #11582 from Pokechu22/software-crash-on-startup
Software: Fix regressions from "Kill Renderer"
  • Loading branch information
lioncash committed Mar 2, 2023
2 parents ab2f8d3 + 9cdc0ac commit 6361586
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 4 deletions.
1 change: 1 addition & 0 deletions Source/Core/VideoBackends/Null/NullGfx.h
Expand Up @@ -34,6 +34,7 @@ class NullGfx final : public AbstractGfx
std::unique_ptr<AbstractPipeline> CreatePipeline(const AbstractPipelineConfig& config,
const void* cache_data = nullptr,
size_t cache_data_length = 0) override;
SurfaceInfo GetSurfaceInfo() const override { return {}; }
};

class NullRenderer final : public Renderer
Expand Down
7 changes: 7 additions & 0 deletions Source/Core/VideoBackends/Software/SWGfx.cpp
Expand Up @@ -128,4 +128,11 @@ void SWGfx::SetScissorRect(const MathUtil::Rectangle<int>& rc)
Rasterizer::ScissorChanged();
}

SurfaceInfo SWGfx::GetSurfaceInfo() const
{
GLContext* context = m_window->GetContext();
return {std::max(context->GetBackBufferWidth(), 1u), std::max(context->GetBackBufferHeight(), 1u),
1.0f, AbstractTextureFormat::RGBA8};
}

} // namespace SW
2 changes: 2 additions & 0 deletions Source/Core/VideoBackends/Software/SWGfx.h
Expand Up @@ -49,6 +49,8 @@ class SWGfx final : public AbstractGfx
void ClearRegion(const MathUtil::Rectangle<int>& target_rc, bool colorEnable, bool alphaEnable,
bool zEnable, u32 color, u32 z) override;

SurfaceInfo GetSurfaceInfo() const override;

private:
std::unique_ptr<SWOGLWindow> m_window;
};
Expand Down
2 changes: 1 addition & 1 deletion Source/Core/VideoCommon/AbstractGfx.h
Expand Up @@ -161,7 +161,7 @@ class AbstractGfx
bool UseGeometryShaderForUI() const;

// Returns info about the main surface (aka backbuffer)
virtual SurfaceInfo GetSurfaceInfo() const { return {}; }
virtual SurfaceInfo GetSurfaceInfo() const = 0;

protected:
AbstractFramebuffer* m_current_framebuffer = nullptr;
Expand Down
13 changes: 10 additions & 3 deletions Source/Core/VideoCommon/Present.cpp
Expand Up @@ -521,9 +521,16 @@ void Presenter::Present()

if (!g_gfx->SupportsUtilityDrawing())
{
// Video Software doesn't support Drawing a UI or doing post-processing
// So just Show the XFB
g_gfx->ShowImage(m_xfb_entry->texture.get(), m_xfb_rect);
// Video Software doesn't support drawing a UI or doing post-processing
// So just show the XFB
if (m_xfb_entry)
{
g_gfx->ShowImage(m_xfb_entry->texture.get(), m_xfb_rect);

// Update the window size based on the frame that was just rendered.
// Due to depending on guest state, we need to call this every frame.
SetWindowSize(m_xfb_rect.GetWidth(), m_xfb_rect.GetHeight());
}
return;
}

Expand Down

0 comments on commit 6361586

Please sign in to comment.