Font Size




Ever wondered from which country and city we get the most visits?

Country top 5:

  1. United States - us - (706,921)
  2. Japan - japan - (524,869)
  3. Brazil - brazil - (504,787)
  4. Germany - germany - (392,980)
  5. France - greece - (331,084)

City top 5:

  1. Madrid, Spain - spain] - (104,796)
  2. Sao Paulo, Brazil - brazil - (79,615)
  3. Tokyo, Japan - tokyo - (78,990)
  4. Santiago, Chile - chile - (75,821)
  5. Moscow, Russia - russia - (75,006)



In our spare time, some of us do little things to amuse ourselves and others, generally involving the betatesters, the devs, or generally people who come in the IRC channel.

You may have previously seen CKemu's "Betatester Magazine" issues or his comic strips involving testers and developers. Well my "party piece" is making little songs, with the help of some of our IRC chatters of course!

Bositman is well known throughout the community, so we (being myself and GB_Away) decided a while ago to make a little song in his honor, it was catchy and fun to make but i wasn't totally happy with the sound. Recently i decided to remaster the song and redo the guitar, so for your listening pleasure i have placed it online for all to be amused!

The lyrics are simple but they say enough!

"Bositman, Bositman, ooooooooooooo, Bositman, Bositman, Bositman, Bositman, BOSITMAN!, Bositman, oooooooooooooooo, Bositman, Bositman, Bositman, Bositman"

And here in nice 320kbps 48khz MP3 format, is the song, enjoy!

Edit by bositman: Dude,I told you it's not pronounced as an "s" but "z"!! Razz Razz

Refraction Feat GB_Away - Bositman.mp3


It was apparent early on the project that the GS plugin was going to be a big bottleneck during 3D scenes. It isn't that the GS plugin itself does a lot of computation on the CPU, but the fact that it needs to communicate with the graphics card means that unnecessary stalls will occur in the graphics driver as the GPU and CPU are synchronized. During these stalls, the CPU basically goes to lunch until the GPU is ready. Graphics drivers and libraries are aware of this and try as little as possible to communicate with the graphics card. They usually cache render state changes, shader changes, and texture changes up until actual geometry is rendered. They also take advantage of FIFOs (first in first out buffers). The CPU just writes to the FIFO and the GPU just reads from it, this makes all the difference in terms of keeping the GPU active while the CPU isn't and vise versa.

The biggest challenge when designing games and hardcore applications that need to use the GPU to its full potential is to make sure that graphics driver stalls are minimal at all costs. What kills games isn't sending geometry down the graphics pipeline, but it is when render targets are switched, render targets are used as textures in the next draw call, textures are locked, and when render targets are transferred from GPU memory to CPU memory (in the last case, the CPU not only goes to lunch, but has dinner also). GPU optimization talks usually appear in every Game Developers Conference and there are many papers on them on the net, so there is a lot more to the story than written here.

All this means is that single-threaded applications really need to design their GPU algorithms well to see fast frame rates. This unfortunately is not possible with Pcsx2 and the GS plugin. The GS plugin has to draw geometry in the same order as it was received. This kills almost all caching techniques used by modern games because the GS and PC GPUs have very different performance bottlenecks. In modern GPUs, it is advantageous to group as much geometry as possible in one draw call. The GS doesn't suffer from such bottlenecks. The GS also has two different contexts which makes things twice as difficult. ZeroGS can only do a limited amount of work-arounds before compatibility starts dropping, so the only other option is to try to multithread the GS. Note that using graphics libraries from multiple threads is not a trivial task.

Fortunately, the GS plugin is very unique in its nature. 99% of the communication that happens between the GS plugin and the rest of the systems components happens in the direction to the GS. The only times the EE needs to synchronize with the GS is when it reads back the FINISH/SIGNAL registers and part of the 4Mb GS memory. Register readbacks are used frequently, so this suggests that tight synchronization will be needed with the GS. The GS memory readbacks aren't as frequent; however, they require some special considerations with Virtual Memory and DMAs. The rest of the 99% of communication that goes to the GS happens with a GS FIFO.

When first started, Pcsx2 creates a GS thread and reserves special memory for the GS FIFO. The GS plugin then creates the Direct3D device/GL context only for that thread. Then when the game runs, the EE copes all its GS packets to the FIFO and then notifies the GS thread. The GS thread then checks if the FIFO has data, and then sends it to the GS plugin. This sounds easier than it actually is because very tight synchronization needs to happen to make sure no overwriting occurs in the FIFO. The FINISH/SIGNAL register synchronization actually doesn't happen across the EE and GS thread boundaries. Instead the EE thread peeks at all the packets ahead of time and handles it in its own routines.

