Closed daniel229 closed 10 years ago
Do you remember when/which commit? Was it when it wasn't setting the currentRenderVfb_ back (or maybe that was the other pull, I forget...)?
What does the GE debugger show? Does it draw the scene underwater to a different framebuffer and copy it, or does it draw the sea on top (I'm guessing the latter, and probably not blended properly, possibly like that Yakuza game seems to possibly be having problems with...)?
-[Unknown]
I don't remember witch commit,but I tested several commits the day near the day that i post the correct picture,still broken,it might the master change cause the problem,or just a accident.
It draws the scene underwater.
and then draw the rock and the boy in another framebuffer
copy
draw in another framebuffer agains
gong to copy that thing
the water finally
Before the final copy, it looks pretty good. I don't understand why that block transfer right above doesn't affect the texture...
-[Unknown]
It's black agains with or with out Simulate block Transfer in v0.9.8-1087-gfe58f8d
Oh, so maybe it was a block transfer with a wrong stride. What if you change this to a NOTICE_LOG:
DEBUG_LOG(G3D, "Block transfer: %08x/%x -> %08x/%x, %ix%ix%i (%i,%i)->(%i,%i)", srcBasePtr, srcStride, dstBasePtr, dstStride, width, height, bpp, srcX, srcY, dstX, dstY);
What does it log?
-[Unknown]
something like these 18:10:981 user_main W[SCEGE]: GLES\Framebuffer.cpp:968 FBO reusing depthbuffer, 0008c000/00088000 and 00000000/00088000 18:10:981 user_main W[SCEGE]: GLES\Framebuffer.cpp:962 FBO using existing buffer as depthbuffer, 0008c000/00088000 and 00088000/00088000 18:10:982 user_main N[G3D]: GLES\GLES_GPU.cpp:1916 Block transfer: 04088000/40 -> 08bef600/40, 64x38x4 (0,0)->(0,0) 18:10:982 user_main W[G3D]: GLES\Framebuffer.cpp:2208 Block transfer download 04088000 -> 08bef600 18:10:984 user_main N[G3D]: GLES\GLES_GPU.cpp:1916 Block transfer: 04044000/200 -> 04088000/200, 480x272x2 (0,0)->(0,0) 18:10:987 user_main W[G3D]: GLES\TextureCache.cpp:237 Render to texture with different formats 1 != 3 18:10:989 user_main I[G3D]: GLES\ShaderManager.cpp:146 Linked shader: vs 62 fs 103 18:10:990 user_main I[G3D]: GLES\ShaderManager.cpp:146 Linked shader: vs 52 fs 105 18:10:990 user_main I[KERNEL]: HLE\sceKernelThread.cpp:2442 sceKernelTerminateDeleteThread(430) 18:10:996 user_main N[G3D]: GLES\GLES_GPU.cpp:1916 Block transfer: 04088000/40 -> 08bed000/40, 64x38x4 (0,0)->(0,0) 18:10:996 user_main N[G3D]: GLES\GLES_GPU.cpp:1916 Block transfer: 04000000/200 -> 04088000/200, 480x272x2 (0,0)->(0,0) 18:11:011 user_main N[G3D]: GLES\GLES_GPU.cpp:1916 Block transfer: 04088000/40 -> 08bef600/40, 64x38x4 (0,0)->(0,0) 18:11:012 user_main N[G3D]: GLES\GLES_GPU.cpp:1916 Block transfer: 04044000/200 -> 04088000/200, 480x272x2 (0,0)->(0,0) 18:11:027 user_main N[G3D]: GLES\GLES_GPU.cpp:1916 Block transfer: 04088000/40 -> 08bed000/40, 64x38x4 (0,0)->(0,0) 18:11:028 user_main N[G3D]: GLES\GLES_GPU.cpp:1916 Block transfer: 04000000/200 -> 04088000/200, 480x272x2 (0,0)->(0,0) 18:11:044 user_main N[G3D]: GLES\GLES_GPU.cpp:1916 Block transfer: 04088000/40 -> 08bef600/40, 64x38x4 (0,0)->(0,0) 18:11:044 user_main N[G3D]: GLES\GLES_GPU.cpp:1916 Block transfer: 04044000/200 -> 04088000/200, 480x272x2 (0,0)->(0,0) 18:11:061 user_main N[G3D]: GLES\GLES_GPU.cpp:1916 Block transfer: 04088000/40 -> 08bed000/40, 64x38x4 (0,0)->(0,0) 18:11:061 user_main N[G3D]: GLES\GLES_GPU.cpp:1916 Block transfer: 04000000/200 -> 04088000/200, 480x272x2 (0,0)->(0,0) 18:11:077 user_main N[G3D]: GLES\GLES_GPU.cpp:1916 Block transfer: 04088000/40 -> 08bef600/40, 64x38x4 (0,0)->(0,0) 18:11:077 user_main N[G3D]: GLES\GLES_GPU.cpp:1916 Block transfer: 04044000/200 -> 04088000/200, 480x272x2 (0,0)->(0,0) 18:11:094 user_main N[G3D]: GLES\GLES_GPU.cpp:1916 Block transfer: 04088000/40 -> 08bed000/40, 64x38x4 (0,0)->(0,0) 18:11:094 user_main N[G3D]: GLES\GLES_GPU.cpp:1916 Block transfer: 04000000/200 -> 04088000/200, 480x272x2 (0,0)->(0,0) 18:11:111 user_main N[G3D]: GLES\GLES_GPU.cpp:1916 Block transfer: 04088000/40 -> 08bef600/40, 64x38x4 (0,0)->(0,0) 18:11:111 user_main N[G3D]: GLES\GLES_GPU.cpp:1916 Block transfer: 04044000/200 -> 04088000/200, 480x272x2 (0,0)->(0,0) 18:11:127 user_main N[G3D]: GLES\GLES_GPU.cpp:1916 Block transfer: 04088000/40 -> 08bed000/40, 64x38x4 (0,0)->(0,0) 18:11:128 user_main N[G3D]: GLES\GLES_GPU.cpp:1916 Block transfer: 04000000/200 -> 04088000/200, 480x272x2 (0,0)->(0,0) 18:11:144 user_main N[G3D]: GLES\GLES_GPU.cpp:1916 Block transfer: 04088000/40 -> 08bef600/40, 64x38x4 (0,0)->(0,0) 18:11:145 user_main N[G3D]: GLES\GLES_GPU.cpp:1916 Block transfer: 04044000/200 -> 04088000/200, 480x272x2 (0,0)->(0,0) 18:11:161 user_main N[G3D]: GLES\GLES_GPU.cpp:1916 Block transfer: 04088000/40 -> 08bed000/40, 64x38x4 (0,0)->(0,0) 18:11:161 user_main N[G3D]: GLES\GLES_GPU.cpp:1916 Block transfer: 04000000/200 -> 04088000/200, 480x272x2 (0,0)->(0,0) 18:11:177 user_main N[G3D]: GLES\GLES_GPU.cpp:1916 Block transfer: 04088000/40 -> 08bef600/40, 64x38x4 (0,0)->(0,0) 18:11:177 user_main N[G3D]: GLES\GLES_GPU.cpp:1916 Block transfer: 04044000/200 -> 04088000/200, 480x272x2 (0,0)->(0,0) 18:11:195 user_main N[G3D]: GLES\GLES_GPU.cpp:1916 Block transfer: 04088000/40 -> 08bed000/40, 64x38x4 (0,0)->(0,0) 18:11:195 user_main N[G3D]: GLES\GLES_GPU.cpp:1916 Block transfer: 04000000/200 -> 04088000/200, 480x272x2 (0,0)->(0,0) 18:11:211 user_main N[G3D]: GLES\GLES_GPU.cpp:1916 Block transfer: 04088000/40 -> 08bef600/40, 64x38x4 (0,0)->(0,0) 18:11:212 user_main N[G3D]: GLES\GLES_GPU.cpp:1916 Block transfer: 04044000/200 -> 04088000/200, 480x272x2 (0,0)->(0,0) 18:11:227 user_main N[G3D]: GLES\GLES_GPU.cpp:1916 Block transfer: 04088000/40 -> 08bed000/40, 64x38x4 (0,0)->(0,0)
The proble since v0.9.8-1084-gbe02ea7
That block transfer with stride 64 just doesn't make sense. It copies 9.5 rows of pixels?
-[Unknown]
Presumably the game uses 04088000 and 04000000 temporarily as a 64x64 texture as well as framebuffers, perhaps before rendering the actual scene, like for blurring a shadow? There's probably more going on than just block transfers.
with block transfer,it shows up the water,but can't see the thing in the water.without block transfer, background is black.
log I[SCEGE]: GLES\Framebuffer.cpp:901 Creating FBO for 0008c000 : 64 x 64 x 3 W[SCEGE]: GLES\Framebuffer.cpp:937 FBO reusing depthbuffer, 0008c000/00088000 and 00000000/00088000 W[SCEGE]: GLES\Framebuffer.cpp:931 FBO using existing buffer as depthbuffer, 0008c000/00088000 and 00088000/00088000 W[G3D]: GLES\Framebuffer.cpp:2065 Block transfer download 04088000 -> 08bed000 W[G3D]: GLES\Framebuffer.cpp:2053 Inter-buffer block transfer 04044000 -> 04088000 W[G3D]: GLES\TextureCache.cpp:231 Render to texture with different formats 1 != 3
it works with the framebuffer-clut https://github.com/hrydgard/ppsspp/pull/5767,the early commit.