Xbox Pushbuffers?

Ug Lee

Newcomer
I was reading through the GDC SOE article on Gamasutra and I came across this paragraph -

Pushbuffers. Pushbuffers are the native rendering format of the Xbox GPU. When DirectX is used on the Xbox, the rendering instructions are converted into pushbuffers for execution on the GPU. A small subset of commands within the main render loop: draw primitive, z-writes, set vertexbuffer, select vertexshader, set pixelshader, etc, were reverse engineered to determine the resulting pushbuffer code. This was then used to develop an offline converter application that constructs a large pushbuffer for the whole level. Each object in the pushbuffer is preceded by a null operation (NOP), which is conditionally set as a NOP, if the following object is visible, and a jump, if the following object is not visible. The concept is similar to "execute buffers" rendering techniques in DirectX 3.0. This pushbuffer technique resulted in a reduction in the CPU set up time required for the rendering, essentially halving the frame time.

Clarification is required. Are pushbuffers similar to the display lists used in PS2 hardware?

It's a shame that there was so much effort put into the porting of a mediocre game like State Of Emergency, yet MGS2 gets the quick five minute 'dash for da cash' port job.
 
Since when is adding 500 extra missions, and several additional modes considered a 5-minute job? It's hard to argue that the gameplay content doesn't make MGS2:S an interesting purchase for the fans of the game. They could just put MGS2:SOL on the Xbox and release it like that. Now THAT would be something to complain about.
 
Clarification is required. Are pushbuffers similar to the display lists used in PS2 hardware?

Yes basically.

Push buffer is the D3D term for the command FIFO between the CPU and the GPU. The cpu pushes data on to it and the GPU reads it off.
 
So can that kind of programming be used in every game?

You pre-calculate pushbuffers and achieve higher performance.. sounds simple enough.

What about PS2? Can that same thinking be applied to pre-calculating display lists?
 
marconelly! said:
So can that kind of programming be used in every game?

You pre-calculate pushbuffers and achieve higher performance.. sounds simple enough.

What about PS2? Can that same thinking be applied to pre-calculating display lists?

Sure. In fact the article you're reading says they already do basically that in SoE on PS2.

The renderer was developed to minimize the amount of online processing needed for scene rendering. To achieve this, an offline exporter was written that converted geometry data from Maya, into the final format that would be sent via Direct Memory Access (DMA) to the VUs on the PS2. This introduced a certain amount of inefficiency in terms of the memory usage, since the data was optimized for speed, and not necessarily storage.

So the article essentially says, "OMG, the xbox is slower than the PS2, but if we implement the same optimization that we're doing on the PS2, the xbox is quite a bit faster". ;-)
 
So can that kind of programming be used in every game?
If you can live with the rather significant memory overheads (XBox) or complicating your life/limiting yourself a whole lot in regards to things like texture management&transfers (PS2), then yeah.
Actually I think you'd have the least drawbacks with this on GC...

Anyway, I gather ERP can tell what he feels is optimal approach to push buffers on XBox, but as far as PS2 goes, what you want to be doing per frame is building a list of references/calls to static data nodes (objects, textures etc.), which would give you minimal cpu intervention in building of lists.
Anything more static then that isn't practical IMO... or all that fast for that matter.
 
Groovy. Thanks for the knowledge, guys. :)


marconelly! said:
Since when is adding 500 extra missions, and several additional modes considered a 5-minute job?

I wasn't talking about the additional content. My beef is with the game performance. I'm playing through MGS2:S on Xbox at the moment and it's disturbing in a lot of areas. In the case of the flooded strut in Shell 2, where you have to swim through to get E.E, it's nothing short of horrid. I remember reading an interview with Kojima in an Xbox magazine where he spoke about the Xbox version being visually superior to the PS2 counterpart. Other than resolution, it's actually owned by the PS2 version.

Yet then you look at a game like SOE, where the devs went the hard yards in making sure a game that was initially created purely with PS2 strenghts in mind made the trip to Xbox in even BETTER form than before.
 
So the article essentially says, "OMG, the xbox is slower than the PS2, but if we implement the same optimization that we're doing on the PS2, the xbox is quite a bit faster".
I see, that makes sense :)

Btw, I was thinking that this technique cannot be used if you have movable/destructible geometry, correct?

Ug Lee, what can I say - either Kojima was BSing or Official Xbox Magazine added their own little bits into his words (and I would at all be surprised if they did that) I clearly remember OXM was the only mag to go on public with that interview with him where anything about the graphics was even mentioned.
 
Back
Top