diff --git a/Source/Core/VideoCommon/Src/IndexGenerator.cpp b/Source/Core/VideoCommon/Src/IndexGenerator.cpp index 4e44fd8997..aa1a971687 100644 --- a/Source/Core/VideoCommon/Src/IndexGenerator.cpp +++ b/Source/Core/VideoCommon/Src/IndexGenerator.cpp @@ -166,3 +166,10 @@ void IndexGenerator::AddPoints(u32 numVerts) ++numP; } } + + +u32 IndexGenerator::GetRemainingIndices() +{ + u32 max_index = 65535; + return max_index - index; +} diff --git a/Source/Core/VideoCommon/Src/IndexGenerator.h b/Source/Core/VideoCommon/Src/IndexGenerator.h index b889d7ca23..f14d3ae026 100644 --- a/Source/Core/VideoCommon/Src/IndexGenerator.h +++ b/Source/Core/VideoCommon/Src/IndexGenerator.h @@ -41,6 +41,8 @@ public: static u32 GetTriangleindexLen() {return (u32)(Tptr - BASETptr);} static u32 GetLineindexLen() {return (u32)(Lptr - BASELptr);} static u32 GetPointindexLen() {return (u32)(Pptr - BASEPptr);} + + static u32 GetRemainingIndices(); /* enum IndexPrimitiveType { diff --git a/Source/Core/VideoCommon/Src/VertexManagerBase.cpp b/Source/Core/VideoCommon/Src/VertexManagerBase.cpp index 9cfc3aa3f4..87856b5aeb 100644 --- a/Source/Core/VideoCommon/Src/VertexManagerBase.cpp +++ b/Source/Core/VideoCommon/Src/VertexManagerBase.cpp @@ -52,16 +52,18 @@ void VertexManager::PrepareForAdditionalData(int primitive, u32 count, u32 strid { u32 const needed_vertex_bytes = count * stride; - if (needed_vertex_bytes > GetRemainingSize() || count > GetRemainingIndices(primitive)) + if (count > IndexGenerator::GetRemainingIndices() || count > GetRemainingIndices(primitive) || needed_vertex_bytes > GetRemainingSize()) { Flush(); - if (needed_vertex_bytes > GetRemainingSize()) - ERROR_LOG(VIDEO, "VertexManager: Buffer not large enough for all vertices! " - "Increase MAXVBUFFERSIZE or we need primitive breaking afterall."); + if(count > IndexGenerator::GetRemainingIndices()) + ERROR_LOG(VIDEO, "Too less index values. Use 32bit or reset them on flush."); if (count > GetRemainingIndices(primitive)) ERROR_LOG(VIDEO, "VertexManager: Buffer not large enough for all indices! " "Increase MAXIBUFFERSIZE or we need primitive breaking afterall."); + if (needed_vertex_bytes > GetRemainingSize()) + ERROR_LOG(VIDEO, "VertexManager: Buffer not large enough for all vertices! " + "Increase MAXVBUFFERSIZE or we need primitive breaking afterall."); } }