It's Fran
Yup, I know of devs using memexport. It has some bugs though and it's not always straighforward to use, but it can potentially be a win in certain scenarios.
You can use memexport when a title is doing PTR, just make sure you don't issue a memexport primitive inside a PTR bracket, just before or after, depending on what you are trying to do.
In fact, a typical frame with MSAA and memexport would be rendered something like this on 360:
- Submit all memexport primitives
- Render all shadow buffers
- Render all offscreen textures
- Begin predicated tiling
- Submit the main scene
- End predicated tiling (actual tiled rendering happens here)
- Render particles (?)
- Post processing (tonemapping, bloom, dof, whatever)
- Swap
- Pub
It's important to notice that "begin predicated tiling" is a kind of barrier that logically divides the engine flow, hence the shadow buffers are all prepared before rendering the scene for example. This introduces several architectural issues to deal with when using PTR. On another platform you would probably render a shadow buffer, render the part of the scene using it, then render another shadow buffer and so on, in order to reuse shadow buffer memory. Or any other combination that suites the engine. On the 360 you are pretty much forced to that scheme if you want to use PTR. The main benefit is you get MSAA more or less for free if you solve the problems related to resubmitting the same primitive for each tile.
Fran
Thanx Fran (Viva Italia!)It's Fran
Yup, I know of devs using memexport. It has some bugs though and it's not always straighforward to use, but it can potentially be a win in certain scenarios.
You can use memexport when a title is doing PTR, just make sure you don't issue a memexport primitive inside a PTR bracket, just before or after, depending on what you are trying to do.
In fact, a typical frame with MSAA and memexport would be rendered something like this on 360:
- Submit all memexport primitives
- Render all shadow buffers
- Render all offscreen textures
- Begin predicated tiling
- Submit the main scene
- End predicated tiling (actual tiled rendering happens here)
- Render particles (?)
- Post processing (tonemapping, bloom, dof, whatever)
- Swap
- Pub
It's important to notice that "begin predicated tiling" is a kind of barrier that logically divides the engine flow, hence the shadow buffers are all prepared before rendering the scene for example. This introduces several architectural issues to deal with when using PTR. On another platform you would probably render a shadow buffer, render the part of the scene using it, then render another shadow buffer and so on, in order to reuse shadow buffer memory. Or any other combination that suites the engine. On the 360 you are pretty much forced to that scheme if you want to use PTR. The main benefit is you get MSAA more or less for free if you solve the problems related to resubmitting the same primitive for each tile.
Fran
It's Fran
Yup, I know of devs using memexport. It has some bugs though and it's not always straighforward to use, but it can potentially be a win in certain scenarios.
You can use memexport when a title is doing PTR, just make sure you don't issue a memexport primitive inside a PTR bracket, just before or after, depending on what you are trying to do.
In fact, a typical frame with MSAA and memexport would be rendered something like this on 360:
- Submit all memexport primitives
- Render all shadow buffers
- Render all offscreen textures
- Begin predicated tiling
- Submit the main scene
- End predicated tiling (actual tiled rendering happens here)
- Render particles (?)
- Post processing (tonemapping, bloom, dof, whatever)
- Swap
- Pub
It's important to notice that "begin predicated tiling" is a kind of barrier that logically divides the engine flow, hence the shadow buffers are all prepared before rendering the scene for example. This introduces several architectural issues to deal with when using PTR. On another platform you would probably render a shadow buffer, render the part of the scene using it, then render another shadow buffer and so on, in order to reuse shadow buffer memory. Or any other combination that suites the engine. On the 360 you are pretty much forced to that scheme if you want to use PTR. The main benefit is you get MSAA more or less for free if you solve the problems related to resubmitting the same primitive for each tile.
Fran
It would be greatly appreciated, if you can talk about it that is without risking spoiling stuff from your work, if you could give some form of example were memexport can be of great use. Although I can grasp what it does, I haven't really seen any "concrete" examples of were it can be of use.
Look for the presentation "Seven ways to skin a mesh" from a relatively recent MS event, it shows how MEMEXPORT is the best way to do skinning on the 360.
It would be greatly appreciated, if you can talk about it that is without risking spoiling stuff from your work, if you could give some form of example were memexport can be of great use. Although I can grasp what it does, I haven't really seen any "concrete" examples of were it can be of use.
...genius...
Look for the presentation "Seven ways to skin a mesh" from a relatively recent MS event, it shows how MEMEXPORT is the best way to do skinning on the 360.
Fran, you failed to answer exactly how much ass your game is kicking.
Seriously though, can you talk about gpu-physics & tesselation unit?
Thanks Fran! Much appreciated to hear from a 360 dev of your calibre!
Memexport can potentially play pretty well with tiling. It's not "the best way to skin a mesh", in my opinion, but it's a tool that you can use in certain scenarios. The best way to skin the mesh is the simplest one to implement that does what you need as fast as you need it
But, imagine you have a complex animated character with some interesting and non trivial skinning, which possibly takes some time to render. With tiling and a big character on screen, spanning multiple tiles, you probably don't want to run the complex vertex shader doing skinning for every vertex of the mesh potentially for each tile. You also might not want to skin the mesh on the XCPU (while you would want to do it with Cell) before rendering "a la" Doom 3, because the GPU is much more efficient for this type of job.
In this situation you can use memexport to skin the mesh on the GPU, save the transformed vertices to a buffer before starting tiling, somewhere before the shadowmaps passes in my scheme in an earlier post, and use this vertex buffer to feed the GPU for all subsequent passes (shadowmaps, lighting passes, tiling). Notice that there is no CPU involved in this, it all happens in the GPU, writing out to main memory bypassing the EDRAM and reading again from there.
It can be a potential win and memexport is surely a tool you can leverage to overcome some of the problems related to tiling. It does come at the cost of added complexity to your rendering pipeline (two passes are more difficult to maintain than one) and there are some bugs and quirks to work around when using it.
Fran
There must be a reason for my failure
I'm not too good with gpu-physics (read: I've never tried much GPGPU myself), so, well, any comment wouldn't be too useful. And about tesselation, I only gave a superficial look at that stuff, so, again, I wouldn't add too much information. I know it's a pretty fast unit, it does it's job, but it's not too flexible.
You are too kind!
Where is MS in regard to automatic tiling + memexport?
FixedHow many times do you need to hear that there is only the problem of requiring persistent storage for the generated geometry to feed it into the separate tile render passes, and it can never be fixed?
Fixed
Thanks Fran, some nice comments.
Anyway, I hope we will learn some more form gdc especially from havoc, ie do they intend to use xenos for some calculations in the 4.5 havoc sku (better implementation of havox FX for xenos)?
It depends on the amount of geometry one generates per frame. It could be just a few hundred kB or a few MB. As a rough figure, both of the big consoles should easily be able to handle 1 million vertices per frame in a 30 fps game. Depending on what materials you use, we're looking at somewhere between 12 and 64 megabytes for the geometry data per frame. Some games will go above, some will stay below, and it really depends on the game what percentage of the per-framel geometry is procedural or generated.About how much additional storage space are we talking here? (sorry if it's already been asked)