summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/VertexShaderManager.cpp
diff options
context:
space:
mode:
authorPokechu22 <Pokechu022@gmail.com>2021-11-12 14:32:17 -0800
committerPokechu22 <Pokechu022@gmail.com>2022-04-16 10:26:11 -0700
commit4595b89ad80ce2384d188de802ee03a183eb5905 (patch)
tree04eb2862f3ea3d20c8320899f3e7f9dcb4b7bdeb /Source/Core/VideoCommon/VertexShaderManager.cpp
parentb85b35d5ea6af0dbd7ea74b47e2564a805d9bfe5 (diff)
VideoCommon: Remove bSupportsOversizedViewports
I think this is a relic of D3D9. D3D11 and D3D12 seem to work fine without it. Plus, ViewportCorrectionMatrix just didn't work correctly (at least with the viewports being generated by the new scissor code).
Diffstat (limited to 'Source/Core/VideoCommon/VertexShaderManager.cpp')
-rw-r--r--Source/Core/VideoCommon/VertexShaderManager.cpp56
1 files changed, 0 insertions, 56 deletions
diff --git a/Source/Core/VideoCommon/VertexShaderManager.cpp b/Source/Core/VideoCommon/VertexShaderManager.cpp
index 23e94776be..6ba7144345 100644
--- a/Source/Core/VideoCommon/VertexShaderManager.cpp
+++ b/Source/Core/VideoCommon/VertexShaderManager.cpp
@@ -49,55 +49,6 @@ static Common::Matrix44 s_viewportCorrection;
VertexShaderConstants VertexShaderManager::constants;
bool VertexShaderManager::dirty;
-// Viewport correction:
-// In D3D, the viewport rectangle must fit within the render target.
-// Say you want a viewport at (ix, iy) with size (iw, ih),
-// but your viewport must be clamped at (ax, ay) with size (aw, ah).
-// Just multiply the projection matrix with the following to get the same
-// effect:
-// [ (iw/aw) 0 0 ((iw - 2*(ax-ix)) / aw - 1) ]
-// [ 0 (ih/ah) 0 ((-ih + 2*(ay-iy)) / ah + 1) ]
-// [ 0 0 1 0 ]
-// [ 0 0 0 1 ]
-static void ViewportCorrectionMatrix(Common::Matrix44& result)
-{
- int scissorXOff = bpmem.scissorOffset.x * 2;
- int scissorYOff = bpmem.scissorOffset.y * 2;
-
- // TODO: ceil, floor or just cast to int?
- // TODO: Directly use the floats instead of rounding them?
- float intendedX = xfmem.viewport.xOrig - xfmem.viewport.wd - scissorXOff;
- float intendedY = xfmem.viewport.yOrig + xfmem.viewport.ht - scissorYOff;
- float intendedWd = 2.0f * xfmem.viewport.wd;
- float intendedHt = -2.0f * xfmem.viewport.ht;
-
- if (intendedWd < 0.f)
- {
- intendedX += intendedWd;
- intendedWd = -intendedWd;
- }
- if (intendedHt < 0.f)
- {
- intendedY += intendedHt;
- intendedHt = -intendedHt;
- }
-
- // fit to EFB size
- float X = (intendedX >= 0.f) ? intendedX : 0.f;
- float Y = (intendedY >= 0.f) ? intendedY : 0.f;
- float Wd = (X + intendedWd <= EFB_WIDTH) ? intendedWd : (EFB_WIDTH - X);
- float Ht = (Y + intendedHt <= EFB_HEIGHT) ? intendedHt : (EFB_HEIGHT - Y);
-
- result = Common::Matrix44::Identity();
- if (Wd == 0 || Ht == 0)
- return;
-
- result.data[4 * 0 + 0] = intendedWd / Wd;
- result.data[4 * 0 + 3] = (intendedWd - 2.f * (X - intendedX)) / Wd - 1.f;
- result.data[4 * 1 + 1] = intendedHt / Ht;
- result.data[4 * 1 + 3] = (-intendedHt + 2.f * (Y - intendedY)) / Ht + 1.f;
-}
-
void VertexShaderManager::Init()
{
// Initialize state tracking variables
@@ -348,13 +299,6 @@ void VertexShaderManager::SetConstants()
dirty = true;
BPFunctions::SetViewport();
-
- // Update projection if the viewport isn't 1:1 useable
- if (!g_ActiveConfig.backend_info.bSupportsOversizedViewports)
- {
- ViewportCorrectionMatrix(s_viewportCorrection);
- bProjectionChanged = true;
- }
}
if (bProjectionChanged || g_freelook_camera.GetController()->IsDirty())