RPCS3 / rpcs3

PS3 emulator/debugger
https://rpcs3.net/
GNU General Public License v2.0
15.15k stars 1.89k forks source link

Catherine [BLUS-30428] crash in dx12 #1300

Closed danilaml closed 8 years ago

danilaml commented 8 years ago

It crashes at start with:

HLE: W {PPU[0x1] Thread (main_thread)[0x00c2562c]} sysPrxForUser: sys_lwmutex_create(lwmutex=*0x24d5eb58, attr=*0xd000ef60)
HLE: W {PPU[0x1] Thread (main_thread)[0x00c2562c]} sysPrxForUser: sys_lwmutex_create(lwmutex=*0x24d5ecc0, attr=*0xd000ef60)
HLE: W {PPU[0x1] Thread (main_thread)[0x00c2562c]} sysPrxForUser: sys_lwmutex_create(lwmutex=*0x24d5ed38, attr=*0xd000ef60)
RSX: W {rsx::thread} Creating RTT
RSX: W {rsx::thread} Creating RTT
RSX: W {rsx::thread} VP not found in buffer!
RSX: W {rsx::thread} FP not found in buffer!
RSX: W {rsx::thread} Add program :
RSX: W {rsx::thread} *** vp id = 0
RSX: W {rsx::thread} *** fp id = 1
RSX: E {rsx::thread} file Emu\RSX\D3D12\D3D12Formats.cpp line 261 : Unsupported min filter

https://github.com/RPCS3/rpcs3/blob/b46c66b4c7a3245920a434a71d3482919561b94e/rpcs3/Emu/RSX/D3D12/D3D12Formats.cpp#L261

It's black windows with "28.46 fps" (not changing) with oGL.

Zangetsu38 commented 8 years ago

@danilaml I have a same crash, debuger point this line @vlj

std::chrono::time_pointstd::chrono::system_clock texture_duration_start = std::chrono::system_clock::now();

And Log show same for you :

RSX: E {rsx::thread} file Emu\RSX\D3D12\D3D12Formats.cpp line 261 : Unsupported min filter

And after line 275

RSX: E {rsx::thread} file Emu\RSX\D3D12\D3D12Formats.cpp line 275 : Unsupported Wrong mag filter

danilaml commented 8 years ago

@vlj is CELL_GCM_TEXTURE_CONVOLUTION_MIN filter hard to implement?

vlj commented 8 years ago

I don't know what the filter do. Convolution is a very generic mathematical filter so some data should be provided.

danilaml commented 8 years ago

@vlj well I found this: By default this framework doesn’t perform any antialiasing, so this field is left at a valid default value - quincunx filtering, which takes 5 texture samples in the shape of an x (perhaps better visualised as the five dots on the 5th side of a die). To enable this advanced texture filtering, the texture filtering type should be set to the CELL GCM TEXTURE CONVOLUTION MIN symbolic constant. here:https://research.ncl.ac.uk/game/mastersdegree/workshops/ps3introductiontogcm/GCM%20Texturing.pdf (page 6) Not sure if enough/correct. Someone from the team might have better docs/understanding.

vlj commented 8 years ago

I'm not sure it's possible to (easily) emulate, it's a specific nvidia filtering thing. However iiuc bilinear filtering should works in a close maneeer.

danilaml commented 8 years ago

@vlj how to use it? If it's only post-processing it'd probably wouldn't matter that much right now if it's not exactly the same.

vlj commented 8 years ago

