I think that PPP would be more of a per-surface approach, which would be somewhere between per-object and per-vertex. The actual definition of the surface, of course, would be arbitrary, so I suppose one surface could encompass an entire object, but I would find it more common to have multiple surfaces per object.DemoCoder said:You can break up the frequently of computation into several groups:
1) per pixel (pixel shaders)
2) per vertex (vertex shaders)
3) per object (primitive shader)
4) per scene (CPU, constants, etc)
PPP targets #3.
Chalnoth said:I think that PPP would be more of a per-surface approach, which would be somewhere between per-object and per-vertex. The actual definition of the surface, of course, would be arbitrary, so I suppose one surface could encompass an entire object, but I would find it more common to have multiple surfaces per object.
I really doubt a PPP would be that generalized.DemoCoder said:Perhaps "per triangle strip/list" or "per HOS" or "per buffer"
I would expect a PPP to be a far more general purpose unit: e.g. random access input/output. I think of it as moving a mini-CPU to the GPU that is handed a vertex buffer as input and produces a vertex buffer as output.
struct iVertex {
float3 position;
...
// bla bla ...
};
void main(iVertex i0, iVertex i1, iVertex i2){
iVertex vertices[6];
...
// do nPatches from the input triangle
...
CreateTriangle(vertices[0], vertices[1], vertices[2]);
CreateTriangle(vertices[1], vertices[3], vertices[4]);
CreateTriangle(vertices[1], vertices[2], vertices[4]);
CreateTriangle(vertices[2], vertices[3], vertices[4]);
}
davepermen said:actually, for raytracers, you don't need that..
all you need is the intersection algorithm (wich can depend on some static data)..
and the intersection shader has to be capable enough of implementing such intersection algorithms.
Primitive Processor
• Converts graphics primitives into pixels
• 15 interpolators
• 8 dividers– Perspective correct renderingInterpolator
Correction Stored to FIFO
Red, Green, Blue perspective yes,
8 bitsTransparencyperspective yes,
8 bitsA Texture U, Vperspective yes,
12 bitsB Texture U, Vperspective yes,
12 bitsZ Depthlinearyes, 24 bits
Perspective PlinearnoX,
Y Coordinates linearyes,
22+4 bits total
3 Edge Functions linear no
Uttar said:A PPP was in the original NV30 designs AFAIK, although it was relatively scrapped I believe.
Both NV40 and R400 have PPPs, but the R420 does not have one.
Uttar
But the PPP doesn't have to have anything terribly different from vertex shaders (or pixel shaders: vs and ps are very similar now, and are getting more similar) to create geometry.Humus said:A PPP would indeed have to be able to create geometry, otherwise I wouldn't call it a PPP. On an API level I imagine it would look quite similar to a vertex shader, but with a few extra elements. Perhaps like this for 1 level nPatches:
No, this is what's usually called triangle setup and rasterizer.Tahir said:Is this even remotely similar to what is meant by a primitive processor nowadays?
DemoCoder said:davepermen said:actually, for raytracers, you don't need that..
all you need is the intersection algorithm (wich can depend on some static data)..
and the intersection shader has to be capable enough of implementing such intersection algorithms.
You're forgetting about building data structures to accelerate ray/voxel hits . Unless your entire scene is completely static, this needs to be updated every frame. Also, traversing voxels requires multiple passes today, not exactly efficient.
There's a difference between not needing something because otherwise it would be nigh impossible to implement, and needing something because it runs unacceptably otherwise.