From 34692ab826abc8f8faa61bdb2280b742424528f1 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Sat, 7 Dec 2013 15:14:29 -0500 Subject: Remove unnecessary Src/ folders --- Source/Core/VideoBackends/Software/BPMemLoader.cpp | 188 +++++++++++++++++++++ 1 file changed, 188 insertions(+) create mode 100644 Source/Core/VideoBackends/Software/BPMemLoader.cpp (limited to 'Source/Core/VideoBackends/Software/BPMemLoader.cpp') diff --git a/Source/Core/VideoBackends/Software/BPMemLoader.cpp b/Source/Core/VideoBackends/Software/BPMemLoader.cpp new file mode 100644 index 0000000000..f6f810791d --- /dev/null +++ b/Source/Core/VideoBackends/Software/BPMemLoader.cpp @@ -0,0 +1,188 @@ +// Copyright 2013 Dolphin Emulator Project +// Licensed under GPLv2 +// Refer to the license.txt file included. + +#include "VideoCommon.h" +#include "TextureDecoder.h" + +#include "BPMemLoader.h" +#include "EfbCopy.h" +#include "Rasterizer.h" +#include "SWPixelEngine.h" +#include "Tev.h" +#include "HW/Memmap.h" +#include "Core.h" + + +void InitBPMemory() +{ + memset(&bpmem, 0, sizeof(bpmem)); + bpmem.bpMask = 0xFFFFFF; +} + +void SWLoadBPReg(u32 value) +{ + //handle the mask register + int address = value >> 24; + int oldval = ((u32*)&bpmem)[address]; + int newval = (oldval & ~bpmem.bpMask) | (value & bpmem.bpMask); + + ((u32*)&bpmem)[address] = newval; + + //reset the mask register + if (address != 0xFE) + bpmem.bpMask = 0xFFFFFF; + + SWBPWritten(address, newval); +} + +void SWBPWritten(int address, int newvalue) +{ + switch (address) + { + case BPMEM_SCISSORTL: + case BPMEM_SCISSORBR: + case BPMEM_SCISSOROFFSET: + Rasterizer::SetScissor(); + break; + case BPMEM_SETDRAWDONE: // This is called when the game is done drawing (eg: like in DX: Begin(); Draw(); End();) + switch (bpmem.drawdone & 0xFF) + { + case 0x02: + SWPixelEngine::SetFinish(); // may generate interrupt + DEBUG_LOG(VIDEO, "GXSetDrawDone SetPEFinish (value: 0x%02X)", (bpmem.drawdone & 0xFFFF)); + break; + + default: + WARN_LOG(VIDEO, "GXSetDrawDone ??? (value 0x%02X)", (bpmem.drawdone & 0xFFFF)); + break; + } + break; + case BPMEM_PE_TOKEN_ID: // Pixel Engine Token ID + DEBUG_LOG(VIDEO, "SetPEToken 0x%04x", (bpmem.petoken & 0xFFFF)); + SWPixelEngine::SetToken(static_cast(bpmem.petokenint & 0xFFFF), false); + break; + case BPMEM_PE_TOKEN_INT_ID: // Pixel Engine Interrupt Token ID + DEBUG_LOG(VIDEO, "SetPEToken + INT 0x%04x", (bpmem.petokenint & 0xFFFF)); + SWPixelEngine::SetToken(static_cast(bpmem.petokenint & 0xFFFF), true); + break; + case BPMEM_TRIGGER_EFB_COPY: + EfbCopy::CopyEfb(); + break; + case BPMEM_CLEARBBOX1: + SWPixelEngine::pereg.boxRight = newvalue >> 10; + SWPixelEngine::pereg.boxLeft = newvalue & 0x3ff; + break; + case BPMEM_CLEARBBOX2: + SWPixelEngine::pereg.boxBottom = newvalue >> 10; + SWPixelEngine::pereg.boxTop = newvalue & 0x3ff; + break; + case BPMEM_CLEAR_PIXEL_PERF: + // TODO: I didn't test if the value written to this register affects the amount of cleared registers + SWPixelEngine::pereg.perfZcompInputZcomplocLo = 0; + SWPixelEngine::pereg.perfZcompInputZcomplocHi = 0; + SWPixelEngine::pereg.perfZcompOutputZcomplocLo = 0; + SWPixelEngine::pereg.perfZcompOutputZcomplocHi = 0; + SWPixelEngine::pereg.perfZcompInputLo = 0; + SWPixelEngine::pereg.perfZcompInputHi = 0; + SWPixelEngine::pereg.perfZcompOutputLo = 0; + SWPixelEngine::pereg.perfZcompOutputHi = 0; + SWPixelEngine::pereg.perfBlendInputLo = 0; + SWPixelEngine::pereg.perfBlendInputHi = 0; + SWPixelEngine::pereg.perfEfbCopyClocksLo = 0; + SWPixelEngine::pereg.perfEfbCopyClocksHi = 0; + break; + case BPMEM_LOADTLUT0: // This one updates bpmem.tlutXferSrc, no need to do anything here. + break; + case BPMEM_LOADTLUT1: // Load a Texture Look Up Table + { + u32 tlutTMemAddr = (newvalue & 0x3FF) << 9; + u32 tlutXferCount = (newvalue & 0x1FFC00) >> 5; + + u8 *ptr = 0; + + // TODO - figure out a cleaner way. + if (Core::g_CoreStartupParameter.bWii) + ptr = Memory::GetPointer(bpmem.tmem_config.tlut_src << 5); + else + ptr = Memory::GetPointer((bpmem.tmem_config.tlut_src & 0xFFFFF) << 5); + + if (ptr) + memcpy_gc(texMem + tlutTMemAddr, ptr, tlutXferCount); + else + PanicAlert("Invalid palette pointer %08x %08x %08x", bpmem.tmem_config.tlut_src, bpmem.tmem_config.tlut_src << 5, (bpmem.tmem_config.tlut_src & 0xFFFFF)<< 5); + break; + } + + case BPMEM_PRELOAD_MODE: + if (newvalue != 0) + { + // TODO: Not quite sure if this is completely correct (likely not) + // NOTE: libogc's implementation of GX_PreloadEntireTexture seems flawed, so it's not necessarily a good reference for RE'ing this feature. + + BPS_TmemConfig& tmem_cfg = bpmem.tmem_config; + u8* src_ptr = Memory::GetPointer(tmem_cfg.preload_addr << 5); // TODO: Should we add mask here on GC? + u32 size = tmem_cfg.preload_tile_info.count * TMEM_LINE_SIZE; + u32 tmem_addr_even = tmem_cfg.preload_tmem_even * TMEM_LINE_SIZE; + + if (tmem_cfg.preload_tile_info.type != 3) + { + if (tmem_addr_even + size > TMEM_SIZE) + size = TMEM_SIZE - tmem_addr_even; + + memcpy(texMem + tmem_addr_even, src_ptr, size); + } + else // RGBA8 tiles (and CI14, but that might just be stupid libogc!) + { + // AR and GB tiles are stored in separate TMEM banks => can't use a single memcpy for everything + u32 tmem_addr_odd = tmem_cfg.preload_tmem_odd * TMEM_LINE_SIZE; + + for (unsigned int i = 0; i < tmem_cfg.preload_tile_info.count; ++i) + { + if (tmem_addr_even + TMEM_LINE_SIZE > TMEM_SIZE || + tmem_addr_odd + TMEM_LINE_SIZE > TMEM_SIZE) + break; + + memcpy(texMem + tmem_addr_even, src_ptr, TMEM_LINE_SIZE); + memcpy(texMem + tmem_addr_odd, src_ptr + TMEM_LINE_SIZE, TMEM_LINE_SIZE); + tmem_addr_even += TMEM_LINE_SIZE; + tmem_addr_odd += TMEM_LINE_SIZE; + src_ptr += TMEM_LINE_SIZE * 2; + } + } + } + break; + + case BPMEM_TEV_REGISTER_L: // Reg 1 + case BPMEM_TEV_REGISTER_L+2: // Reg 2 + case BPMEM_TEV_REGISTER_L+4: // Reg 3 + case BPMEM_TEV_REGISTER_L+6: // Reg 4 + { + int regNum = (address >> 1 ) & 0x3; + ColReg& reg = bpmem.tevregs[regNum].low; + bool konst = reg.type; + + Rasterizer::SetTevReg(regNum, Tev::ALP_C, konst, reg.b); // A + Rasterizer::SetTevReg(regNum, Tev::RED_C, konst, reg.a); // R + + break; + } + + case BPMEM_TEV_REGISTER_H: // Reg 1 + case BPMEM_TEV_REGISTER_H+2: // Reg 2 + case BPMEM_TEV_REGISTER_H+4: // Reg 3 + case BPMEM_TEV_REGISTER_H+6: // Reg 4 + { + int regNum = (address >> 1 ) & 0x3; + ColReg& reg = bpmem.tevregs[regNum].high; + bool konst = reg.type; + + Rasterizer::SetTevReg(regNum, Tev::GRN_C, konst, reg.b); // G + Rasterizer::SetTevReg(regNum, Tev::BLU_C, konst, reg.a); // B + + break; + } + + } +} + -- cgit v1.2.3 From 3fd87a7636ff434118a5d7f7334550be8db55c0b Mon Sep 17 00:00:00 2001 From: Lioncash Date: Sun, 16 Feb 2014 23:51:41 -0500 Subject: Second and final pass of clearing out tabs. --- Source/Core/VideoBackends/Software/BPMemLoader.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Source/Core/VideoBackends/Software/BPMemLoader.cpp') diff --git a/Source/Core/VideoBackends/Software/BPMemLoader.cpp b/Source/Core/VideoBackends/Software/BPMemLoader.cpp index f6f810791d..946e792b3f 100644 --- a/Source/Core/VideoBackends/Software/BPMemLoader.cpp +++ b/Source/Core/VideoBackends/Software/BPMemLoader.cpp @@ -151,7 +151,7 @@ void SWBPWritten(int address, int newvalue) } } } - break; + break; case BPMEM_TEV_REGISTER_L: // Reg 1 case BPMEM_TEV_REGISTER_L+2: // Reg 2 -- cgit v1.2.3 From 2afe2152712981e21d6bda6f029292ed2b1cf91e Mon Sep 17 00:00:00 2001 From: Lioncash Date: Mon, 17 Feb 2014 05:18:15 -0500 Subject: Convert all includes to relative paths. --- Source/Core/VideoBackends/Software/BPMemLoader.cpp | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) (limited to 'Source/Core/VideoBackends/Software/BPMemLoader.cpp') diff --git a/Source/Core/VideoBackends/Software/BPMemLoader.cpp b/Source/Core/VideoBackends/Software/BPMemLoader.cpp index 946e792b3f..b62776fa64 100644 --- a/Source/Core/VideoBackends/Software/BPMemLoader.cpp +++ b/Source/Core/VideoBackends/Software/BPMemLoader.cpp @@ -2,16 +2,17 @@ // Licensed under GPLv2 // Refer to the license.txt file included. -#include "VideoCommon.h" -#include "TextureDecoder.h" - -#include "BPMemLoader.h" -#include "EfbCopy.h" -#include "Rasterizer.h" -#include "SWPixelEngine.h" -#include "Tev.h" -#include "HW/Memmap.h" -#include "Core.h" +#include "Core/Core.h" +#include "Core/HW/Memmap.h" + +#include "VideoBackends/Software/BPMemLoader.h" +#include "VideoBackends/Software/EfbCopy.h" +#include "VideoBackends/Software/Rasterizer.h" +#include "VideoBackends/Software/SWPixelEngine.h" +#include "VideoBackends/Software/Tev.h" + +#include "VideoCommon/VideoCommon.h" +#include "VideoCommon/TextureDecoder.h" void InitBPMemory() -- cgit v1.2.3 From 425f9dcd5155614e66fab635819ef12ee390dc7b Mon Sep 17 00:00:00 2001 From: Pierre Bourdon Date: Wed, 19 Feb 2014 12:14:09 +0100 Subject: Fix more header sorting issues in VideoBackends/ (now check-includes clean). --- Source/Core/VideoBackends/Software/BPMemLoader.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Source/Core/VideoBackends/Software/BPMemLoader.cpp') diff --git a/Source/Core/VideoBackends/Software/BPMemLoader.cpp b/Source/Core/VideoBackends/Software/BPMemLoader.cpp index b62776fa64..738b909fc0 100644 --- a/Source/Core/VideoBackends/Software/BPMemLoader.cpp +++ b/Source/Core/VideoBackends/Software/BPMemLoader.cpp @@ -11,8 +11,8 @@ #include "VideoBackends/Software/SWPixelEngine.h" #include "VideoBackends/Software/Tev.h" -#include "VideoCommon/VideoCommon.h" #include "VideoCommon/TextureDecoder.h" +#include "VideoCommon/VideoCommon.h" void InitBPMemory() -- cgit v1.2.3 From d802d392811be44d34ae9cd23f616db93e54c50f Mon Sep 17 00:00:00 2001 From: Tillmann Karras Date: Sun, 9 Mar 2014 21:14:26 +0100 Subject: clang-modernize -use-nullptr and s/\bNULL\b/nullptr/g for *.cpp/h/mm files not compiled on my machine --- Source/Core/VideoBackends/Software/BPMemLoader.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Source/Core/VideoBackends/Software/BPMemLoader.cpp') diff --git a/Source/Core/VideoBackends/Software/BPMemLoader.cpp b/Source/Core/VideoBackends/Software/BPMemLoader.cpp index 738b909fc0..7672e233ac 100644 --- a/Source/Core/VideoBackends/Software/BPMemLoader.cpp +++ b/Source/Core/VideoBackends/Software/BPMemLoader.cpp @@ -100,7 +100,7 @@ void SWBPWritten(int address, int newvalue) u32 tlutTMemAddr = (newvalue & 0x3FF) << 9; u32 tlutXferCount = (newvalue & 0x1FFC00) >> 5; - u8 *ptr = 0; + u8 *ptr = nullptr; // TODO - figure out a cleaner way. if (Core::g_CoreStartupParameter.bWii) -- cgit v1.2.3 From 77a7bab5ae86871d756522affa3e4e899999da4c Mon Sep 17 00:00:00 2001 From: Tony Wasserka Date: Mon, 10 Mar 2014 16:15:40 +0100 Subject: BPMemory: Use the new BitField class in two selected structures. --- Source/Core/VideoBackends/Software/BPMemLoader.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'Source/Core/VideoBackends/Software/BPMemLoader.cpp') diff --git a/Source/Core/VideoBackends/Software/BPMemLoader.cpp b/Source/Core/VideoBackends/Software/BPMemLoader.cpp index 7672e233ac..b81f2b340e 100644 --- a/Source/Core/VideoBackends/Software/BPMemLoader.cpp +++ b/Source/Core/VideoBackends/Software/BPMemLoader.cpp @@ -160,11 +160,11 @@ void SWBPWritten(int address, int newvalue) case BPMEM_TEV_REGISTER_L+6: // Reg 4 { int regNum = (address >> 1 ) & 0x3; - ColReg& reg = bpmem.tevregs[regNum].low; - bool konst = reg.type; + TevReg& reg = bpmem.tevregs[regNum]; + bool konst = reg.type_ra; - Rasterizer::SetTevReg(regNum, Tev::ALP_C, konst, reg.b); // A - Rasterizer::SetTevReg(regNum, Tev::RED_C, konst, reg.a); // R + Rasterizer::SetTevReg(regNum, Tev::ALP_C, konst, reg.alpha); + Rasterizer::SetTevReg(regNum, Tev::RED_C, konst, reg.red); break; } @@ -175,11 +175,11 @@ void SWBPWritten(int address, int newvalue) case BPMEM_TEV_REGISTER_H+6: // Reg 4 { int regNum = (address >> 1 ) & 0x3; - ColReg& reg = bpmem.tevregs[regNum].high; - bool konst = reg.type; + TevReg& reg = bpmem.tevregs[regNum]; + bool konst = reg.type_bg; - Rasterizer::SetTevReg(regNum, Tev::GRN_C, konst, reg.b); // G - Rasterizer::SetTevReg(regNum, Tev::BLU_C, konst, reg.a); // B + Rasterizer::SetTevReg(regNum, Tev::GRN_C, konst, reg.green); + Rasterizer::SetTevReg(regNum, Tev::BLU_C, konst, reg.blue); break; } -- cgit v1.2.3 From 0661efea8456b32d88fa13103f8ed68509f2b69f Mon Sep 17 00:00:00 2001 From: magumagu Date: Fri, 28 Mar 2014 19:22:15 -0700 Subject: Software backend: Delete forked PixelEngine. Mostly just zapping a bunch of duplicated code; the only interesting thing going on here is the changes to the performance counter implementation. --- Source/Core/VideoBackends/Software/BPMemLoader.cpp | 30 ++++++++-------------- 1 file changed, 10 insertions(+), 20 deletions(-) (limited to 'Source/Core/VideoBackends/Software/BPMemLoader.cpp') diff --git a/Source/Core/VideoBackends/Software/BPMemLoader.cpp b/Source/Core/VideoBackends/Software/BPMemLoader.cpp index b81f2b340e..d6566f23c5 100644 --- a/Source/Core/VideoBackends/Software/BPMemLoader.cpp +++ b/Source/Core/VideoBackends/Software/BPMemLoader.cpp @@ -7,10 +7,11 @@ #include "VideoBackends/Software/BPMemLoader.h" #include "VideoBackends/Software/EfbCopy.h" +#include "VideoBackends/Software/EfbInterface.h" #include "VideoBackends/Software/Rasterizer.h" -#include "VideoBackends/Software/SWPixelEngine.h" #include "VideoBackends/Software/Tev.h" +#include "VideoCommon/PixelEngine.h" #include "VideoCommon/TextureDecoder.h" #include "VideoCommon/VideoCommon.h" @@ -50,7 +51,7 @@ void SWBPWritten(int address, int newvalue) switch (bpmem.drawdone & 0xFF) { case 0x02: - SWPixelEngine::SetFinish(); // may generate interrupt + PixelEngine::SetFinish(); // may generate interrupt DEBUG_LOG(VIDEO, "GXSetDrawDone SetPEFinish (value: 0x%02X)", (bpmem.drawdone & 0xFFFF)); break; @@ -61,37 +62,26 @@ void SWBPWritten(int address, int newvalue) break; case BPMEM_PE_TOKEN_ID: // Pixel Engine Token ID DEBUG_LOG(VIDEO, "SetPEToken 0x%04x", (bpmem.petoken & 0xFFFF)); - SWPixelEngine::SetToken(static_cast(bpmem.petokenint & 0xFFFF), false); + PixelEngine::SetToken(static_cast(bpmem.petokenint & 0xFFFF), false); break; case BPMEM_PE_TOKEN_INT_ID: // Pixel Engine Interrupt Token ID DEBUG_LOG(VIDEO, "SetPEToken + INT 0x%04x", (bpmem.petokenint & 0xFFFF)); - SWPixelEngine::SetToken(static_cast(bpmem.petokenint & 0xFFFF), true); + PixelEngine::SetToken(static_cast(bpmem.petokenint & 0xFFFF), true); break; case BPMEM_TRIGGER_EFB_COPY: EfbCopy::CopyEfb(); break; case BPMEM_CLEARBBOX1: - SWPixelEngine::pereg.boxRight = newvalue >> 10; - SWPixelEngine::pereg.boxLeft = newvalue & 0x3ff; + PixelEngine::bbox[0] = newvalue >> 10; + PixelEngine::bbox[1] = newvalue & 0x3ff; break; case BPMEM_CLEARBBOX2: - SWPixelEngine::pereg.boxBottom = newvalue >> 10; - SWPixelEngine::pereg.boxTop = newvalue & 0x3ff; + PixelEngine::bbox[2] = newvalue >> 10; + PixelEngine::bbox[3] = newvalue & 0x3ff; break; case BPMEM_CLEAR_PIXEL_PERF: // TODO: I didn't test if the value written to this register affects the amount of cleared registers - SWPixelEngine::pereg.perfZcompInputZcomplocLo = 0; - SWPixelEngine::pereg.perfZcompInputZcomplocHi = 0; - SWPixelEngine::pereg.perfZcompOutputZcomplocLo = 0; - SWPixelEngine::pereg.perfZcompOutputZcomplocHi = 0; - SWPixelEngine::pereg.perfZcompInputLo = 0; - SWPixelEngine::pereg.perfZcompInputHi = 0; - SWPixelEngine::pereg.perfZcompOutputLo = 0; - SWPixelEngine::pereg.perfZcompOutputHi = 0; - SWPixelEngine::pereg.perfBlendInputLo = 0; - SWPixelEngine::pereg.perfBlendInputHi = 0; - SWPixelEngine::pereg.perfEfbCopyClocksLo = 0; - SWPixelEngine::pereg.perfEfbCopyClocksHi = 0; + memset(EfbInterface::perf_values, 0, sizeof(EfbInterface::perf_values)); break; case BPMEM_LOADTLUT0: // This one updates bpmem.tlutXferSrc, no need to do anything here. break; -- cgit v1.2.3 From a4bb0dafb4bebeed78452498a36b8ae19fe2e495 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Thu, 15 May 2014 04:19:39 -0500 Subject: Removes ZeroFrog's "optimized" memcpy and memcmp functions. These were only compiled in on Windows and x86_32. They provided "optimized" copies and compares based on blocksizes for the AMD Athlon and Duron CPU families. The code was taken from something that AMD provides with a as-is license. Just get rid of this crap. --- Source/Core/VideoBackends/Software/BPMemLoader.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Source/Core/VideoBackends/Software/BPMemLoader.cpp') diff --git a/Source/Core/VideoBackends/Software/BPMemLoader.cpp b/Source/Core/VideoBackends/Software/BPMemLoader.cpp index d6566f23c5..b21f3171c5 100644 --- a/Source/Core/VideoBackends/Software/BPMemLoader.cpp +++ b/Source/Core/VideoBackends/Software/BPMemLoader.cpp @@ -99,7 +99,7 @@ void SWBPWritten(int address, int newvalue) ptr = Memory::GetPointer((bpmem.tmem_config.tlut_src & 0xFFFFF) << 5); if (ptr) - memcpy_gc(texMem + tlutTMemAddr, ptr, tlutXferCount); + memcpy(texMem + tlutTMemAddr, ptr, tlutXferCount); else PanicAlert("Invalid palette pointer %08x %08x %08x", bpmem.tmem_config.tlut_src, bpmem.tmem_config.tlut_src << 5, (bpmem.tmem_config.tlut_src & 0xFFFFF)<< 5); break; -- cgit v1.2.3 From fd1606597904d7c5fe50dc8d611cedc13e184645 Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Tue, 19 Aug 2014 20:17:29 -0700 Subject: msvc: resolve all warnings in VideoBackends/Software. --- Source/Core/VideoBackends/Software/BPMemLoader.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'Source/Core/VideoBackends/Software/BPMemLoader.cpp') diff --git a/Source/Core/VideoBackends/Software/BPMemLoader.cpp b/Source/Core/VideoBackends/Software/BPMemLoader.cpp index b21f3171c5..94a1d091d8 100644 --- a/Source/Core/VideoBackends/Software/BPMemLoader.cpp +++ b/Source/Core/VideoBackends/Software/BPMemLoader.cpp @@ -151,10 +151,10 @@ void SWBPWritten(int address, int newvalue) { int regNum = (address >> 1 ) & 0x3; TevReg& reg = bpmem.tevregs[regNum]; - bool konst = reg.type_ra; + bool is_konst = reg.type_ra != 0; - Rasterizer::SetTevReg(regNum, Tev::ALP_C, konst, reg.alpha); - Rasterizer::SetTevReg(regNum, Tev::RED_C, konst, reg.red); + Rasterizer::SetTevReg(regNum, Tev::ALP_C, is_konst, static_cast(reg.alpha)); + Rasterizer::SetTevReg(regNum, Tev::RED_C, is_konst, static_cast(reg.red)); break; } @@ -166,10 +166,10 @@ void SWBPWritten(int address, int newvalue) { int regNum = (address >> 1 ) & 0x3; TevReg& reg = bpmem.tevregs[regNum]; - bool konst = reg.type_bg; + bool is_konst = reg.type_bg != 0; - Rasterizer::SetTevReg(regNum, Tev::GRN_C, konst, reg.green); - Rasterizer::SetTevReg(regNum, Tev::BLU_C, konst, reg.blue); + Rasterizer::SetTevReg(regNum, Tev::GRN_C, is_konst, static_cast(reg.green)); + Rasterizer::SetTevReg(regNum, Tev::BLU_C, is_konst, static_cast(reg.blue)); break; } -- cgit v1.2.3 From f93aa7087cb75e9d7539cac2b47befb5123f6ab8 Mon Sep 17 00:00:00 2001 From: Rachel Bryk Date: Tue, 9 Sep 2014 00:24:49 -0400 Subject: Kill Core::g_CoreStartupParameter. --- Source/Core/VideoBackends/Software/BPMemLoader.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'Source/Core/VideoBackends/Software/BPMemLoader.cpp') diff --git a/Source/Core/VideoBackends/Software/BPMemLoader.cpp b/Source/Core/VideoBackends/Software/BPMemLoader.cpp index 94a1d091d8..990d21e539 100644 --- a/Source/Core/VideoBackends/Software/BPMemLoader.cpp +++ b/Source/Core/VideoBackends/Software/BPMemLoader.cpp @@ -2,6 +2,7 @@ // Licensed under GPLv2 // Refer to the license.txt file included. +#include "Core/ConfigManager.h" #include "Core/Core.h" #include "Core/HW/Memmap.h" @@ -93,7 +94,7 @@ void SWBPWritten(int address, int newvalue) u8 *ptr = nullptr; // TODO - figure out a cleaner way. - if (Core::g_CoreStartupParameter.bWii) + if (SConfig::GetInstance().m_LocalCoreStartupParameter.bWii) ptr = Memory::GetPointer(bpmem.tmem_config.tlut_src << 5); else ptr = Memory::GetPointer((bpmem.tmem_config.tlut_src & 0xFFFFF) << 5); -- cgit v1.2.3 From 1d23c2ca8bfe41549970dc77da7d4b21950e11e6 Mon Sep 17 00:00:00 2001 From: Tony Wasserka Date: Wed, 17 Sep 2014 18:46:23 +0200 Subject: GPU: Only load the relevant color components upon writes to the tev color registers. The other two components need not be valid upon write, hence loading them results in glitches. Fixes issue 6783. --- Source/Core/VideoBackends/Software/BPMemLoader.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'Source/Core/VideoBackends/Software/BPMemLoader.cpp') diff --git a/Source/Core/VideoBackends/Software/BPMemLoader.cpp b/Source/Core/VideoBackends/Software/BPMemLoader.cpp index 990d21e539..f2aa429c49 100644 --- a/Source/Core/VideoBackends/Software/BPMemLoader.cpp +++ b/Source/Core/VideoBackends/Software/BPMemLoader.cpp @@ -145,10 +145,10 @@ void SWBPWritten(int address, int newvalue) } break; - case BPMEM_TEV_REGISTER_L: // Reg 1 - case BPMEM_TEV_REGISTER_L+2: // Reg 2 - case BPMEM_TEV_REGISTER_L+4: // Reg 3 - case BPMEM_TEV_REGISTER_L+6: // Reg 4 + case BPMEM_TEV_COLOR_RA: + case BPMEM_TEV_COLOR_RA + 2: + case BPMEM_TEV_COLOR_RA + 4: + case BPMEM_TEV_COLOR_RA + 6: { int regNum = (address >> 1 ) & 0x3; TevReg& reg = bpmem.tevregs[regNum]; @@ -160,10 +160,10 @@ void SWBPWritten(int address, int newvalue) break; } - case BPMEM_TEV_REGISTER_H: // Reg 1 - case BPMEM_TEV_REGISTER_H+2: // Reg 2 - case BPMEM_TEV_REGISTER_H+4: // Reg 3 - case BPMEM_TEV_REGISTER_H+6: // Reg 4 + case BPMEM_TEV_COLOR_BG: + case BPMEM_TEV_COLOR_BG + 2: + case BPMEM_TEV_COLOR_BG + 4: + case BPMEM_TEV_COLOR_BG + 6: { int regNum = (address >> 1 ) & 0x3; TevReg& reg = bpmem.tevregs[regNum]; -- cgit v1.2.3 From 2d4b7e3f3f67f48ec2fb3d8eb8b2af3b70e4afcc Mon Sep 17 00:00:00 2001 From: crudelios Date: Sun, 14 Sep 2014 17:52:51 +0100 Subject: Reimplement Bounding Box calculation using the software renderer. --- Source/Core/VideoBackends/Software/BPMemLoader.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'Source/Core/VideoBackends/Software/BPMemLoader.cpp') diff --git a/Source/Core/VideoBackends/Software/BPMemLoader.cpp b/Source/Core/VideoBackends/Software/BPMemLoader.cpp index f2aa429c49..bf11258cb0 100644 --- a/Source/Core/VideoBackends/Software/BPMemLoader.cpp +++ b/Source/Core/VideoBackends/Software/BPMemLoader.cpp @@ -14,6 +14,7 @@ #include "VideoCommon/PixelEngine.h" #include "VideoCommon/TextureDecoder.h" +#include "VideoCommon/BoundingBox.h" #include "VideoCommon/VideoCommon.h" @@ -73,12 +74,12 @@ void SWBPWritten(int address, int newvalue) EfbCopy::CopyEfb(); break; case BPMEM_CLEARBBOX1: - PixelEngine::bbox[0] = newvalue >> 10; - PixelEngine::bbox[1] = newvalue & 0x3ff; + BoundingBox::coords[BoundingBox::LEFT] = newvalue >> 10; + BoundingBox::coords[BoundingBox::RIGHT] = newvalue & 0x3ff; break; case BPMEM_CLEARBBOX2: - PixelEngine::bbox[2] = newvalue >> 10; - PixelEngine::bbox[3] = newvalue & 0x3ff; + BoundingBox::coords[BoundingBox::TOP] = newvalue >> 10; + BoundingBox::coords[BoundingBox::BOTTOM] = newvalue & 0x3ff; break; case BPMEM_CLEAR_PIXEL_PERF: // TODO: I didn't test if the value written to this register affects the amount of cleared registers -- cgit v1.2.3 From 176ea06e8233386f397eaa6d8941747d6f035576 Mon Sep 17 00:00:00 2001 From: crudelios Date: Wed, 17 Sep 2014 02:04:37 +0100 Subject: Get buildbot to compile. --- Source/Core/VideoBackends/Software/BPMemLoader.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Source/Core/VideoBackends/Software/BPMemLoader.cpp') diff --git a/Source/Core/VideoBackends/Software/BPMemLoader.cpp b/Source/Core/VideoBackends/Software/BPMemLoader.cpp index bf11258cb0..74e257e875 100644 --- a/Source/Core/VideoBackends/Software/BPMemLoader.cpp +++ b/Source/Core/VideoBackends/Software/BPMemLoader.cpp @@ -12,9 +12,9 @@ #include "VideoBackends/Software/Rasterizer.h" #include "VideoBackends/Software/Tev.h" +#include "VideoCommon/BoundingBox.h" #include "VideoCommon/PixelEngine.h" #include "VideoCommon/TextureDecoder.h" -#include "VideoCommon/BoundingBox.h" #include "VideoCommon/VideoCommon.h" -- cgit v1.2.3 From b929f764f2ebb3080aba6568e218738a0741b147 Mon Sep 17 00:00:00 2001 From: Scott Mansell Date: Sat, 1 Nov 2014 16:26:40 +1300 Subject: Remove GetPointers in VideoSoftware. This same code was previously fixed in VideoCommon, just updating this to match. We are down to 121 GetPointers. --- Source/Core/VideoBackends/Software/BPMemLoader.cpp | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) (limited to 'Source/Core/VideoBackends/Software/BPMemLoader.cpp') diff --git a/Source/Core/VideoBackends/Software/BPMemLoader.cpp b/Source/Core/VideoBackends/Software/BPMemLoader.cpp index 74e257e875..76b14c38ec 100644 --- a/Source/Core/VideoBackends/Software/BPMemLoader.cpp +++ b/Source/Core/VideoBackends/Software/BPMemLoader.cpp @@ -91,19 +91,14 @@ void SWBPWritten(int address, int newvalue) { u32 tlutTMemAddr = (newvalue & 0x3FF) << 9; u32 tlutXferCount = (newvalue & 0x1FFC00) >> 5; + u32 addr = bpmem.tmem_config.tlut_src << 5; - u8 *ptr = nullptr; + // The GameCube ignores the upper bits of this address. Some games (WW, MKDD) set them. + if (!SConfig::GetInstance().m_LocalCoreStartupParameter.bWii) + addr = addr & 0x01FFFFFF; - // TODO - figure out a cleaner way. - if (SConfig::GetInstance().m_LocalCoreStartupParameter.bWii) - ptr = Memory::GetPointer(bpmem.tmem_config.tlut_src << 5); - else - ptr = Memory::GetPointer((bpmem.tmem_config.tlut_src & 0xFFFFF) << 5); + Memory::CopyFromEmu(texMem + tlutTMemAddr, addr, tlutXferCount); - if (ptr) - memcpy(texMem + tlutTMemAddr, ptr, tlutXferCount); - else - PanicAlert("Invalid palette pointer %08x %08x %08x", bpmem.tmem_config.tlut_src, bpmem.tmem_config.tlut_src << 5, (bpmem.tmem_config.tlut_src & 0xFFFFF)<< 5); break; } @@ -114,7 +109,7 @@ void SWBPWritten(int address, int newvalue) // NOTE: libogc's implementation of GX_PreloadEntireTexture seems flawed, so it's not necessarily a good reference for RE'ing this feature. BPS_TmemConfig& tmem_cfg = bpmem.tmem_config; - u8* src_ptr = Memory::GetPointer(tmem_cfg.preload_addr << 5); // TODO: Should we add mask here on GC? + u32 src_addr = tmem_cfg.preload_addr << 5; // TODO: Should we add mask here on GC? u32 size = tmem_cfg.preload_tile_info.count * TMEM_LINE_SIZE; u32 tmem_addr_even = tmem_cfg.preload_tmem_even * TMEM_LINE_SIZE; @@ -123,10 +118,12 @@ void SWBPWritten(int address, int newvalue) if (tmem_addr_even + size > TMEM_SIZE) size = TMEM_SIZE - tmem_addr_even; - memcpy(texMem + tmem_addr_even, src_ptr, size); + Memory::CopyFromEmu(texMem + tmem_addr_even, src_addr, size); } else // RGBA8 tiles (and CI14, but that might just be stupid libogc!) { + u8* src_ptr = Memory::GetPointer(src_addr); + // AR and GB tiles are stored in separate TMEM banks => can't use a single memcpy for everything u32 tmem_addr_odd = tmem_cfg.preload_tmem_odd * TMEM_LINE_SIZE; -- cgit v1.2.3 From cefcb0ace9d363b3679b4e93bcc9ec05f1e5f4f8 Mon Sep 17 00:00:00 2001 From: Tillmann Karras Date: Mon, 18 May 2015 01:08:10 +0200 Subject: Update license headers to GPLv2+ --- Source/Core/VideoBackends/Software/BPMemLoader.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Source/Core/VideoBackends/Software/BPMemLoader.cpp') diff --git a/Source/Core/VideoBackends/Software/BPMemLoader.cpp b/Source/Core/VideoBackends/Software/BPMemLoader.cpp index 76b14c38ec..d81383d3a5 100644 --- a/Source/Core/VideoBackends/Software/BPMemLoader.cpp +++ b/Source/Core/VideoBackends/Software/BPMemLoader.cpp @@ -1,5 +1,5 @@ // Copyright 2013 Dolphin Emulator Project -// Licensed under GPLv2 +// Licensed under GPLv2+ // Refer to the license.txt file included. #include "Core/ConfigManager.h" -- cgit v1.2.3 From 30ebb2459eb97ba544547183854775df8460b475 Mon Sep 17 00:00:00 2001 From: Tillmann Karras Date: Sun, 24 May 2015 06:55:12 +0200 Subject: Set copyright year to when a file was created --- Source/Core/VideoBackends/Software/BPMemLoader.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Source/Core/VideoBackends/Software/BPMemLoader.cpp') diff --git a/Source/Core/VideoBackends/Software/BPMemLoader.cpp b/Source/Core/VideoBackends/Software/BPMemLoader.cpp index d81383d3a5..97f8b2186f 100644 --- a/Source/Core/VideoBackends/Software/BPMemLoader.cpp +++ b/Source/Core/VideoBackends/Software/BPMemLoader.cpp @@ -1,4 +1,4 @@ -// Copyright 2013 Dolphin Emulator Project +// Copyright 2009 Dolphin Emulator Project // Licensed under GPLv2+ // Refer to the license.txt file included. -- cgit v1.2.3