mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-02-27 03:39:57 +00:00
check for overflow vertex indices, fixes issue 6135
thx @ JMC47 for identifying the reversion, creating a useful bug report with fifo log :-)
This commit is contained in:
parent
59b3600284
commit
470c9ff08a
@ -166,3 +166,10 @@ void IndexGenerator::AddPoints(u32 numVerts)
|
|||||||
++numP;
|
++numP;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
u32 IndexGenerator::GetRemainingIndices()
|
||||||
|
{
|
||||||
|
u32 max_index = 65535;
|
||||||
|
return max_index - index;
|
||||||
|
}
|
||||||
|
@ -41,6 +41,8 @@ public:
|
|||||||
static u32 GetTriangleindexLen() {return (u32)(Tptr - BASETptr);}
|
static u32 GetTriangleindexLen() {return (u32)(Tptr - BASETptr);}
|
||||||
static u32 GetLineindexLen() {return (u32)(Lptr - BASELptr);}
|
static u32 GetLineindexLen() {return (u32)(Lptr - BASELptr);}
|
||||||
static u32 GetPointindexLen() {return (u32)(Pptr - BASEPptr);}
|
static u32 GetPointindexLen() {return (u32)(Pptr - BASEPptr);}
|
||||||
|
|
||||||
|
static u32 GetRemainingIndices();
|
||||||
/*
|
/*
|
||||||
enum IndexPrimitiveType
|
enum IndexPrimitiveType
|
||||||
{
|
{
|
||||||
|
@ -52,16 +52,18 @@ void VertexManager::PrepareForAdditionalData(int primitive, u32 count, u32 strid
|
|||||||
{
|
{
|
||||||
u32 const needed_vertex_bytes = count * stride;
|
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();
|
Flush();
|
||||||
|
|
||||||
if (needed_vertex_bytes > GetRemainingSize())
|
if(count > IndexGenerator::GetRemainingIndices())
|
||||||
ERROR_LOG(VIDEO, "VertexManager: Buffer not large enough for all vertices! "
|
ERROR_LOG(VIDEO, "Too less index values. Use 32bit or reset them on flush.");
|
||||||
"Increase MAXVBUFFERSIZE or we need primitive breaking afterall.");
|
|
||||||
if (count > GetRemainingIndices(primitive))
|
if (count > GetRemainingIndices(primitive))
|
||||||
ERROR_LOG(VIDEO, "VertexManager: Buffer not large enough for all indices! "
|
ERROR_LOG(VIDEO, "VertexManager: Buffer not large enough for all indices! "
|
||||||
"Increase MAXIBUFFERSIZE or we need primitive breaking afterall.");
|
"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.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user