diff --git a/rpcs3/Emu/RSX/GL/GLProcTable.h b/rpcs3/Emu/RSX/GL/GLProcTable.h index 1a78810ddb..9cbdb66e42 100644 --- a/rpcs3/Emu/RSX/GL/GLProcTable.h +++ b/rpcs3/Emu/RSX/GL/GLProcTable.h @@ -236,6 +236,9 @@ OPENGL_PROC(PFNGLTEXTUREBARRIERPROC, TextureBarrier); OPENGL_PROC(PFNGLTEXTUREBARRIERNVPROC, TextureBarrierNV); //... +// Memory barrier +OPENGL_PROC(PFNGLMEMORYBARRIERPROC, MemoryBarrier); + // ARB_compute_shader OPENGL_PROC(PFNGLDISPATCHCOMPUTEPROC, DispatchCompute); diff --git a/rpcs3/Emu/RSX/GL/GLTexture.cpp b/rpcs3/Emu/RSX/GL/GLTexture.cpp index d1b082e26a..d8754adbcc 100644 --- a/rpcs3/Emu/RSX/GL/GLTexture.cpp +++ b/rpcs3/Emu/RSX/GL/GLTexture.cpp @@ -824,11 +824,13 @@ namespace gl if (src_transform) { src_transform->run(&g_typeless_transfer_buffer, job_length); + glMemoryBarrier(GL_SHADER_STORAGE_BARRIER_BIT | GL_PIXEL_BUFFER_BARRIER_BIT); } if (dst_transform) { dst_transform->run(&g_typeless_transfer_buffer, job_length); + glMemoryBarrier(GL_PIXEL_BUFFER_BARRIER_BIT); } // NOTE: glBindBufferRange also binds the buffer to the old-school target. @@ -841,7 +843,7 @@ namespace gl } g_typeless_transfer_buffer.bind(buffer::target::pixel_unpack); - dst->copy_from(nullptr, static_cast(pack_info.format), static_cast(pack_info.type), dst_region, unpack_settings); + dst->copy_from(nullptr, static_cast(unpack_info.format), static_cast(unpack_info.type), dst_region, unpack_settings); glBindBuffer(GL_PIXEL_UNPACK_BUFFER, GL_NONE); }