mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-19 07:21:40 +00:00
VideoCommon: De-globalize GeometryShaderManager class.
This commit is contained in:
parent
1bfecd8003
commit
cb0a603c72
15 changed files with 90 additions and 67 deletions
|
@ -55,7 +55,8 @@ void BPInit()
|
|||
}
|
||||
|
||||
static void BPWritten(PixelShaderManager& pixel_shader_manager,
|
||||
VertexShaderManager& vertex_shader_manager, const BPCmd& bp,
|
||||
VertexShaderManager& vertex_shader_manager,
|
||||
GeometryShaderManager& geometry_shader_manager, const BPCmd& bp,
|
||||
int cycles_into_future)
|
||||
{
|
||||
/*
|
||||
|
@ -138,10 +139,10 @@ static void BPWritten(PixelShaderManager& pixel_shader_manager,
|
|||
case BPMEM_SCISSORBR: // Scissor Rectable Bottom, Right
|
||||
case BPMEM_SCISSOROFFSET: // Scissor Offset
|
||||
vertex_shader_manager.SetViewportChanged();
|
||||
GeometryShaderManager::SetViewportChanged();
|
||||
geometry_shader_manager.SetViewportChanged();
|
||||
return;
|
||||
case BPMEM_LINEPTWIDTH: // Line Width
|
||||
GeometryShaderManager::SetLinePtWidthChanged();
|
||||
geometry_shader_manager.SetLinePtWidthChanged();
|
||||
return;
|
||||
case BPMEM_ZMODE: // Depth Control
|
||||
PRIM_LOG("zmode: test={}, func={}, upd={}", bpmem.zmode.testenable, bpmem.zmode.func,
|
||||
|
@ -674,7 +675,7 @@ static void BPWritten(PixelShaderManager& pixel_shader_manager,
|
|||
if (bp.changes)
|
||||
{
|
||||
pixel_shader_manager.SetTexCoordChanged((bp.address - BPMEM_SU_SSIZE) >> 1);
|
||||
GeometryShaderManager::SetTexCoordChanged((bp.address - BPMEM_SU_SSIZE) >> 1);
|
||||
geometry_shader_manager.SetTexCoordChanged((bp.address - BPMEM_SU_SSIZE) >> 1);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
@ -763,8 +764,8 @@ void LoadBPReg(u8 reg, u32 value, int cycles_into_future)
|
|||
if (reg != BPMEM_BP_MASK)
|
||||
bpmem.bpMask = 0xFFFFFF;
|
||||
|
||||
BPWritten(system.GetPixelShaderManager(), system.GetVertexShaderManager(), bp,
|
||||
cycles_into_future);
|
||||
BPWritten(system.GetPixelShaderManager(), system.GetVertexShaderManager(),
|
||||
system.GetGeometryShaderManager(), bp, cycles_into_future);
|
||||
}
|
||||
|
||||
void LoadBPRegPreprocess(u8 reg, u32 value, int cycles_into_future)
|
||||
|
|
|
@ -12,13 +12,7 @@
|
|||
#include "VideoCommon/VideoConfig.h"
|
||||
#include "VideoCommon/XFMemory.h"
|
||||
|
||||
static const int LINE_PT_TEX_OFFSETS[8] = {0, 16, 8, 4, 2, 1, 1, 1};
|
||||
|
||||
GeometryShaderConstants GeometryShaderManager::constants;
|
||||
bool GeometryShaderManager::dirty;
|
||||
|
||||
static bool s_projection_changed;
|
||||
static bool s_viewport_changed;
|
||||
static constexpr int LINE_PT_TEX_OFFSETS[8] = {0, 16, 8, 4, 2, 1, 1, 1};
|
||||
|
||||
void GeometryShaderManager::Init()
|
||||
{
|
||||
|
@ -35,7 +29,7 @@ void GeometryShaderManager::Dirty()
|
|||
{
|
||||
// This function is called after a savestate is loaded.
|
||||
// Any constants that can changed based on settings should be re-calculated
|
||||
s_projection_changed = true;
|
||||
m_projection_changed = true;
|
||||
|
||||
// Uses EFB scale config
|
||||
SetLinePtWidthChanged();
|
||||
|
@ -43,20 +37,20 @@ void GeometryShaderManager::Dirty()
|
|||
dirty = true;
|
||||
}
|
||||
|
||||
static void SetVSExpand(VSExpand expand)
|
||||
void GeometryShaderManager::SetVSExpand(VSExpand expand)
|
||||
{
|
||||
if (GeometryShaderManager::constants.vs_expand != expand)
|
||||
if (constants.vs_expand != expand)
|
||||
{
|
||||
GeometryShaderManager::constants.vs_expand = expand;
|
||||
GeometryShaderManager::dirty = true;
|
||||
constants.vs_expand = expand;
|
||||
dirty = true;
|
||||
}
|
||||
}
|
||||
|
||||
void GeometryShaderManager::SetConstants(PrimitiveType prim)
|
||||
{
|
||||
if (s_projection_changed && g_ActiveConfig.stereo_mode != StereoMode::Off)
|
||||
if (m_projection_changed && g_ActiveConfig.stereo_mode != StereoMode::Off)
|
||||
{
|
||||
s_projection_changed = false;
|
||||
m_projection_changed = false;
|
||||
|
||||
if (xfmem.projection.type == ProjectionType::Perspective)
|
||||
{
|
||||
|
@ -86,9 +80,9 @@ void GeometryShaderManager::SetConstants(PrimitiveType prim)
|
|||
SetVSExpand(VSExpand::None);
|
||||
}
|
||||
|
||||
if (s_viewport_changed)
|
||||
if (m_viewport_changed)
|
||||
{
|
||||
s_viewport_changed = false;
|
||||
m_viewport_changed = false;
|
||||
|
||||
constants.lineptparams[0] = 2.0f * xfmem.viewport.wd;
|
||||
constants.lineptparams[1] = -2.0f * xfmem.viewport.ht;
|
||||
|
@ -99,12 +93,12 @@ void GeometryShaderManager::SetConstants(PrimitiveType prim)
|
|||
|
||||
void GeometryShaderManager::SetViewportChanged()
|
||||
{
|
||||
s_viewport_changed = true;
|
||||
m_viewport_changed = true;
|
||||
}
|
||||
|
||||
void GeometryShaderManager::SetProjectionChanged()
|
||||
{
|
||||
s_projection_changed = true;
|
||||
m_projection_changed = true;
|
||||
}
|
||||
|
||||
void GeometryShaderManager::SetLinePtWidthChanged()
|
||||
|
@ -129,8 +123,8 @@ void GeometryShaderManager::SetTexCoordChanged(u8 texmapid)
|
|||
|
||||
void GeometryShaderManager::DoState(PointerWrap& p)
|
||||
{
|
||||
p.Do(s_projection_changed);
|
||||
p.Do(s_viewport_changed);
|
||||
p.Do(m_projection_changed);
|
||||
p.Do(m_viewport_changed);
|
||||
|
||||
p.Do(constants);
|
||||
|
||||
|
|
|
@ -13,16 +13,22 @@ enum class PrimitiveType : u32;
|
|||
class GeometryShaderManager
|
||||
{
|
||||
public:
|
||||
static void Init();
|
||||
static void Dirty();
|
||||
static void DoState(PointerWrap& p);
|
||||
void Init();
|
||||
void Dirty();
|
||||
void DoState(PointerWrap& p);
|
||||
|
||||
static void SetConstants(PrimitiveType prim);
|
||||
static void SetViewportChanged();
|
||||
static void SetProjectionChanged();
|
||||
static void SetLinePtWidthChanged();
|
||||
static void SetTexCoordChanged(u8 texmapid);
|
||||
void SetConstants(PrimitiveType prim);
|
||||
void SetViewportChanged();
|
||||
void SetProjectionChanged();
|
||||
void SetLinePtWidthChanged();
|
||||
void SetTexCoordChanged(u8 texmapid);
|
||||
|
||||
static GeometryShaderConstants constants;
|
||||
static bool dirty;
|
||||
GeometryShaderConstants constants{};
|
||||
bool dirty = false;
|
||||
|
||||
private:
|
||||
void SetVSExpand(VSExpand expand);
|
||||
|
||||
bool m_projection_changed = false;
|
||||
bool m_viewport_changed = false;
|
||||
};
|
||||
|
|
|
@ -320,9 +320,10 @@ void VertexManagerBase::InvalidateConstants()
|
|||
{
|
||||
auto& system = Core::System::GetInstance();
|
||||
auto& vertex_shader_manager = system.GetVertexShaderManager();
|
||||
auto& geometry_shader_manager = system.GetGeometryShaderManager();
|
||||
auto& pixel_shader_manager = system.GetPixelShaderManager();
|
||||
vertex_shader_manager.dirty = true;
|
||||
GeometryShaderManager::dirty = true;
|
||||
geometry_shader_manager.dirty = true;
|
||||
pixel_shader_manager.dirty = true;
|
||||
}
|
||||
|
||||
|
@ -487,6 +488,7 @@ void VertexManagerBase::Flush()
|
|||
|
||||
auto& system = Core::System::GetInstance();
|
||||
auto& pixel_shader_manager = system.GetPixelShaderManager();
|
||||
auto& geometry_shader_manager = system.GetGeometryShaderManager();
|
||||
auto& vertex_shader_manager = system.GetVertexShaderManager();
|
||||
|
||||
CalculateBinormals(VertexLoaderManager::GetCurrentVertexFormat());
|
||||
|
@ -566,7 +568,7 @@ void VertexManagerBase::Flush()
|
|||
g_texture_cache->BindTextures(used_textures);
|
||||
|
||||
// Now we can upload uniforms, as nothing else will override them.
|
||||
GeometryShaderManager::SetConstants(m_current_primitive_type);
|
||||
geometry_shader_manager.SetConstants(m_current_primitive_type);
|
||||
pixel_shader_manager.SetConstants();
|
||||
UploadUniforms();
|
||||
|
||||
|
|
|
@ -329,7 +329,7 @@ void VideoBackendBase::InitializeShared()
|
|||
BPInit();
|
||||
VertexLoaderManager::Init();
|
||||
system.GetVertexShaderManager().Init();
|
||||
GeometryShaderManager::Init();
|
||||
system.GetGeometryShaderManager().Init();
|
||||
system.GetPixelShaderManager().Init();
|
||||
TMEM::Init();
|
||||
|
||||
|
|
|
@ -79,7 +79,7 @@ void VideoCommon_DoState(PointerWrap& p)
|
|||
system.GetVertexShaderManager().DoState(p);
|
||||
p.DoMarker("VertexShaderManager");
|
||||
|
||||
GeometryShaderManager::DoState(p);
|
||||
system.GetGeometryShaderManager().DoState(p);
|
||||
p.DoMarker("GeometryShaderManager");
|
||||
|
||||
g_vertex_manager->DoState(p);
|
||||
|
|
|
@ -28,7 +28,8 @@ static void XFMemWritten(VertexShaderManager& vertex_shader_manager, u32 transfe
|
|||
vertex_shader_manager.InvalidateXFRange(baseAddress, baseAddress + transferSize);
|
||||
}
|
||||
|
||||
static void XFRegWritten(VertexShaderManager& vertex_shader_manager, u32 address, u32 value)
|
||||
static void XFRegWritten(Core::System& system, VertexShaderManager& vertex_shader_manager,
|
||||
u32 address, u32 value)
|
||||
{
|
||||
if (address >= XFMEM_REGISTERS_START && address < XFMEM_REGISTERS_END)
|
||||
{
|
||||
|
@ -119,14 +120,11 @@ static void XFRegWritten(VertexShaderManager& vertex_shader_manager, u32 address
|
|||
case XFMEM_SETVIEWPORT + 3:
|
||||
case XFMEM_SETVIEWPORT + 4:
|
||||
case XFMEM_SETVIEWPORT + 5:
|
||||
{
|
||||
auto& system = Core::System::GetInstance();
|
||||
g_vertex_manager->Flush();
|
||||
vertex_shader_manager.SetViewportChanged();
|
||||
system.GetPixelShaderManager().SetViewportChanged();
|
||||
GeometryShaderManager::SetViewportChanged();
|
||||
system.GetGeometryShaderManager().SetViewportChanged();
|
||||
break;
|
||||
}
|
||||
|
||||
case XFMEM_SETPROJECTION:
|
||||
case XFMEM_SETPROJECTION + 1:
|
||||
|
@ -137,7 +135,7 @@ static void XFRegWritten(VertexShaderManager& vertex_shader_manager, u32 address
|
|||
case XFMEM_SETPROJECTION + 6:
|
||||
g_vertex_manager->Flush();
|
||||
vertex_shader_manager.SetProjectionChanged();
|
||||
GeometryShaderManager::SetProjectionChanged();
|
||||
system.GetGeometryShaderManager().SetProjectionChanged();
|
||||
break;
|
||||
|
||||
case XFMEM_SETNUMTEXGENS: // GXSetNumTexGens
|
||||
|
@ -249,7 +247,7 @@ void LoadXFReg(u16 base_address, u8 transfer_size, const u8* data)
|
|||
{
|
||||
const u32 value = Common::swap32(data);
|
||||
|
||||
XFRegWritten(vertex_shader_manager, address, value);
|
||||
XFRegWritten(system, vertex_shader_manager, address, value);
|
||||
((u32*)&xfmem)[address] = value;
|
||||
|
||||
data += 4;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue