Mmmm, salmon on sticks

Published August 06, 2008
Advertisement
Where was I? Oh, yes. BTW Jack has posted his writeup as well so if my rambling stream-of-consciousness intartube blathering is not appealing to you he has a low-sodium alternative for you.

I totally forgot to tell you guys about the keynote speech!

Well, ok, not much to tell. David Gosen, VP of Strategic Marketing for entertainment in EMEA, told us that entertainment in Europe is really important that they're really going to push it forward. To be honest I'd be deeply concerned if the VP of marketing for EMEA wasn't saying things like that, and the fact that he is tells me nothing. This talk was utter marketing fluff; apart from a few unuseful claims (apparently the 360 has sold more units than the PS3 in Europe. O RLY?) and the odd lulz (they're going to broaden their title offering with MOAR SEQUELS) it was basically just insulting. The guy didn't even stick around so I could ask him for the state of play w.r.t. reliability issues on the Xbox.

Anyway.

After lunch I was back on the graphics track for a session on multithreaded rendering.

There are three key multithreading scenarios when it comes to graphics: asynchronous loading, multithreaded submission, and per-object display lists. Display lists are just this way of munging a load of render calls together into a single 'execute' primitive that is much faster to perform than the original render calls.

Under D3D9 and 10, the number one rule is to avoid using the multithreaded device, as it means every single API call you make is going to go through some heavy thread-safety code to make sure you're not screwing things up. It's better to stick with the single-threaded device, which doesn't have that code, and then not screw things up. Under D3D9, this means avoid the D3DCREATE_MULTITHREADED flag; under D3D10 this means use the D3D10_CREATE_DEVICE_SINGLETHREADED flag. Neither 9 nor 10 really support async resource loading, though you can load a resource into memory and decompress it on a separate thread. Also worth noting is that D3D9 behaves oddly if you keep a resource locked during the end of a frame... once you've finished and unlocked it you need to quickly lock and unlock it again to properly 'commit' it or something.

Multithreaded submission - submitting draw calls to the device from multiple threads - is simply not possible under D3D9 and 10. Even the home-rolled call-capture systems aren't performant. Xbox360 can do it, though you need to be careful; D3D11 has full support for it, as you'll see in the November 2008 DXSDK.

Then: PIX! God, this session gave me platform envy. 45 minutes of sheer glory in PIX for Xbox, and then a brief discussion of the fact that PIX for Windows now has 64-bit support and doesn't crash so much. Guh. Call me when we've got Dr. PIX and shader assertions on PC.

More multithreading! Work-stealing schedulers, mmmmm. Again, lots of Xbox-specific stuff here, but basically: Use a task-based architecture for your threading, use a work-stealing scheduler to schedule the tasks, but you'll have to find or make a lock-free double-ended queue first and apparently that's really really hard. Hopefully some of the Xbox tech they were showing will appear on the PC once the lawyers finish going over it all.

I see Jack has linked in my direction w.r.t dependency management but it's 3:40am. I'll talk about it later.

Final session: XAudio2 xAPOs. xAPOs - X-platform Audio Processing Object - are the effects/filters you use in XAudio2. They look very easy, you just build a C++ class derived from their base, override the 'process' function, and do your DSP work on the float32 buffer you're passed. You can override other functions if you want to do things like setup and teardown, or mess with parameters. Your process function needs to be really crazy quick, and it shouldn't throw any errors or anything, but that seems straightforward enough. New to XAudio2 is the ability to dynamically load xAPOs from DLLs, so I imagine we'll see people start to ship effect libraries for it.

The party was filled with TINY FOOD. I particularly liked the little portions of fish goujons and chips wrapped in 'newspaper,' and also the tiny hotdogs. Talked to people and then went home and begin writing this report, and then was distracted by people in #gamedev. CURSE YOUUUUUU!!!
Previous Entry Oh
Next Entry Word to the wise
0 likes 0 comments

Comments

Nobody has left a comment. You can be the first!
You must log in to join the conversation.
Don't have a GameDev.net account? Sign up!
Profile
Author
Advertisement
Advertisement