RSX exception fix

VBlank thread management fix
This commit is contained in:
Nekotekina 2016-07-20 15:16:19 +03:00
parent 2af86e363c
commit ae634bb87e
5 changed files with 20 additions and 3 deletions

View File

@ -278,6 +278,7 @@ D3D12GSRender::~D3D12GSRender()
void D3D12GSRender::on_exit() void D3D12GSRender::on_exit()
{ {
return GSRender::on_exit();
} }
bool D3D12GSRender::do_method(u32 cmd, u32 arg) bool D3D12GSRender::do_method(u32 cmd, u32 arg)

View File

@ -611,6 +611,8 @@ void GLGSRender::on_exit()
m_attrib_ring_buffer.remove(); m_attrib_ring_buffer.remove();
m_uniform_ring_buffer.remove(); m_uniform_ring_buffer.remove();
m_index_ring_buffer.remove(); m_index_ring_buffer.remove();
return GSRender::on_exit();
} }
void nv4097_clear_surface(u32 arg, GLGSRender* renderer) void nv4097_clear_surface(u32 arg, GLGSRender* renderer)

View File

@ -62,7 +62,7 @@ namespace rsx
} }
catch (...) catch (...)
{ {
LOG_ERROR(RSX, "Cache file '%s' ignored", entry.name); LOG_WARNING(RSX, "Cache file '%s' ignored", entry.name);
continue; continue;
} }
@ -376,7 +376,7 @@ namespace rsx
last_flip_time = get_system_time() - 1000000; last_flip_time = get_system_time() - 1000000;
scope_thread vblank("VBlank Thread", [this]() m_vblank_thread = thread_ctrl::spawn("VBlank Thread", [this]()
{ {
const u64 start_time = get_system_time(); const u64 start_time = get_system_time();
@ -484,9 +484,18 @@ namespace rsx
} }
} }
void thread::on_exit()
{
if (m_vblank_thread)
{
m_vblank_thread->join();
m_vblank_thread.reset();
}
}
std::string thread::get_name() const std::string thread::get_name() const
{ {
return "rsx::thread"s; return "rsx::thread";
} }
void thread::fill_scale_offset_data(void *buffer, bool is_d3d) const void thread::fill_scale_offset_data(void *buffer, bool is_d3d) const

View File

@ -189,6 +189,8 @@ namespace rsx
class thread : public named_thread class thread : public named_thread
{ {
std::shared_ptr<thread_ctrl> m_vblank_thread;
protected: protected:
std::stack<u32> m_call_stack; std::stack<u32> m_call_stack;
@ -267,6 +269,7 @@ namespace rsx
virtual ~thread(); virtual ~thread();
virtual void on_task() override; virtual void on_task() override;
virtual void on_exit() override;
public: public:
virtual std::string get_name() const override; virtual std::string get_name() const override;

View File

@ -754,6 +754,8 @@ void VKGSRender::on_init_thread()
void VKGSRender::on_exit() void VKGSRender::on_exit()
{ {
m_texture_cache.destroy(); m_texture_cache.destroy();
return GSRender::on_exit();
} }
void VKGSRender::clear_surface(u32 mask) void VKGSRender::clear_surface(u32 mask)