What makes the "Dual Core" option special is the notifies part of the last explanation. The GS thread can either sleep waiting for a notification from EE, which can be done by WaitForSingleObject and SetEvent functions. Or it can continually check if the GS FIFO is empty without ever stopping. The latter option kills single cores but goes much faster on dual cores. The results of clicking on the MTGS and DC options on dual cores are phenomenal. Usually frame rates go up or even surpass 2x.

Multithreading in games is going to be very big in the future. The times have passed when there is one CPU that does everything and one GPU that just renders. The biggest problem is which game processing to divide into which thread, and how these threads will communicate with each other. Many of these issues are still open and current game companies are struggling with the added complication of concurrent execution.

Moral of the blog - GPUs have become so powerful that people are staring to do tasks like stereo vision and general purpose computation with them. Learn how to use them. I recommend ShaderX3: Advanced Rendering with DirectX and OpenGL by Wolfgang Engel and GPU Gems 2: Programming Techniques for High-Performance Graphics and General-Purpose Computation by Matt Pharr, Randima Fernando, and the 20+ researchers that contributed to it.


Testing can be a comical affair!

For instance Katamari Damacy, the poor little pint sized prince kept on falling through the universe, even better is the King would keep apologizing for a Royal Warp and return the prince to a new location, only for it to happen again.

Metal Gear Solid 3 suffers(ed) from a similar problem, Snake would suddenly drop though an invisible hole, causing the classic "Snake, are you alright? snake? SNAKE!!!"

Final Fantasy X still suffers from characters getting placed the wrong way around, so they run away from the monster, smite it and somehow return to the same position. WipeOut Fusion also suffers from things going backwards, every ship gets placed the wrong way around, and the AI along with you have to turn around before they can race!

Tekken Tag has Squishy Head Syndrome, you kick a character in the face and your head goes perfectly flat, suddenly "anything but the face!!" takes on an entire new meaning!

Over the course of testing for PCSX2 the team has encountered thousands upon thousands of bugs, but despite popular belief that all bugs are graphical, many of these bugs are much more bizarre. In fact the PCSX2 project may have released many a fine video demonstrating progress, we could have released an epic film trilogy of bloopers by now.

Now admittedly finding a bug requires the tester to try hundreds of program combinations (plugins, recompilers settings, debug options etc), make long debug logs and attempt to find the bug in the debugger or trace the origin of the bug if it's a regression, but sometimes just watching the bug makes it all worthwhile!

I fondly remember the linuz.naked_bug();, where characters in Street Fighter EX3 would be missing clothes - specifically the women missing skirts. Or how about every character in Final Fantasy X being Tidus, yes folks EVERY character, from enemies, to people walking around, nothing like hearing the pretty girl-boy with Yuna's voice!

Sometimes It's tempting to suggest we add an option to the emulator to "re-create" these bugs, from totally missing collision detection, AI going berserk, to people floating upside down, but alas we're here to emulate the PS2, not our goofs.

So next time you think of emulation bugs, do not assume they're always graphical, or some complex mind boggling bug that causes the game to do nothing - sometimes, just sometimes there's a poor unshaven tester in a darkened room, covered in coffee that they've just spat out because Lara Crofts boobs have just exploded, or Gran Turismo cars have just developed anti gravity drives!

So as a rare treat, and somewhat a prelude to current Work in Progress, here's a game with some of it's bugs intact!

Katamari Damacy - Status at time of writing: Ingame
List of testing notes:

  • Floor Bug, seems the textures they use to do floor detail are layered? (zBuffer)
  • Object clipping bugs (walls etc).
  • Katamari Mask? (the circle around the katamari, perhaps used to cull objects under the outer layer of what you have collected?).
  • Stuck on pillar, can't go anywhere bug! (Level 3).


Emwearz has a really sexy sister. She's an up and coming model, and would like to do some promo shoots wearing a specially made PCSX2 t-shirt and her favorite white thong.

However we've run into a snag, emwearz doesn't want his sister doing such photo shoots, especially when they would be wet t-shirt and highly provocative (think FHM / Maxim style). Hence we need you the viewer!!!

Edit: Forgive CKemu,it's that time of the month again...(and don't edit my edits!)

PM EMWEARZ via the NGemu forums here with the subject "Hey emwearz, is your sister single?", if he receives enough of these PM's he has promised to let his sister do this photo shoot!

PS: This is a joke, to wind one of our good buddies up...feel free to PM him though Wink  (she is hot)

You are here: Home Developer Blog