rpcs3 icon indicating copy to clipboard operation
rpcs3 copied to clipboard

[Regression] Gran Turismo 5 Crashing and Freezing

Open ozzfreak opened this issue 8 months ago • 5 comments

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

ozzfreak avatar Apr 24 '25 20:04 ozzfreak

Need Information: Wrong build blamed, it can't be that build causing the issue.

AniLeo avatar Apr 24 '25 20:04 AniLeo

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 avatar Apr 24 '25 22:04 ozzfreak

@ozzfreak you could test if the new build (probably 0.0.36-17824) fixed the issue

digant73 avatar Apr 25 '25 10:04 digant73

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

ozzfreak avatar Apr 25 '25 15:04 ozzfreak

as reported in #17099, I also see freezes and crashes. The issue is not present on v0.0.36-17815

digant73 avatar Apr 26 '25 18:04 digant73

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);
		}

digant73 avatar Apr 27 '25 10:04 digant73

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?

kd-11 avatar Apr 27 '25 12:04 kd-11

Should be fixed by https://github.com/RPCS3/rpcs3/pull/17107

kd-11 avatar Apr 27 '25 12:04 kd-11