gallium: Add pipe_context::draw_vbo and pipe_context::set_index_buffer.
authorChia-I Wu <olv@lunarg.com>
Thu, 15 Jul 2010 20:02:55 +0000 (04:02 +0800)
committerChia-I Wu <olv@lunarg.com>
Thu, 29 Jul 2010 05:45:30 +0000 (13:45 +0800)
This commit adds a new unified draw_vbo method to pipe_context.  Unlike
other draw methods, draw_vbo treats the index buffer as a state which is
set with set_index_buffer.

src/gallium/include/pipe/p_context.h
src/gallium/include/pipe/p_state.h

index 7ec3d63a3fdfdbe80c12f67e3e4cbe3bce6f2911..3314b1e0e0f560302facdf30af4ed5f89c923a8e 100644 (file)
@@ -102,6 +102,9 @@ struct pipe_context {
                                 unsigned start, 
                                 unsigned count);
 
+   void (*draw_vbo)( struct pipe_context *pipe,
+                     const struct pipe_draw_info *info );
+
    /**
     * Draw the stream output buffer at index 0
     */
@@ -249,6 +252,9 @@ struct pipe_context {
                                unsigned num_buffers,
                                const struct pipe_vertex_buffer * );
 
+   void (*set_index_buffer)( struct pipe_context *pipe,
+                             const struct pipe_index_buffer * );
+
    void (*set_stream_output_buffers)(struct pipe_context *,
                                      struct pipe_resource **buffers,
                                      int *offsets, /*array of offsets
index 301fe2b74f0158555840659172ba74420ec2951d..0f1a44cde42efb12f38f4889acd991d89c9ffb98 100644 (file)
@@ -426,6 +426,41 @@ struct pipe_vertex_element
 };
 
 
+/**
+ * An index buffer.  When an index buffer is bound, all indices to vertices
+ * will be looked up in the buffer.
+ */
+struct pipe_index_buffer
+{
+   unsigned index_size;  /**< size of an index, in bytes */
+   unsigned offset;  /**< offset to start of data in buffer, in bytes */
+   struct pipe_resource *buffer; /**< the actual buffer */
+};
+
+
+/**
+ * Information to describe a draw_vbo call.
+ */
+struct pipe_draw_info
+{
+   boolean indexed;  /**< use index buffer */
+
+   unsigned mode;  /**< the mode of the primitive */
+   unsigned start;  /**< the index of the first vertex */
+   unsigned count;  /**< number of vertices */
+
+   unsigned start_instance; /**< first instance id */
+   unsigned instance_count; /**< number of instances */
+
+   /**
+    * For indexed drawing, these fields apply after index lookup.
+    */
+   int index_bias; /**< a bias to be added to each index */
+   unsigned min_index; /**< the min index */
+   unsigned max_index; /**< the max index */
+};
+
+
 #ifdef __cplusplus
 }
 #endif