Closed danilaml closed 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
@vlj is CELL_GCM_TEXTURE_CONVOLUTION_MIN
filter hard to implement?
I don't know what the filter do. Convolution is a very generic mathematical filter so some data should be provided.
@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.
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.
@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.
I pushed the fallback path to d3d12 branch (it's used by Castle of Illusion too) can you see if it works ?
Works in wip ^^
@vlj doesn't work on d3d12. It crashes with exception in:
On wip, last time I checked (after Micky Mouse commit) it stopped crashing on "unsupported filter" and just entered some wait loop (basically hanged).
It crashes with unreachable("Wrong mag filter");
in get_mag_filter
mag_filter is 4 btw.
And now ? I pushed a fix that uses bilinear if mag filter isn't recognised (not sure if 4 is a valid mag filter :/ )
@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.
@danilaml not use llvm
@Zangetsu38 with ppu interp. 2 it's the same just without last part (still hangs).
@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
@vlj I think GET_REPORT should return, how many pixels passed (failed? can't remember) the z-test/depth test.
@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)
@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.
@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".
@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.
@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.
@danilaml Does it still happen?
@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
@danilaml Well, then it probably has received fixes somehow and now properly requires SPURS to run.
@tambry yeah, though It tried to render something until hanging forever before...
closing this since it doesn't crash anymore, just "hangs"
It crashes at start with:
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.