summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/BPStructs.cpp
diff options
context:
space:
mode:
authorAdmiral H. Curtiss <pikachu025@gmail.com>2022-12-27 17:42:02 +0100
committerAdmiral H. Curtiss <pikachu025@gmail.com>2022-12-27 20:13:24 +0100
commit725bd64ec294b23242b721fc5a9b9907f807858b (patch)
tree0038a36f32cb0108d8d4e326b4d7f53993a2e54f /Source/Core/VideoCommon/BPStructs.cpp
parent529909fe901ee81cc20fdea453e4fa355b1078f2 (diff)
VideoCommon: De-globalize PixelShaderManager class.
Diffstat (limited to 'Source/Core/VideoCommon/BPStructs.cpp')
-rw-r--r--Source/Core/VideoCommon/BPStructs.cpp77
1 files changed, 40 insertions, 37 deletions
diff --git a/Source/Core/VideoCommon/BPStructs.cpp b/Source/Core/VideoCommon/BPStructs.cpp
index b155f6b3c3..e7c2c640ff 100644
--- a/Source/Core/VideoCommon/BPStructs.cpp
+++ b/Source/Core/VideoCommon/BPStructs.cpp
@@ -54,7 +54,8 @@ void BPInit()
bpmem.bpMask = 0xFFFFFF;
}
-static void BPWritten(const BPCmd& bp, int cycles_into_future)
+static void BPWritten(PixelShaderManager& pixel_shader_manager, const BPCmd& bp,
+ int cycles_into_future)
{
/*
----------------------------------------------------------------------------------------------------------------
@@ -103,7 +104,7 @@ static void BPWritten(const BPCmd& bp, int cycles_into_future)
bpmem.genMode.zfreeze);
if (bp.changes)
- PixelShaderManager::SetGenModeChanged();
+ pixel_shader_manager.SetGenModeChanged();
// Only call SetGenerationMode when cull mode changes.
if (bp.changes & 0xC000)
@@ -119,15 +120,15 @@ static void BPWritten(const BPCmd& bp, int cycles_into_future)
case BPMEM_IND_MTXB + 6:
case BPMEM_IND_MTXC + 6:
if (bp.changes)
- PixelShaderManager::SetIndMatrixChanged((bp.address - BPMEM_IND_MTXA) / 3);
+ pixel_shader_manager.SetIndMatrixChanged((bp.address - BPMEM_IND_MTXA) / 3);
return;
case BPMEM_RAS1_SS0: // Index Texture Coordinate Scale 0
if (bp.changes)
- PixelShaderManager::SetIndTexScaleChanged(false);
+ pixel_shader_manager.SetIndTexScaleChanged(false);
return;
case BPMEM_RAS1_SS1: // Index Texture Coordinate Scale 1
if (bp.changes)
- PixelShaderManager::SetIndTexScaleChanged(true);
+ pixel_shader_manager.SetIndTexScaleChanged(true);
return;
// ----------------
// Scissor Control
@@ -145,7 +146,7 @@ static void BPWritten(const BPCmd& bp, int cycles_into_future)
PRIM_LOG("zmode: test={}, func={}, upd={}", bpmem.zmode.testenable, bpmem.zmode.func,
bpmem.zmode.updateenable);
SetDepthMode();
- PixelShaderManager::SetZModeControl();
+ pixel_shader_manager.SetZModeControl();
return;
case BPMEM_BLENDMODE: // Blending Control
if (bp.changes & 0xFFFF)
@@ -157,15 +158,15 @@ static void BPWritten(const BPCmd& bp, int cycles_into_future)
SetBlendMode();
- PixelShaderManager::SetBlendModeChanged();
+ pixel_shader_manager.SetBlendModeChanged();
}
return;
case BPMEM_CONSTANTALPHA: // Set Destination Alpha
PRIM_LOG("constalpha: alp={}, en={}", bpmem.dstalpha.alpha, bpmem.dstalpha.enable);
if (bp.changes)
{
- PixelShaderManager::SetAlpha();
- PixelShaderManager::SetDestAlphaChanged();
+ pixel_shader_manager.SetAlpha();
+ pixel_shader_manager.SetDestAlphaChanged();
}
if (bp.changes & 0x100)
SetBlendMode();
@@ -279,7 +280,7 @@ static void BPWritten(const BPCmd& bp, int cycles_into_future)
if (PE_copy.copy_to_xfb == 1)
{
// Make sure we disable Bounding box to match the side effects of the non-failure path
- g_renderer->BBoxDisable();
+ g_renderer->BBoxDisable(pixel_shader_manager);
}
return;
@@ -310,7 +311,7 @@ static void BPWritten(const BPCmd& bp, int cycles_into_future)
// We should be able to get away with deactivating the current bbox tracking
// here. Not sure if there's a better spot to put this.
// the number of lines copied is determined by the y scale * source efb height
- g_renderer->BBoxDisable();
+ g_renderer->BBoxDisable(pixel_shader_manager);
float yScale;
if (PE_copy.scale_invert)
@@ -390,42 +391,42 @@ static void BPWritten(const BPCmd& bp, int cycles_into_future)
case BPMEM_FOGRANGE + 4:
case BPMEM_FOGRANGE + 5:
if (bp.changes)
- PixelShaderManager::SetFogRangeAdjustChanged();
+ pixel_shader_manager.SetFogRangeAdjustChanged();
return;
case BPMEM_FOGPARAM0:
case BPMEM_FOGBMAGNITUDE:
case BPMEM_FOGBEXPONENT:
case BPMEM_FOGPARAM3:
if (bp.changes)
- PixelShaderManager::SetFogParamChanged();
+ pixel_shader_manager.SetFogParamChanged();
return;
case BPMEM_FOGCOLOR: // Fog Color
if (bp.changes)
- PixelShaderManager::SetFogColorChanged();
+ pixel_shader_manager.SetFogColorChanged();
return;
case BPMEM_ALPHACOMPARE: // Compare Alpha Values
PRIM_LOG("alphacmp: ref0={}, ref1={}, comp0={}, comp1={}, logic={}", bpmem.alpha_test.ref0,
bpmem.alpha_test.ref1, bpmem.alpha_test.comp0, bpmem.alpha_test.comp1,
bpmem.alpha_test.logic);
if (bp.changes & 0xFFFF)
- PixelShaderManager::SetAlpha();
+ pixel_shader_manager.SetAlpha();
if (bp.changes)
{
- PixelShaderManager::SetAlphaTestChanged();
+ pixel_shader_manager.SetAlphaTestChanged();
SetBlendMode();
}
return;
case BPMEM_BIAS: // BIAS
PRIM_LOG("ztex bias={:#x}", bpmem.ztex1.bias);
if (bp.changes)
- PixelShaderManager::SetZTextureBias();
+ pixel_shader_manager.SetZTextureBias();
return;
case BPMEM_ZTEX2: // Z Texture type
{
if (bp.changes & 3)
- PixelShaderManager::SetZTextureTypeChanged();
+ pixel_shader_manager.SetZTextureTypeChanged();
if (bp.changes & 12)
- PixelShaderManager::SetZTextureOpChanged();
+ pixel_shader_manager.SetZTextureOpChanged();
PRIM_LOG("ztex op={}, type={}", bpmem.ztex2.op, bpmem.ztex2.type);
}
return;
@@ -478,7 +479,7 @@ static void BPWritten(const BPCmd& bp, int cycles_into_future)
case BPMEM_CLEARBBOX2:
{
const u8 offset = bp.address & 2;
- g_renderer->BBoxEnable();
+ g_renderer->BBoxEnable(pixel_shader_manager);
g_renderer->BBoxWrite(offset, bp.newvalue & 0x3ff);
g_renderer->BBoxWrite(offset + 1, bp.newvalue >> 10);
@@ -492,7 +493,7 @@ static void BPWritten(const BPCmd& bp, int cycles_into_future)
OnPixelFormatChange();
if (bp.changes & 7)
SetBlendMode(); // dual source could be activated by changing to PIXELFMT_RGBA6_Z24
- PixelShaderManager::SetZModeControl();
+ pixel_shader_manager.SetZModeControl();
return;
case BPMEM_MIPMAP_STRIDE: // MipMap Stride Channel
@@ -510,7 +511,7 @@ static void BPWritten(const BPCmd& bp, int cycles_into_future)
case BPMEM_IREF:
{
if (bp.changes)
- PixelShaderManager::SetTevIndirectChanged();
+ pixel_shader_manager.SetTevIndirectChanged();
return;
}
@@ -522,7 +523,7 @@ static void BPWritten(const BPCmd& bp, int cycles_into_future)
case BPMEM_TEV_KSEL + 5: // Texture Environment Swap Mode Table 5
case BPMEM_TEV_KSEL + 6: // Texture Environment Swap Mode Table 6
case BPMEM_TEV_KSEL + 7: // Texture Environment Swap Mode Table 7
- PixelShaderManager::SetTevKSel(bp.address - BPMEM_TEV_KSEL, bp.newvalue);
+ pixel_shader_manager.SetTevKSel(bp.address - BPMEM_TEV_KSEL, bp.newvalue);
return;
/* This Register can be used to limit to which bits of BP registers is
@@ -619,13 +620,13 @@ static void BPWritten(const BPCmd& bp, int cycles_into_future)
int num = (bp.address >> 1) & 0x3;
if (bpmem.tevregs[num].ra.type == TevRegType::Constant)
{
- PixelShaderManager::SetTevKonstColor(num, 0, bpmem.tevregs[num].ra.red);
- PixelShaderManager::SetTevKonstColor(num, 3, bpmem.tevregs[num].ra.alpha);
+ pixel_shader_manager.SetTevKonstColor(num, 0, bpmem.tevregs[num].ra.red);
+ pixel_shader_manager.SetTevKonstColor(num, 3, bpmem.tevregs[num].ra.alpha);
}
else
{
- PixelShaderManager::SetTevColor(num, 0, bpmem.tevregs[num].ra.red);
- PixelShaderManager::SetTevColor(num, 3, bpmem.tevregs[num].ra.alpha);
+ pixel_shader_manager.SetTevColor(num, 0, bpmem.tevregs[num].ra.red);
+ pixel_shader_manager.SetTevColor(num, 3, bpmem.tevregs[num].ra.alpha);
}
return;
}
@@ -638,13 +639,13 @@ static void BPWritten(const BPCmd& bp, int cycles_into_future)
int num = (bp.address >> 1) & 0x3;
if (bpmem.tevregs[num].bg.type == TevRegType::Constant)
{
- PixelShaderManager::SetTevKonstColor(num, 1, bpmem.tevregs[num].bg.green);
- PixelShaderManager::SetTevKonstColor(num, 2, bpmem.tevregs[num].bg.blue);
+ pixel_shader_manager.SetTevKonstColor(num, 1, bpmem.tevregs[num].bg.green);
+ pixel_shader_manager.SetTevKonstColor(num, 2, bpmem.tevregs[num].bg.blue);
}
else
{
- PixelShaderManager::SetTevColor(num, 1, bpmem.tevregs[num].bg.green);
- PixelShaderManager::SetTevColor(num, 2, bpmem.tevregs[num].bg.blue);
+ pixel_shader_manager.SetTevColor(num, 1, bpmem.tevregs[num].bg.green);
+ pixel_shader_manager.SetTevColor(num, 2, bpmem.tevregs[num].bg.blue);
}
return;
}
@@ -660,7 +661,7 @@ static void BPWritten(const BPCmd& bp, int cycles_into_future)
// -------------------------
case BPMEM_TREF:
case BPMEM_TREF + 4:
- PixelShaderManager::SetTevOrder(bp.address - BPMEM_TREF, bp.newvalue);
+ pixel_shader_manager.SetTevOrder(bp.address - BPMEM_TREF, bp.newvalue);
return;
// ----------------------
// Set wrap size
@@ -671,7 +672,7 @@ static void BPWritten(const BPCmd& bp, int cycles_into_future)
case BPMEM_SU_SSIZE + 12:
if (bp.changes)
{
- PixelShaderManager::SetTexCoordChanged((bp.address - BPMEM_SU_SSIZE) >> 1);
+ pixel_shader_manager.SetTexCoordChanged((bp.address - BPMEM_SU_SSIZE) >> 1);
GeometryShaderManager::SetTexCoordChanged((bp.address - BPMEM_SU_SSIZE) >> 1);
}
return;
@@ -725,7 +726,7 @@ static void BPWritten(const BPCmd& bp, int cycles_into_future)
// Indirect Tev
// --------------
case BPMEM_IND_CMD:
- PixelShaderManager::SetTevIndirectChanged();
+ pixel_shader_manager.SetTevIndirectChanged();
return;
// --------------------------------------------------
// Set Color/Alpha of a Tev
@@ -734,8 +735,8 @@ static void BPWritten(const BPCmd& bp, int cycles_into_future)
// --------------------------------------------------
case BPMEM_TEV_COLOR_ENV: // Texture Environment 1
case BPMEM_TEV_COLOR_ENV + 16:
- PixelShaderManager::SetTevCombiner((bp.address - BPMEM_TEV_COLOR_ENV) >> 1,
- (bp.address - BPMEM_TEV_COLOR_ENV) & 1, bp.newvalue);
+ pixel_shader_manager.SetTevCombiner((bp.address - BPMEM_TEV_COLOR_ENV) >> 1,
+ (bp.address - BPMEM_TEV_COLOR_ENV) & 1, bp.newvalue);
return;
default:
break;
@@ -749,6 +750,8 @@ static void BPWritten(const BPCmd& bp, int cycles_into_future)
// Call browser: OpcodeDecoding.cpp RunCallback::OnBP()
void LoadBPReg(u8 reg, u32 value, int cycles_into_future)
{
+ auto& system = Core::System::GetInstance();
+
int oldval = ((u32*)&bpmem)[reg];
int newval = (oldval & ~bpmem.bpMask) | (value & bpmem.bpMask);
int changes = (oldval ^ newval) & 0xFFFFFF;
@@ -759,7 +762,7 @@ void LoadBPReg(u8 reg, u32 value, int cycles_into_future)
if (reg != BPMEM_BP_MASK)
bpmem.bpMask = 0xFFFFFF;
- BPWritten(bp, cycles_into_future);
+ BPWritten(system.GetPixelShaderManager(), bp, cycles_into_future);
}
void LoadBPRegPreprocess(u8 reg, u32 value, int cycles_into_future)