summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/PixelShaderManager.cpp
diff options
context:
space:
mode:
authorScott Mansell <phiren@gmail.com>2015-01-03 06:06:56 +1300
committerScott Mansell <phiren@gmail.com>2015-01-23 03:32:31 +1300
commit88c7afd315d06c27e459a8352f753cdeca5a1fe5 (patch)
tree9f207f8dc65159d269ef534479672e007e99e3cb /Source/Core/VideoCommon/PixelShaderManager.cpp
parent418296961cba39e4ae5bc441b3f52bf1459ad2bb (diff)
Make zfreeze use screenspace coordinates independant of IR.
OpenGL requires the y coordinates to be flipped. Also refactored PixelGen code to remove duplicate code.
Diffstat (limited to 'Source/Core/VideoCommon/PixelShaderManager.cpp')
-rw-r--r--Source/Core/VideoCommon/PixelShaderManager.cpp15
1 files changed, 15 insertions, 0 deletions
diff --git a/Source/Core/VideoCommon/PixelShaderManager.cpp b/Source/Core/VideoCommon/PixelShaderManager.cpp
index d0004a0921..a94dfaf991 100644
--- a/Source/Core/VideoCommon/PixelShaderManager.cpp
+++ b/Source/Core/VideoCommon/PixelShaderManager.cpp
@@ -14,6 +14,7 @@
bool PixelShaderManager::s_bFogRangeAdjustChanged;
bool PixelShaderManager::s_bViewPortChanged;
+bool PixelShaderManager::s_bEFBScaleChanged;
std::array<int4,4> PixelShaderManager::s_tev_color;
std::array<int4,4> PixelShaderManager::s_tev_konst_color;
@@ -48,6 +49,7 @@ void PixelShaderManager::Dirty()
SetDestAlpha();
SetZTextureBias();
SetViewportChanged();
+ SetEfbScaleChanged();
SetZSlope(0, 0, 1);
SetIndTexScaleChanged(false);
SetIndTexScaleChanged(true);
@@ -113,6 +115,13 @@ void PixelShaderManager::SetConstants()
dirty = true;
s_bViewPortChanged = false;
}
+
+ if (s_bEFBScaleChanged) {
+ constants.efbscale[0] = 1.0f / float(Renderer::EFBToScaledXf(1));
+ constants.efbscale[1] = 1.0f / float(Renderer::EFBToScaledYf(1));
+ dirty = true;
+ s_bEFBScaleChanged = false;
+ }
}
void PixelShaderManager::SetTevColor(int index, int component, s32 value)
@@ -169,6 +178,12 @@ void PixelShaderManager::SetViewportChanged()
s_bFogRangeAdjustChanged = true; // TODO: Shouldn't be necessary with an accurate fog range adjust implementation
}
+void PixelShaderManager::SetEfbScaleChanged()
+{
+ s_bEFBScaleChanged = true;
+ s_bViewPortChanged = true;
+}
+
void PixelShaderManager::SetZSlope(float dfdx, float dfdy, float f0)
{
constants.zslope[0] = dfdx;