From 2ac47548b0788ea0078326efcddaa59f1b5dc276 Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Thu, 12 Nov 2015 18:13:28 +0100 Subject: [PATCH] rsx: Set registers individually Not all games set registers up to the third subcomponent. Fixes SH 3 HD textures. --- rpcs3/Emu/RSX/RSXThread.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/rpcs3/Emu/RSX/RSXThread.cpp b/rpcs3/Emu/RSX/RSXThread.cpp index 6a43a2be51..f0a4cd6ef1 100644 --- a/rpcs3/Emu/RSX/RSXThread.cpp +++ b/rpcs3/Emu/RSX/RSXThread.cpp @@ -200,12 +200,15 @@ namespace rsx { force_inline static void impl(thread* rsxthr, u32 arg) { - u32& load = method_registers[NV4097_SET_TRANSFORM_CONSTANT_LOAD]; + u32 load = method_registers[NV4097_SET_TRANSFORM_CONSTANT_LOAD]; static const size_t count = 4; static const size_t size = count * sizeof(f32); - memcpy(rsxthr->transform_constants[load++].rgba, method_registers + NV4097_SET_TRANSFORM_CONSTANT + index * count, size); + size_t reg = index / 4; + size_t subreg = index % 4; + + memcpy(rsxthr->transform_constants[load + reg].rgba + subreg, method_registers + NV4097_SET_TRANSFORM_CONSTANT + reg * count + subreg, sizeof(f32)); } }; @@ -729,7 +732,7 @@ namespace rsx bind_range(); bind_range(); bind_range(); - bind_range(); + bind_range(); bind_range(); bind_cpu_only(); bind_cpu_only();