mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-09-03 11:15:20 +02:00
CalculateDepthDraw guarded depthVertexCount_ with vertexCount, which is the index count - but depthVertexCount_ grows by the number of decoded vertices, which for an indexed draw can be far larger. Two draws with 6 indices spanning 40000 vertices each therefore passed the check and wrote ~700KB past the end of depthTransformed_. It also never bounded depthIndexCount_ against depthIndices_ at all, which only has room for 3 indices per vertex slot while draws routinely produce more. Pass the decoded count in separately and check both. DepthRasterClipIndexedTriangles duplicated culling-disabled triangles twice: once in the collect loop (added for Syphon Filter, #21498) and again in the output stage, which was the older code and should have been removed then. So it emitted four triangles per input triangle into buffers sized for one, and did twice the rasterization work it needed to in that mode. Removed the output-stage copy, and gave the function the output capacity so it stops when full - even at 2x, a culling-disabled draw over ~32k indices doesn't fit. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DCPmm7FoQUoqrbMdhfqhQ2