diff --git a/rpcs3/Emu/RSX/GL/GLTextureCache.h b/rpcs3/Emu/RSX/GL/GLTextureCache.h
index 0d3d1e79f5..27a58113e7 100644
--- a/rpcs3/Emu/RSX/GL/GLTextureCache.h
+++ b/rpcs3/Emu/RSX/GL/GLTextureCache.h
@@ -14,6 +14,7 @@
#include "GLRenderTargets.h"
#include "../Common/TextureUtils.h"
#include "../../Memory/vm.h"
+#include "Utilities/Config.h"
class GLGSRender;
diff --git a/rpcs3/Emu/RSX/rsx_methods.cpp b/rpcs3/Emu/RSX/rsx_methods.cpp
index 0dc82c5659..dc7e8d3695 100644
--- a/rpcs3/Emu/RSX/rsx_methods.cpp
+++ b/rpcs3/Emu/RSX/rsx_methods.cpp
@@ -543,7 +543,7 @@ namespace rsx
}
}
- if (need_convert)
+ if (need_convert || need_clip)
{
//For now, only use this for actual scaled images, there are use cases that should not go through 3d engine, e.g program ucode transfer
//TODO: Figure out more instances where we can use this without problems
diff --git a/rpcs3/Emu/RSX/rsx_utils.cpp b/rpcs3/Emu/RSX/rsx_utils.cpp
index 2b231da3c8..bd1506076d 100644
--- a/rpcs3/Emu/RSX/rsx_utils.cpp
+++ b/rpcs3/Emu/RSX/rsx_utils.cpp
@@ -30,12 +30,15 @@ namespace rsx
void clip_image(u8 *dst, const u8 *src, int clip_x, int clip_y, int clip_w, int clip_h, int bpp, int src_pitch, int dst_pitch)
{
+ u8 *pixels_src = (u8*)src + clip_y * src_pitch + clip_x * bpp;
+ u8 *pixels_dst = dst;
+ const u32 row_length = clip_w * bpp;
+
for (int y = 0; y < clip_h; ++y)
{
- u8 *dst_row = dst + y * dst_pitch;
- const u8 *src_row = src + (y + clip_y) * src_pitch + clip_x * bpp;
-
- std::memmove(dst_row, src_row, clip_w * bpp);
+ std::memmove(pixels_dst, pixels_src, row_length);
+ pixels_src += src_pitch;
+ pixels_dst += dst_pitch;
}
}
diff --git a/rpcs3/GLGSRender.vcxproj b/rpcs3/GLGSRender.vcxproj
index 3c8811888b..85403b593e 100644
--- a/rpcs3/GLGSRender.vcxproj
+++ b/rpcs3/GLGSRender.vcxproj
@@ -69,7 +69,7 @@
..\rsx_program_decompiler\rsx_decompiler;%(AdditionalIncludeDirectories)
- Disabled
+ Full