gallium: Add index bias parameter to draw_elements and friends.
authorJosé Fonseca <jfonseca@vmware.com>
Mon, 19 Apr 2010 06:56:46 +0000 (08:56 +0200)
committerJosé Fonseca <jfonseca@vmware.com>
Mon, 19 Apr 2010 06:56:46 +0000 (08:56 +0200)
indexBias corresponds to:
- BaseVertexIndex parameter of D3D9's
  IDirect3DDevice9::DrawIndexedPrimitive method
- BaseVertexLocation parameter of ID3D10Device::DrawIndexed

Although a positive indexBias can be easily be implemented in Gallium by
adding indexBias*stride to each vertex buffer base offset, a negative
indexBias cannot, as the final vertex buffer offset could be negative.

I'm not aware of this functionality being exposed to GL drivers, so for
now all hardware drivers will just assert(indexBias == 0).

See also:
- http://msdn.microsoft.com/en-us/library/bb174369.aspx (D3D9)
- http://msdn.microsoft.com/en-us/library/ff556126.aspx (D3D10 DDI)

src/gallium/include/pipe/p_context.h

index 1aa0cbe4dcaa2eb77c0540a95d9ea97c24488ad3..6f47845f3b805869774e22614f4f0ef7e75552a4 100644 (file)
@@ -67,6 +67,7 @@ struct pipe_context {
    void (*draw_elements)( struct pipe_context *pipe,
                           struct pipe_resource *indexBuffer,
                           unsigned indexSize,
+                          int indexBias,
                           unsigned mode, unsigned start, unsigned count);
 
    void (*draw_arrays_instanced)(struct pipe_context *pipe,
@@ -79,6 +80,7 @@ struct pipe_context {
    void (*draw_elements_instanced)(struct pipe_context *pipe,
                                    struct pipe_resource *indexBuffer,
                                    unsigned indexSize,
+                                   int indexBias,
                                    unsigned mode,
                                    unsigned start,
                                    unsigned count,
@@ -93,6 +95,7 @@ struct pipe_context {
    void (*draw_range_elements)( struct pipe_context *pipe,
                                 struct pipe_resource *indexBuffer,
                                 unsigned indexSize,
+                                int indexBias,
                                 unsigned minIndex,
                                 unsigned maxIndex,
                                 unsigned mode,