pvr: sorted triangle count incorrect with multiple render passes

causes crash in setProvokingVertex

Fix for MINIDUMP-7A, MINIDUMP-7H, MINIDUMP-7J
This commit is contained in:
Flyinghead 2023-02-05 11:18:18 +01:00
parent badf36899e
commit 927db7f189
1 changed files with 4 additions and 6 deletions

View File

@ -73,13 +73,10 @@ void sortTriangles(rend_context& ctx, RenderPass& pass, const RenderPass& previo
const PolyParam * const pp_base = &ctx.global_param_tr.head()[first];
const PolyParam * const pp_end = pp_base + count;
int vtx_count = ctx.verts.used() - pp_base->first;
if (vtx_count <= 0)
return;
//make lists of all triangles, with their pid and vid
static std::vector<IndexTrig> triangleList;
int vtx_count = ctx.verts.used() - pp_base->first;
triangleList.reserve(vtx_count);
triangleList.clear();
@ -148,6 +145,7 @@ void sortTriangles(rend_context& ctx, RenderPass& pass, const RenderPass& previo
//re-assemble them into drawing commands
size_t initialSize = ctx.sortedTriangles.size();
int idx = -1;
int idxSize = ctx.idx.used();
@ -175,7 +173,7 @@ void sortTriangles(rend_context& ctx, RenderPass& pass, const RenderPass& previo
}
}
if (!ctx.sortedTriangles.empty())
if (!triangleList.empty())
{
SortedTriangle& last = ctx.sortedTriangles.back();
last.count = idxSize + triangleList.size() * 3 - last.first;
@ -185,7 +183,7 @@ void sortTriangles(rend_context& ctx, RenderPass& pass, const RenderPass& previo
// Add a dummy one to signal we're using sorted triangles
ctx.sortedTriangles.push_back({ pp_base, 0, 0});
}
pass.sorted_tr_count = ctx.sortedTriangles.size();
pass.sorted_tr_count = ctx.sortedTriangles.size() - initialSize;
#if PRINT_SORT_STATS
printf("Reassembled into %d from %d\n", (int)ctx.sortedTriangles.size(), pp_end - pp_base);