diff --git a/rpcs3/Emu/RSX/GL/GLTexture.cpp b/rpcs3/Emu/RSX/GL/GLTexture.cpp index e0caf676d3..86b7cab844 100644 --- a/rpcs3/Emu/RSX/GL/GLTexture.cpp +++ b/rpcs3/Emu/RSX/GL/GLTexture.cpp @@ -1103,7 +1103,7 @@ namespace gl u32 scratch_offset = 0; const u64 min_storage_requirement = src_mem.image_size_in_bytes + dst_mem.image_size_in_bytes; - const u64 min_required_buffer_size = std::max(utils::align(min_storage_requirement, 0x100000) * 4, 16 * 0x100000); + const u64 min_required_buffer_size = utils::align(min_storage_requirement, 256); if (g_typeless_transfer_buffer.size() >= min_required_buffer_size) [[ likely ]] { @@ -1111,7 +1111,8 @@ namespace gl } else { - g_typeless_transfer_buffer.create(gl::buffer::target::ssbo, min_required_buffer_size); + const auto new_size = std::max(min_required_buffer_size, g_typeless_transfer_buffer.size() + (64 * 0x100000)); + g_typeless_transfer_buffer.create(gl::buffer::target::ssbo, new_size); } void* data_ptr = copy_image_to_buffer(cmd, pack_info, src, &g_typeless_transfer_buffer.get(), scratch_offset, 0, src_region, &src_mem); diff --git a/rpcs3/Emu/RSX/GL/GLTextureCache.cpp b/rpcs3/Emu/RSX/GL/GLTextureCache.cpp index 72258cf808..6aff3fa0d7 100644 --- a/rpcs3/Emu/RSX/GL/GLTextureCache.cpp +++ b/rpcs3/Emu/RSX/GL/GLTextureCache.cpp @@ -68,6 +68,7 @@ namespace gl switch (type) { + case gl::texture::type::uint_8_8_8_8_rev: case gl::texture::type::uint_8_8_8_8: case gl::texture::type::uint_24_8: rsx::convert_linear_swizzle(tmp_data.data(), dst, width, height, rsx_pitch); diff --git a/rpcs3/Emu/RSX/GL/glutils/image.h b/rpcs3/Emu/RSX/GL/glutils/image.h index a0164e9f84..9a0f0bfff7 100644 --- a/rpcs3/Emu/RSX/GL/glutils/image.h +++ b/rpcs3/Emu/RSX/GL/glutils/image.h @@ -44,7 +44,8 @@ namespace gl enum remap_constants : u32 { - GL_REMAP_IDENTITY = 0xCAFEBABE + GL_REMAP_IDENTITY = 0xCAFEBABE, + GL_REMAP_BGRA = 0x0000AA6C }; struct subresource_range diff --git a/rpcs3/Emu/RSX/GL/glutils/ring_buffer.cpp b/rpcs3/Emu/RSX/GL/glutils/ring_buffer.cpp index f7d02882c3..22ea9d7d73 100644 --- a/rpcs3/Emu/RSX/GL/glutils/ring_buffer.cpp +++ b/rpcs3/Emu/RSX/GL/glutils/ring_buffer.cpp @@ -285,7 +285,7 @@ namespace gl { if (barrier_.range.overlaps(range)) { - barrier_.signal.wait_for_signal(); + barrier_.signal.server_wait_sync(); return true; }