mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-11 01:08:39 +12:00
gl: always clean up the heap when using legacy buffers
This commit is contained in:
parent
815f4aa63b
commit
5a08b690d5
1 changed files with 17 additions and 11 deletions
|
@ -202,6 +202,20 @@ void GLGSRender::end()
|
||||||
m_index_ring_buffer->reserve_storage_on_heap(16 * 1024);
|
m_index_ring_buffer->reserve_storage_on_heap(16 * 1024);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const auto do_heap_cleanup = [this]()
|
||||||
|
{
|
||||||
|
if (manually_flush_ring_buffers)
|
||||||
|
{
|
||||||
|
m_attrib_ring_buffer->unmap();
|
||||||
|
m_index_ring_buffer->unmap();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//DMA push; not needed with MAP_COHERENT
|
||||||
|
//glMemoryBarrier(GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
//Do vertex upload before RTT prep / texture lookups to give the driver time to push data
|
//Do vertex upload before RTT prep / texture lookups to give the driver time to push data
|
||||||
auto upload_info = set_vertex_buffer();
|
auto upload_info = set_vertex_buffer();
|
||||||
|
|
||||||
|
@ -381,6 +395,7 @@ void GLGSRender::end()
|
||||||
if (!load_program())
|
if (!load_program())
|
||||||
{
|
{
|
||||||
// Program is not ready, skip drawing this
|
// Program is not ready, skip drawing this
|
||||||
|
do_heap_cleanup();
|
||||||
std::this_thread::yield();
|
std::this_thread::yield();
|
||||||
rsx::thread::end();
|
rsx::thread::end();
|
||||||
return;
|
return;
|
||||||
|
@ -392,17 +407,6 @@ void GLGSRender::end()
|
||||||
std::chrono::time_point<steady_clock> program_stop = steady_clock::now();
|
std::chrono::time_point<steady_clock> program_stop = steady_clock::now();
|
||||||
m_begin_time += (u32)std::chrono::duration_cast<std::chrono::microseconds>(program_stop - program_start).count();
|
m_begin_time += (u32)std::chrono::duration_cast<std::chrono::microseconds>(program_stop - program_start).count();
|
||||||
|
|
||||||
if (manually_flush_ring_buffers)
|
|
||||||
{
|
|
||||||
m_attrib_ring_buffer->unmap();
|
|
||||||
m_index_ring_buffer->unmap();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//DMA push; not needed with MAP_COHERENT
|
|
||||||
//glMemoryBarrier(GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT);
|
|
||||||
}
|
|
||||||
|
|
||||||
//Bind textures and resolve external copy operations
|
//Bind textures and resolve external copy operations
|
||||||
std::chrono::time_point<steady_clock> textures_start = steady_clock::now();
|
std::chrono::time_point<steady_clock> textures_start = steady_clock::now();
|
||||||
void *unused = nullptr;
|
void *unused = nullptr;
|
||||||
|
@ -474,6 +478,8 @@ void GLGSRender::end()
|
||||||
|
|
||||||
std::chrono::time_point<steady_clock> draw_start = steady_clock::now();
|
std::chrono::time_point<steady_clock> draw_start = steady_clock::now();
|
||||||
|
|
||||||
|
do_heap_cleanup();
|
||||||
|
|
||||||
if (g_cfg.video.debug_output)
|
if (g_cfg.video.debug_output)
|
||||||
{
|
{
|
||||||
m_program->validate();
|
m_program->validate();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue