u_blitter: add a msaa parameter to util_blitter_clear
[mesa.git] / src / gallium / auxiliary / util / u_draw.h
index f06d09ef91d8049459564494b5202c64973990c9..d0955fa3f978d041803bd4ec76741743c1b35432 100644 (file)
@@ -1,6 +1,6 @@
 /**************************************************************************
  *
- * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
+ * Copyright 2008 VMware, Inc.
  * All Rights Reserved.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
@@ -18,7 +18,7 @@
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
+ * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "pipe/p_state.h"
 
 
-static INLINE void
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+static inline void
 util_draw_init_info(struct pipe_draw_info *info)
 {
    memset(info, 0, sizeof(*info));
@@ -43,8 +48,11 @@ util_draw_init_info(struct pipe_draw_info *info)
 }
 
 
-static INLINE void
-util_draw_arrays(struct pipe_context *pipe, uint mode, uint start, uint count)
+static inline void
+util_draw_arrays(struct pipe_context *pipe,
+                 enum pipe_prim_type mode,
+                 uint start,
+                 uint count)
 {
    struct pipe_draw_info info;
 
@@ -58,14 +66,20 @@ util_draw_arrays(struct pipe_context *pipe, uint mode, uint start, uint count)
    pipe->draw_vbo(pipe, &info);
 }
 
-static INLINE void
-util_draw_elements(struct pipe_context *pipe, int index_bias,
-                   uint mode, uint start, uint count)
+static inline void
+util_draw_elements(struct pipe_context *pipe,
+                   void *indices,
+                   unsigned index_size,
+                   int index_bias, enum pipe_prim_type mode,
+                   uint start,
+                   uint count)
 {
    struct pipe_draw_info info;
 
    util_draw_init_info(&info);
-   info.indexed = TRUE;
+   info.index.user = indices;
+   info.has_user_indices = true;
+   info.index_size = index_size;
    info.mode = mode;
    info.start = start;
    info.count = count;
@@ -74,9 +88,11 @@ util_draw_elements(struct pipe_context *pipe, int index_bias,
    pipe->draw_vbo(pipe, &info);
 }
 
-static INLINE void
+static inline void
 util_draw_arrays_instanced(struct pipe_context *pipe,
-                           uint mode, uint start, uint count,
+                           enum pipe_prim_type mode,
+                           uint start,
+                           uint count,
                            uint start_instance,
                            uint instance_count)
 {
@@ -94,17 +110,23 @@ util_draw_arrays_instanced(struct pipe_context *pipe,
    pipe->draw_vbo(pipe, &info);
 }
 
-static INLINE void
+static inline void
 util_draw_elements_instanced(struct pipe_context *pipe,
+                             void *indices,
+                             unsigned index_size,
                              int index_bias,
-                             uint mode, uint start, uint count,
+                             enum pipe_prim_type mode,
+                             uint start,
+                             uint count,
                              uint start_instance,
                              uint instance_count)
 {
    struct pipe_draw_info info;
 
    util_draw_init_info(&info);
-   info.indexed = TRUE;
+   info.index.user = indices;
+   info.has_user_indices = true;
+   info.index_size = index_size;
    info.mode = mode;
    info.start = start;
    info.count = count;
@@ -115,25 +137,25 @@ util_draw_elements_instanced(struct pipe_context *pipe,
    pipe->draw_vbo(pipe, &info);
 }
 
-static INLINE void
-util_draw_range_elements(struct pipe_context *pipe,
-                         int index_bias,
-                         uint min_index,
-                         uint max_index,
-                         uint mode, uint start, uint count)
-{
-   struct pipe_draw_info info;
 
-   util_draw_init_info(&info);
-   info.indexed = TRUE;
-   info.mode = mode;
-   info.start = start;
-   info.count = count;
-   info.index_bias = index_bias;
-   info.min_index = min_index;
-   info.max_index = max_index;
+/* This converts an indirect draw into a direct draw by mapping the indirect
+ * buffer, extracting its arguments, and calling pipe->draw_vbo.
+ */
+void
+util_draw_indirect(struct pipe_context *pipe,
+                   const struct pipe_draw_info *info);
 
-   pipe->draw_vbo(pipe, &info);
-}
 
+unsigned
+util_draw_max_index(
+      const struct pipe_vertex_buffer *vertex_buffers,
+      const struct pipe_vertex_element *vertex_elements,
+      unsigned nr_vertex_elements,
+      const struct pipe_draw_info *info);
+
+
+#ifdef __cplusplus
+}
 #endif
+
+#endif /* !U_DRAW_H */