From 1af3d8447a47ea7a8be86060ca879cafe1c57824 Mon Sep 17 00:00:00 2001 From: Jules Blok Date: Wed, 17 Dec 2014 03:11:23 +0100 Subject: [PATCH] GeometryShaderManager: Set the constants within the callbacks. --- .../VideoCommon/GeometryShaderManager.cpp | 80 ++++++------------- .../Core/VideoCommon/GeometryShaderManager.h | 3 - Source/Core/VideoCommon/VertexManagerBase.cpp | 1 - 3 files changed, 26 insertions(+), 58 deletions(-) diff --git a/Source/Core/VideoCommon/GeometryShaderManager.cpp b/Source/Core/VideoCommon/GeometryShaderManager.cpp index 3d05a7161c..2ca0965343 100644 --- a/Source/Core/VideoCommon/GeometryShaderManager.cpp +++ b/Source/Core/VideoCommon/GeometryShaderManager.cpp @@ -12,9 +12,6 @@ #include "VideoCommon/VideoConfig.h" #include "VideoCommon/XFMemory.h" -// track changes -static bool s_projection_changed, s_viewport_changed, s_lineptwidth_changed; - static const int LINE_PT_TEX_OFFSETS[8] = { 0, 16, 8, 4, 2, 1, 1, 1 }; @@ -35,72 +32,47 @@ void GeometryShaderManager::Shutdown() void GeometryShaderManager::Dirty() { - s_projection_changed = true; - s_viewport_changed = true; - s_lineptwidth_changed = true; + SetViewportChanged(); + SetProjectionChanged(); + SetLinePtWidthChanged(); - SetTexCoordChanged(0); - SetTexCoordChanged(1); - SetTexCoordChanged(2); - SetTexCoordChanged(3); - SetTexCoordChanged(4); - SetTexCoordChanged(5); - SetTexCoordChanged(6); - SetTexCoordChanged(7); - - dirty = true; -} - -// Syncs the shader constant buffers with xfmem -void GeometryShaderManager::SetConstants() -{ - if (s_lineptwidth_changed) - { - constants.lineptparams[2] = bpmem.lineptwidth.linesize / 6.f; - constants.lineptparams[3] = bpmem.lineptwidth.pointsize / 6.f; - constants.texoffset[2] = LINE_PT_TEX_OFFSETS[bpmem.lineptwidth.lineoff]; - constants.texoffset[3] = LINE_PT_TEX_OFFSETS[bpmem.lineptwidth.pointoff]; - } - - if (s_viewport_changed) - { - constants.lineptparams[0] = 2.0f * xfmem.viewport.wd; - constants.lineptparams[1] = -2.0f * xfmem.viewport.ht; - } - - if (s_projection_changed) - { - s_projection_changed = false; - - if (g_ActiveConfig.iStereoMode > 0 && xfmem.projection.type == GX_PERSPECTIVE) - { - float offset = (g_ActiveConfig.iStereoSeparation / 1000.0f) * (g_ActiveConfig.iStereoSeparationPercent / 100.0f); - constants.stereoparams[0] = (g_ActiveConfig.bStereoSwapEyes) ? offset : -offset; - constants.stereoparams[1] = (g_ActiveConfig.bStereoSwapEyes) ? -offset : offset; - constants.stereoparams[2] = (g_ActiveConfig.iStereoConvergence / 10.0f) * (g_ActiveConfig.iStereoConvergencePercent / 100.0f); - } - else - { - constants.stereoparams[0] = constants.stereoparams[1] = 0; - } - } + for (int i = 0; i < 8; i++) + SetTexCoordChanged(i); dirty = true; } void GeometryShaderManager::SetViewportChanged() { - s_viewport_changed = true; + constants.lineptparams[0] = 2.0f * xfmem.viewport.wd; + constants.lineptparams[1] = -2.0f * xfmem.viewport.ht; + dirty = true; } void GeometryShaderManager::SetProjectionChanged() { - s_projection_changed = true; + if (g_ActiveConfig.iStereoMode > 0 && xfmem.projection.type == GX_PERSPECTIVE) + { + float offset = (g_ActiveConfig.iStereoSeparation / 1000.0f) * (g_ActiveConfig.iStereoSeparationPercent / 100.0f); + constants.stereoparams[0] = (g_ActiveConfig.bStereoSwapEyes) ? offset : -offset; + constants.stereoparams[1] = (g_ActiveConfig.bStereoSwapEyes) ? -offset : offset; + constants.stereoparams[2] = (g_ActiveConfig.iStereoConvergence / 10.0f) * (g_ActiveConfig.iStereoConvergencePercent / 100.0f); + } + else + { + constants.stereoparams[0] = constants.stereoparams[1] = 0; + } + + dirty = true; } void GeometryShaderManager::SetLinePtWidthChanged() { - s_lineptwidth_changed = true; + constants.lineptparams[2] = bpmem.lineptwidth.linesize / 6.f; + constants.lineptparams[3] = bpmem.lineptwidth.pointsize / 6.f; + constants.texoffset[2] = LINE_PT_TEX_OFFSETS[bpmem.lineptwidth.lineoff]; + constants.texoffset[3] = LINE_PT_TEX_OFFSETS[bpmem.lineptwidth.pointoff]; + dirty = true; } void GeometryShaderManager::SetTexCoordChanged(u8 texmapid) diff --git a/Source/Core/VideoCommon/GeometryShaderManager.h b/Source/Core/VideoCommon/GeometryShaderManager.h index 86cd3ee2ea..eab036fd7e 100644 --- a/Source/Core/VideoCommon/GeometryShaderManager.h +++ b/Source/Core/VideoCommon/GeometryShaderManager.h @@ -18,9 +18,6 @@ public: static void Shutdown(); static void DoState(PointerWrap &p); - // constant management - static void SetConstants(); - static void SetViewportChanged(); static void SetProjectionChanged(); static void SetLinePtWidthChanged(); diff --git a/Source/Core/VideoCommon/VertexManagerBase.cpp b/Source/Core/VideoCommon/VertexManagerBase.cpp index 7484039137..b1bc049fe5 100644 --- a/Source/Core/VideoCommon/VertexManagerBase.cpp +++ b/Source/Core/VideoCommon/VertexManagerBase.cpp @@ -224,7 +224,6 @@ void VertexManager::Flush() // set global constants VertexShaderManager::SetConstants(); PixelShaderManager::SetConstants(); - GeometryShaderManager::SetConstants(); bool useDstAlpha = !g_ActiveConfig.bDstAlphaPass && bpmem.dstalpha.enable &&