On 8/25/06, Timothy Miller <[EMAIL PROTECTED]> wrote:
On 8/25/06, Jon Smirl <[EMAIL PROTECTED]> wrote:
> On 8/25/06, Timothy Miller <[EMAIL PROTECTED]> wrote:
> > I've done all this before, and I can assure you that MANY commands
> > take less time to submit than they do to execute, especially if PCI is
> > the bus. With 3D, we'll get lots of tiny triangles that are also
> > faster than the bus. Packing is vital for throughput.
>
> Your experience should be better. From the outside it is hard to tell
> how long the GPU takes to execute an instruction. That suggests a
> feature, an on-board timer that tracks how long the command stream
> runs and reflects pipelining. Then you could run various combinations
> of op codes and see which one is the fastest. Other overhead getting
> in the way makes this hard to measure.
Here's the approach I have in mind (which I think I may be copying
from somewhere):
Each packet has a 32-bit header. Some bits are reserved for the
packet type, some are reserved for the packet length (not everything
submitted--just this one command), and the rest depend on the packet
type. For a drawing command packet, those remaining bits will usually
be used as flags to indicate which of the many possible attributes are
also contained in subsequent words of the packet header.
Consider a 2D solid rectangle fill. Upper left corner (32 bits) and
width/height (32 bits) are mandatory. But there are attributes, like
foreground color, that are optional because it's common to draw a
bunch of rects all of the same color. Futhermore, the packet length
is used to indicate how many rectangles (all with the same set of
attributes) are in the packet.
From a software view I don't draw blue rects. I set the foreground to
blue in the graphics context and then just draw a filled rect. That's
because I can also set the graphics context to trigger a patterned or
textured or gradient fill too. The context remembers hundreds of
settings like these - lighting, shading, etc.
That is part of the complexity of multitasking the GPU command
streams. Each command stream has its own context. Contexts that I have
worked with range from 2K to 8K in size. The radeon has some way of
only loading the deltas to the context on context swap but I forgot
how it works.
You might define another packet type that lets you specify multiple
rectangles, but all with their own attributes (which ones being
specified again by the flags in the header).
We'll define a set that makes sense to us. Some of the packet types
will exist just to set some of the more obscure attributes in an
efficient way.
--
Jon Smirl
[EMAIL PROTECTED]
_______________________________________________
Open-graphics mailing list
[email protected]
http://lists.duskglow.com/mailman/listinfo/open-graphics
List service provided by Duskglow Consulting, LLC (www.duskglow.com)