I pushed the fallback path to d3d12 branch (it's used by Castle of Illusion too) can you see if it works ?

Zangetsu38 commented 8 years ago

Works in wip ^^

danilaml commented 8 years ago

@vlj doesn't work on d3d12. It crashes with exception in: image On wip, last time I checked (after Micky Mouse commit) it stopped crashing on "unsupported filter" and just entered some wait loop (basically hanged).

danilaml commented 8 years ago

It crashes with unreachable("Wrong mag filter"); in get_mag_filter mag_filter is 4 btw.

vlj commented 8 years ago

And now ? I pushed a fix that uses bilinear if mag filter isn't recognised (not sure if 4 is a valid mag filter :/ )

danilaml commented 8 years ago

@vlj now the behaviour is like with wip branch 0 hang (fps doesn't change) after I press resume after

E {PPU[0x189] Thread (game contents hdd install)[0x00c24b2c]} cellGame: cellGameCreateGameData(): failed to create content directory ('/dev_hdd1/game/BLUS30428')
E {PPU Recompilation Engine} Exception: Access violation reading location 0x33bc00b
(in file ..\Utilities\Thread.cpp:1122, in function _se_translator)

But on wip it didn't need mag fallback though. Could be masking error elsewhere.

Zangetsu38 commented 8 years ago

@danilaml not use llvm

danilaml commented 8 years ago

@Zangetsu38 with ppu interp. 2 it's the same just without last part (still hangs).

Zangetsu38 commented 8 years ago

@vlj it is a good, Works Now I have this in Loop

HLE: E {PPU[0x7ba] Thread (24d92c10)[0x009e1528]} cellSync: cellSyncMutexTryLock() -> CELL_SYNC_ERROR_BUSY (0x8041010a) HLE: E {PPU[0x1] Thread (main_thread)[0x009e11f8]} cellSync: cellSyncMutexTryLock() -> CELL_SYNC_ERROR_BUSY (0x8041010a)

After with a little Hack I have this in Loop

RSX: W {rsx::thread} NV4097_GET_REPORT: Unimplemented type 1 RSX: W {rsx::thread} CELL_GCM_TEXTURE_CONVOLUTION_MIN not supported, fallback to bilinear filtering RSX: W {rsx::thread} Unknow mag filter used 4, fallback to bilinear filtering

tambry commented 8 years ago

@vlj I think GET_REPORT should return, how many pixels passed (failed? can't remember) the z-test/depth test.

Zangetsu38 commented 8 years ago

@vlj I have fixed crash here https://github.com/Zangetsu38/rpcs3/commit/5bbd62727ea42e0d14980fec21ff4db46d43d42e. But now I have probleme with Cellfont. Emu Stoped caused by thins line 337.

buffer[((s32)y + ypos + yoff + baseLineY)surface->width + (s32)x + xpos] = box[ypos \ width + xpos];

And After by

E {PPU[0x1] Thread (main_thread)[0x00c2fc1c]} Exception: (in file Emu\SysCalls\Modules\cellFont.cpp:623, in function cellFontGetScalePixel)

tambry commented 8 years ago

@Zangetsu38 I'm sorry, what?! You add log messages about fallbacks being used, while you don't even add fallbacks! And in many other places you replace the unreachable with a warning, that prints out the mode used (good), but mentions a fallback being used, while there's no fallback! But the function still gets stuck, because you still leave the unreachable at the end of the function. And you also remove a couple useful warnings and comments about why stuff is there.

I mean look at this line... "fallback to bilinear filtering" :laughing:. Do you even understand what you are doing? This is a hack at best, but probably absolutely stupid.

I would be glad to have @vlj prove me completely wrong and tell me that there's some magic function somewhere, that falls back to some non-existant fallback, while ignoring the unreachables, that will be reached.

Please do not label things as fixes, when they're hacks at best and completely wrong or wrong on many other levels. Another here's another thought: Please stop trying to contribute to the code, as has been suggested many times already. The fact is: you suck at it and you don't know what you're doing. Stick to the game testing, where you are actually useful, and not a hindrance.

Zangetsu38 commented 8 years ago

@tambry Huh? This is absolutely not a hack, it's the same thing that @vlj Absolutely, but for the all instruction. It can detect the instruction missing of the "case" (the GPU instruction -> D3D12) when rpcs3 crash. I fix "Jet Set Radio" like that. look here : https://github.com/Zangetsu38/rpcs3/commit/5bbd62727ea42e0d14980fec21ff4db46d43d42e#diff-1516ea3a2220b7fadf352dd62ece48f1R113 And for that "fallback to ..." I just whrite Name of instruction I told vlj what he wanted to put in place, it is absolutely not important. The most important is this: "used% x" Indicating a number that shows which added instruction if it is missing, or else if it is already there to supplement it, it lacks normally "return".

tambry commented 8 years ago

@Zangetsu38 No shit, that it can detect the case - that's how a switch works. But when you add a message saying, that there's a fallback, when you don't even return in other cases a bloody value.

I want to believe so hard, that you can't be that stupid, but I think I have no words to express it anymore.

Zangetsu38 commented 8 years ago

@tambry huh, Sorry ? but no stupide, just real, why use

LOG_WARNING(RSX, "Unknow ... used %x.

Rpcs3 show directly in the log instruction missing, after just look number, and add instruction, or complete, with return appropriate.

tambry commented 8 years ago

@danilaml Does it still happen?

danilaml commented 8 years ago

@tambry nope. It just doesn't even get to the fps part now. Stops with gray GSFrame at:

E {PPU[0x45] Thread ()[0x0073e098]} cellSpurs: cellSpursShutdownTaskset
E {PPU[0x45] Thread ()[0x0073e060]} cellSpurs: cellSpursJoinTaskset
tambry commented 8 years ago

@danilaml Well, then it probably has received fixes somehow and now properly requires SPURS to run.

danilaml commented 8 years ago

@tambry yeah, though It tried to render something until hanging forever before...

danilaml commented 8 years ago

closing this since it doesn't crash anymore, just "hangs"