summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon
diff options
context:
space:
mode:
authorJordan Woyak <jordan.woyak@gmail.com>2013-02-22 01:41:52 -0600
committerJordan Woyak <jordan.woyak@gmail.com>2013-02-22 01:41:52 -0600
commitdb1be085c2d0a359e5ee561bbbad8e8428a72552 (patch)
tree32160e38474783c4407ea1cacb9837439827ff2e /Source/Core/VideoCommon
parent21bd5be753efb016ab5e3a75bf5e6f8e71a3576a (diff)
VertexManager cleanup
Diffstat (limited to 'Source/Core/VideoCommon')
-rw-r--r--Source/Core/VideoCommon/Src/VertexLoader.cpp3
-rw-r--r--Source/Core/VideoCommon/Src/VertexManagerBase.cpp74
-rw-r--r--Source/Core/VideoCommon/Src/VertexManagerBase.h35
3 files changed, 52 insertions, 60 deletions
diff --git a/Source/Core/VideoCommon/Src/VertexLoader.cpp b/Source/Core/VideoCommon/Src/VertexLoader.cpp
index 408c864406..5e1490e020 100644
--- a/Source/Core/VideoCommon/Src/VertexLoader.cpp
+++ b/Source/Core/VideoCommon/Src/VertexLoader.cpp
@@ -571,8 +571,9 @@ void VertexLoader::RunVertices(int vtx_attr_group, int primitive, int count)
"Increase MAXVBUFFERSIZE or we need primitive breaking afterall.");
}
- VertexManager::AddVertices(primitive, count);
ConvertVertices(count);
+ VertexManager::AddVertices(primitive, count);
+ //VertexManager::Flush();
}
diff --git a/Source/Core/VideoCommon/Src/VertexManagerBase.cpp b/Source/Core/VideoCommon/Src/VertexManagerBase.cpp
index af4d646cc3..131d6de42a 100644
--- a/Source/Core/VideoCommon/Src/VertexManagerBase.cpp
+++ b/Source/Core/VideoCommon/Src/VertexManagerBase.cpp
@@ -12,25 +12,17 @@
#include "BPStructs.h"
#include "VertexManagerBase.h"
+#include "MainBase.h"
#include "VideoConfig.h"
VertexManager *g_vertex_manager;
-u8 *VertexManager::s_pBaseBufferPointer;
u8 *VertexManager::s_pCurBufferPointer;
+u8 *VertexManager::s_pBaseBufferPointer;
u8 *VertexManager::s_pEndBufferPointer;
-u8 *VertexManager::LocalVBuffer;
-u16 *VertexManager::TIBuffer;
-u16 *VertexManager::LIBuffer;
-u16 *VertexManager::PIBuffer;
-
-bool VertexManager::Flushed;
-
VertexManager::VertexManager()
{
- Flushed = false;
-
LocalVBuffer = new u8[MAXVBUFFERSIZE];
s_pCurBufferPointer = s_pBaseBufferPointer = LocalVBuffer;
s_pEndBufferPointer = s_pBaseBufferPointer + MAXVBUFFERSIZE;
@@ -39,12 +31,7 @@ VertexManager::VertexManager()
LIBuffer = new u16[MAXIBUFFERSIZE];
PIBuffer = new u16[MAXIBUFFERSIZE];
- IndexGenerator::Start(TIBuffer, LIBuffer, PIBuffer);
-}
-
-void VertexManager::ResetBuffer()
-{
- s_pCurBufferPointer = s_pBaseBufferPointer;
+ ResetBuffer();
}
VertexManager::~VertexManager()
@@ -59,12 +46,25 @@ VertexManager::~VertexManager()
ResetBuffer();
}
+void VertexManager::ResetBuffer()
+{
+ s_pCurBufferPointer = s_pBaseBufferPointer;
+ IndexGenerator::Start(TIBuffer, LIBuffer, PIBuffer);
+}
+
int VertexManager::GetRemainingSize()
{
return (int)(s_pEndBufferPointer - s_pCurBufferPointer);
}
+bool VertexManager::IsFlushed() const
+{
+ return s_pBaseBufferPointer == s_pCurBufferPointer;
+}
+
// Not used anywhere
+// TODO: use this
+#if 0
int VertexManager::GetRemainingVertices(int primitive)
{
switch (primitive)
@@ -90,42 +90,38 @@ int VertexManager::GetRemainingVertices(int primitive)
break;
}
}
+#endif
void VertexManager::AddVertices(int primitive, u32 numVertices)
{
if (numVertices <= 0)
return;
- if (Flushed)
- {
- IndexGenerator::Start(TIBuffer, LIBuffer, PIBuffer);
- Flushed = false;
- }
-
ADDSTAT(stats.thisFrame.numPrims, numVertices);
INCSTAT(stats.thisFrame.numPrimitiveJoins);
+
IndexGenerator::AddIndices(primitive, numVertices);
}
void VertexManager::Flush()
{
+ if (g_vertex_manager->IsFlushed())
+ return;
+
// loading a state will invalidate BP, so check for it
g_video_backend->CheckInvalidState();
+ VideoFifo_CheckEFBAccess();
+
g_vertex_manager->vFlush();
+
+ g_vertex_manager->ResetBuffer();
}
// TODO: need to merge more stuff into VideoCommon to use this
#if (0)
void VertexManager::Flush()
{
- if (s_pBaseBufferPointer == s_pCurBufferPointer || Flushed)
- return;
-
- Flushed = true;
-
- VideoFifo_CheckEFBAccess();
-
#if defined(_DEBUG) || defined(DEBUGFAST)
PRIM_LOG("frame%d:\n texgen=%d, numchan=%d, dualtex=%d, ztex=%d, cole=%d, alpe=%d, ze=%d", g_ActiveConfig.iSaveTargetId, xfregs.numTexGens,
xfregs.nNumChans, (int)xfregs.bEnableDualTexTransform, bpmem.ztex2.op,
@@ -198,9 +194,9 @@ void VertexManager::Flush()
// finally bind
if (false == PixelShaderCache::SetShader(false, g_nativeVertexFmt->m_components))
- goto shader_fail;
+ return;
if (false == VertexShaderCache::SetShader(g_nativeVertexFmt->m_components))
- goto shader_fail;
+ return;
const int stride = g_nativeVertexFmt->GetVertexStride();
//if (g_nativeVertexFmt)
@@ -212,7 +208,7 @@ void VertexManager::Flush()
if (false == g_ActiveConfig.bDstAlphaPass && bpmem.dstalpha.enable && bpmem.blendmode.alphaupdate)
{
if (false == PixelShaderCache::SetShader(true, g_nativeVertexFmt->m_components))
- goto shader_fail;
+ return;
g_vertex_manager->Draw(stride, true);
}
@@ -246,9 +242,6 @@ void VertexManager::Flush()
}
#endif
++g_Config.iSaveTargetId;
-
-shader_fail:
- ResetBuffer();
}
#endif
@@ -259,12 +252,9 @@ void VertexManager::DoState(PointerWrap& p)
void VertexManager::DoStateShared(PointerWrap& p)
{
- p.DoPointer(s_pCurBufferPointer, LocalVBuffer);
+ p.DoPointer(s_pCurBufferPointer, g_vertex_manager->LocalVBuffer);
p.DoArray(LocalVBuffer, MAXVBUFFERSIZE);
- p.DoArray(TIBuffer, MAXIBUFFERSIZE);
- p.DoArray(LIBuffer, MAXIBUFFERSIZE);
- p.DoArray(PIBuffer, MAXIBUFFERSIZE);
-
- if (p.GetMode() == PointerWrap::MODE_READ)
- Flushed = false;
+ p.DoArray(g_vertex_manager->TIBuffer, MAXIBUFFERSIZE);
+ p.DoArray(g_vertex_manager->LIBuffer, MAXIBUFFERSIZE);
+ p.DoArray(g_vertex_manager->PIBuffer, MAXIBUFFERSIZE);
}
diff --git a/Source/Core/VideoCommon/Src/VertexManagerBase.h b/Source/Core/VideoCommon/Src/VertexManagerBase.h
index d846a65b90..4bf5541cbd 100644
--- a/Source/Core/VideoCommon/Src/VertexManagerBase.h
+++ b/Source/Core/VideoCommon/Src/VertexManagerBase.h
@@ -32,46 +32,47 @@ public:
static void AddVertices(int _primitive, u32 _numVertices);
- // TODO: protected?
- static u8 *s_pBaseBufferPointer;
static u8 *s_pCurBufferPointer;
+ static u8 *s_pBaseBufferPointer;
static u8 *s_pEndBufferPointer;
static int GetRemainingSize();
- static int GetRemainingVertices(int primitive);
+
+ //int GetRemainingVertices(int primitive);
static void Flush();
virtual ::NativeVertexFormat* CreateNativeVertexFormat() = 0;
- static u16* GetTriangleIndexBuffer() { return TIBuffer; }
- static u16* GetLineIndexBuffer() { return LIBuffer; }
- static u16* GetPointIndexBuffer() { return PIBuffer; }
- static u8* GetVertexBuffer() { return s_pBaseBufferPointer; }
+ // TODO: use these instead of TIBuffer, etc
+
+// u16* GetTriangleIndexBuffer() { return TIBuffer; }
+// u16* GetLineIndexBuffer() { return LIBuffer; }
+// u16* GetPointIndexBuffer() { return PIBuffer; }
+// u8* GetVertexBuffer() { return s_pBaseBufferPointer; }
static void DoState(PointerWrap& p);
virtual void CreateDeviceObjects(){};
virtual void DestroyDeviceObjects(){};
+
protected:
- // TODO: make private after Flush() is merged
- static void ResetBuffer();
-
- static u16 *TIBuffer;
- static u16 *LIBuffer;
- static u16 *PIBuffer;
-
- static bool Flushed;
+ u16* TIBuffer;
+ u16* LIBuffer;
+ u16* PIBuffer;
virtual void vDoState(PointerWrap& p) { DoStateShared(p); }
void DoStateShared(PointerWrap& p);
private:
+ bool IsFlushed() const;
+
+ void ResetBuffer();
+
//virtual void Draw(u32 stride, bool alphapass) = 0;
// temp
virtual void vFlush() = 0;
- static u8 *LocalVBuffer;
-
+ u8* LocalVBuffer;
};
extern VertexManager *g_vertex_manager;