Rpcs3: RSX: Unknown cull face 0x0

Created on 28 Feb 2017  路  9Comments  路  Source: RPCS3/rpcs3

I saw that in hack/versus too
VIDEO

F {rsx::thread} class std::runtime_error thrown: Unknown cull face 0x0
(in file Emu\RSX\gcm_enums.cpp:861)

LOG

Bug RSX

Most helpful comment

Its also tricky since I know that writing invalid values to some registers will kill hardware with a method error exception. We'll need to identify those that can survive bad writes from those that can't.

All 9 comments

I can see it ran using GL backend .How about DX12 and Vulkan ? has same cull face error .

All backends have the same issue.

I see. Thanks @JohnGodgames

So apparently there are select versions of RPCS3, where this issue does not appear,at least with Soulcalibur 4. Might be worth trying those out:
http://www.emunewz.net/forum/showthread.php?tid=179000

The same error happens in Naruto Shippuden: Ultimate Ninja Storm 3 [BLES01764] when you use the Shikamaru麓s Ultimate Jutsu.

"F {rsx::thread} class std::runtime_error thrown: Unknown cull face 0x0"
"(in file C:\rpcs3\rpcs3\Emu\RSX\gcm_enums.cpp:838)"

The game is sending a null value to the switch case.
Setting a default case, "default: " to the switch prevent it to trigger and appearently doesn麓t affect the game negatively.

image

This problem still exist in Hack Versus with the latest master build version as of 6 august 2017... its happens constantly when sora did the r1 r2 attack

This Issue appears to still exist in Naruto Shippuden Ultimate Ninja Storm 2, when Shikamaru麓s Ultimate Jutsu is used.

F {rsx::thread} class std::runtime_error thrown: Unknown cull face 0x0
(in file Emu\RSX\gcm_enums.cpp:838)

Appears both in Single Player Campaign and Free Battle

capturebug

From hardware testing, when an invalid value targets these registers it gets discarded and replaced by previous value. tested with NV4097_SET_CULL_FACE and NV4097_SET_CULL_FACE_ENABLE
this is unfixable at the current code state without a rewrite, as register writes always modify previous value.
an optional solution is to save the previous value of the register before writing a new one, and then checking the validity of the value later in a method call.

Testcase, the testcase is using an intentional crash dump to get the current state of these registers.

Adding a default case and returning rsx::cull_face::back (initial register mode) in rsx::to_cull_face gets Monster Jam: Path of Destruction from loadable into ingame.

image

Its also tricky since I know that writing invalid values to some registers will kill hardware with a method error exception. We'll need to identify those that can survive bad writes from those that can't.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

xddxd picture xddxd  路  3Comments

Emulator-Team-2 picture Emulator-Team-2  路  3Comments

Xcedf picture Xcedf  路  3Comments

xiangzhai picture xiangzhai  路  3Comments

Luffykun007 picture Luffykun007  路  3Comments