[Regression] Gran Turismo 5 Crashing and Freezing
17815 RPCS3.log 17819 RPCS3.log 17820.log
Quick summary
During race, long, evenly spaced freezes happen. Tested on Expert trials, NASCAR Cup, Daytona track.
Details
Did a nightly update on 4/23 and experienced issues. Downgraded to an older build of RPCS3 and it was fine. Tried another update on 4/24, same issues.
Build rpcs3-v0.0.36-17815-b2feff7d_win64 is working just fine.
Build with regression
rpcs3-v0.0.36-17819-c401c0f9_win64
Also present in rpcs3-v0.0.36-17820-1960b5a6_win64
System configuration
Windows 11 10.0.26100 Intel i9 9900k nVidia RTX 2080 Ti Driver 572.83
Other details
Using Recompiler ASMJIT to get around car buying crash
Need Information: Wrong build blamed, it can't be that build causing the issue.
Sorry, got my nightlies mixed up. Updated everything. I could not replicate the crash again with any build, though it happened yesterday and this morning. Set as just a stuttering/freeze now
@ozzfreak you could test if the new build (probably 0.0.36-17824) fixed the issue
Unfortunately same issue with both 17824 and 17826. I did manage to get the car change / close button crash this time too on 17824. 17815 build still runs perfectly.
17815 RPCS3.log 17824 RPCS3.log 17826 RPCS3.log crash RPCS3.log
as reported in #17099, I also see freezes and crashes. The issue is not present on v0.0.36-17815
the regression seems to be confined in the following piece of code starting at line 971 in VKDraw.cpp.
The issue is not present if that block is commented out (so multidraw feature not used)
else if (m_device->get_multidraw_support())
{
const auto subranges = draw_call.get_subranges();
const auto subranges_count = ::size32(subranges);
const auto allocation_size = subranges_count * 3;
m_multidraw_parameters_buffer.resize(allocation_size);
auto _ptr = m_multidraw_parameters_buffer.data();
u32 vertex_offset = 0;
for (const auto& range : subranges)
{
const auto count = get_index_count(draw_call.primitive, range.count);
*_ptr++ = 0;
*_ptr++ = vertex_offset;
*_ptr++ = count;
vertex_offset += count;
}
_vkCmdDrawMultiIndexedEXT(*m_current_command_buffer, subranges_count, reinterpret_cast<const VkMultiDrawIndexedInfoEXT*>(_ptr), 1, 0, sizeof(u32) * 3, nullptr);
}
the regression seems to be confined in the following piece of code starting at line 971 in
VKDraw.cpp. The issue is not present if that block is commented out (so multidraw feature not used)else if (m_device->get_multidraw_support()) { const auto subranges = draw_call.get_subranges(); const auto subranges_count = ::size32(subranges); const auto allocation_size = subranges_count * 3; m_multidraw_parameters_buffer.resize(allocation_size); auto _ptr = m_multidraw_parameters_buffer.data(); u32 vertex_offset = 0; for (const auto& range : subranges) { const auto count = get_index_count(draw_call.primitive, range.count); *_ptr++ = 0; *_ptr++ = vertex_offset; *_ptr++ = count; vertex_offset += count; } _vkCmdDrawMultiIndexedEXT(*m_current_command_buffer, subranges_count, reinterpret_cast<const VkMultiDrawIndexedInfoEXT*>(_ptr), 1, 0, sizeof(u32) * 3, nullptr); }
What does the crash look like in a debugger? Missing function pointer? Or memory R/W exception?
Should be fixed by https://github.com/RPCS3/rpcs3/pull/17107