From cee53fcecf7920c9904c81dcebfd0c8493c5a18c Mon Sep 17 00:00:00 2001 From: kd-11 Date: Mon, 27 Feb 2017 22:39:22 +0300 Subject: [PATCH] gl: Ensure correct sized pbo is created upon reset --- rpcs3/Emu/RSX/GL/GLTextureCache.h | 33 +++++++++++++++++++------------ 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/rpcs3/Emu/RSX/GL/GLTextureCache.h b/rpcs3/Emu/RSX/GL/GLTextureCache.h index 9c8c61db4c..401fb3d9d9 100644 --- a/rpcs3/Emu/RSX/GL/GLTextureCache.h +++ b/rpcs3/Emu/RSX/GL/GLTextureCache.h @@ -228,20 +228,15 @@ namespace gl } } - public: - - void reset(u32 base, u32 size) - { - rsx::buffered_section::reset(base, size); - - flushed = false; - copied = false; - - source_texture = 0; - } - void init_buffer() { + if (pbo_id) + { + glDeleteBuffers(1, &pbo_id); + pbo_id = 0; + pbo_size = 0; + } + glGenBuffers(1, &pbo_id); glBindBuffer(GL_PIXEL_PACK_BUFFER, pbo_id); @@ -250,6 +245,19 @@ namespace gl pbo_size = locked_address_range; } + public: + + void reset(u32 base, u32 size) + { + rsx::buffered_section::reset(base, size); + init_buffer(); + + flushed = false; + copied = false; + + source_texture = 0; + } + void set_dimensions(u32 width, u32 height, u32 pitch) { current_width = width; @@ -502,7 +510,6 @@ namespace gl cached_rtt_section section; section.reset(base, size); section.set_dirty(true); - section.init_buffer(); section.protect(0, vm::page_readable | vm::page_writable); m_rtt_cache.push_back(section);