gallium: rename clearRT / clearDS to clear_render_target / clear_depth_stencil
[profile/ivi/mesa.git] / src / gallium / include / pipe / p_context.h
index 6aba6ef..3e082be 100644 (file)
@@ -65,8 +65,9 @@ struct pipe_context {
                         unsigned mode, unsigned start, unsigned count);
 
    void (*draw_elements)( struct pipe_context *pipe,
-                          struct pipe_buffer *indexBuffer,
+                          struct pipe_resource *indexBuffer,
                           unsigned indexSize,
+                          int indexBias,
                           unsigned mode, unsigned start, unsigned count);
 
    void (*draw_arrays_instanced)(struct pipe_context *pipe,
@@ -77,8 +78,9 @@ struct pipe_context {
                                  unsigned instanceCount);
 
    void (*draw_elements_instanced)(struct pipe_context *pipe,
-                                   struct pipe_buffer *indexBuffer,
+                                   struct pipe_resource *indexBuffer,
                                    unsigned indexSize,
+                                   int indexBias,
                                    unsigned mode,
                                    unsigned start,
                                    unsigned count,
@@ -91,8 +93,9 @@ struct pipe_context {
     * module.
     */
    void (*draw_range_elements)( struct pipe_context *pipe,
-                                struct pipe_buffer *indexBuffer,
+                                struct pipe_resource *indexBuffer,
                                 unsigned indexSize,
+                                int indexBias,
                                 unsigned minIndex,
                                 unsigned maxIndex,
                                 unsigned mode, 
@@ -195,12 +198,15 @@ struct pipe_context {
    void (*set_stencil_ref)( struct pipe_context *,
                             const struct pipe_stencil_ref * );
 
+   void (*set_sample_mask)( struct pipe_context *,
+                            unsigned sample_mask );
+
    void (*set_clip_state)( struct pipe_context *,
                             const struct pipe_clip_state * );
 
    void (*set_constant_buffer)( struct pipe_context *,
                                 uint shader, uint index,
-                                struct pipe_buffer *buf );
+                                struct pipe_resource *buf );
 
    void (*set_framebuffer_state)( struct pipe_context *,
                                   const struct pipe_framebuffer_state * );
@@ -230,32 +236,36 @@ struct pipe_context {
 
 
    /**
-    * Surface functions
+    * Resource functions for blit-like functionality
     *
-    * The pipe driver is allowed to set these functions to NULL, and in that
-    * case, they will not be available.
+    * If a driver supports multisampling, resource_resolve must be available.
     */
    /*@{*/
 
    /**
-    * Copy a block of pixels from one surface to another.
-    * The surfaces must be of the same format.
+    * Copy a block of pixels from one resource to another.
+    * The resource must be of the same format.
+    * Resources with nr_samples > 1 are not allowed.
     */
-   void (*surface_copy)(struct pipe_context *pipe,
-                       struct pipe_surface *dest,
-                       unsigned destx, unsigned desty,
-                       struct pipe_surface *src,
-                       unsigned srcx, unsigned srcy,
-                       unsigned width, unsigned height);
+   void (*resource_copy_region)(struct pipe_context *pipe,
+                                struct pipe_resource *dst,
+                                struct pipe_subresource subdst,
+                                unsigned dstx, unsigned dsty, unsigned dstz,
+                                struct pipe_resource *src,
+                                struct pipe_subresource subsrc,
+                                unsigned srcx, unsigned srcy, unsigned srcz,
+                                unsigned width, unsigned height);
 
    /**
-    * Fill a region of a surface with a constant value.
+    * Resolve a multisampled resource into a non-multisampled one.
+    * Source and destination must have the same size and same format.
     */
-   void (*surface_fill)(struct pipe_context *pipe,
-                       struct pipe_surface *dst,
-                       unsigned dstx, unsigned dsty,
-                       unsigned width, unsigned height,
-                       unsigned value);
+   void (*resource_resolve)(struct pipe_context *pipe,
+                            struct pipe_resource *dst,
+                            struct pipe_subresource subdst,
+                            struct pipe_resource *src,
+                            struct pipe_subresource subsrc);
+
    /*@}*/
 
    /**
@@ -269,9 +279,33 @@ struct pipe_context {
     */
    void (*clear)(struct pipe_context *pipe,
                  unsigned buffers,
-                const float *rgba,
+                 const float *rgba,
                  double depth,
-                unsigned stencil);
+                 unsigned stencil);
+
+   /**
+    * Clear a color rendertarget surface.
+    * \param rgba  pointer to an array of one float for each of r, g, b, a.
+    */
+   void (*clear_render_target)(struct pipe_context *pipe,
+                               struct pipe_surface *dst,
+                               const float *rgba,
+                               unsigned dstx, unsigned dsty,
+                               unsigned width, unsigned height);
+
+   /**
+    * Clear a depth-stencil surface.
+    * \param clear_flags  bitfield of PIPE_CLEAR_DEPTH/STENCIL values.
+    * \param depth  depth clear value in [0,1].
+    * \param stencil  stencil clear value
+    */
+   void (*clear_depth_stencil)(struct pipe_context *pipe,
+                               struct pipe_surface *dst,
+                               unsigned clear_flags,
+                               double depth,
+                               unsigned stencil,
+                               unsigned dstx, unsigned dsty,
+                               unsigned width, unsigned height);
 
    /** Flush rendering
     * \param flags  bitmask of PIPE_FLUSH_x tokens)
@@ -291,27 +325,15 @@ struct pipe_context {
     * \param level  mipmap level.
     * \return mask of PIPE_REFERENCED_FOR_READ/WRITE or PIPE_UNREFERENCED
     */
-   unsigned int (*is_texture_referenced)(struct pipe_context *pipe,
-                                        struct pipe_texture *texture,
-                                        unsigned face, unsigned level);
-
-   /**
-    * Check whether a buffer is referenced by an unflushed hw command.
-    * The state-tracker uses this function to avoid unnecessary flushes.
-    * It is safe (but wasteful) to always return
-    * PIPE_REFERENCED_FOR_READ | PIPE_REFERENCED_FOR_WRITE.
-    * \param pipe  context whose unflushed hw commands will be checked.
-    * \param buf  buffer to check.
-    * \return mask of PIPE_REFERENCED_FOR_READ/WRITE or PIPE_UNREFERENCED
-    */
-   unsigned int (*is_buffer_referenced)(struct pipe_context *pipe,
-                                       struct pipe_buffer *buf);
+   unsigned int (*is_resource_referenced)(struct pipe_context *pipe,
+                                         struct pipe_resource *texture,
+                                         unsigned face, unsigned level);
 
    /**
     * Create a view on a texture to be used by a shader stage.
     */
    struct pipe_sampler_view * (*create_sampler_view)(struct pipe_context *ctx,
-                                                     struct pipe_texture *texture,
+                                                     struct pipe_resource *texture,
                                                      const struct pipe_sampler_view *templat);
 
    void (*sampler_view_destroy)(struct pipe_context *ctx,
@@ -324,24 +346,42 @@ struct pipe_context {
     * Transfers are (by default) context-private and allow uploads to be
     * interleaved with
     */
-   struct pipe_transfer *(*get_tex_transfer)(struct pipe_context *,
-                                             struct pipe_texture *texture,
-                                             unsigned face, unsigned level,
-                                             unsigned zslice,
-                                             enum pipe_transfer_usage usage,
-                                             unsigned x, unsigned y,
-                                             unsigned w, unsigned h);
-
-   void (*tex_transfer_destroy)(struct pipe_context *,
+   struct pipe_transfer *(*get_transfer)(struct pipe_context *,
+                                        struct pipe_resource *resource,
+                                        struct pipe_subresource,
+                                        unsigned usage,  /* a combination of PIPE_TRANSFER_x */
+                                        const struct pipe_box *);
+
+   void (*transfer_destroy)(struct pipe_context *,
                                 struct pipe_transfer *);
    
    void *(*transfer_map)( struct pipe_context *,
                           struct pipe_transfer *transfer );
 
+   /* If transfer was created with WRITE|FLUSH_EXPLICIT, only the
+    * regions specified with this call are guaranteed to be written to
+    * the resource.
+    */
+   void (*transfer_flush_region)( struct pipe_context *,
+                                 struct pipe_transfer *transfer,
+                                 const struct pipe_box *);
+
    void (*transfer_unmap)( struct pipe_context *,
                            struct pipe_transfer *transfer );
 
 
+   /* One-shot transfer operation with data supplied in a user
+    * pointer.  XXX: strides??
+    */
+   void (*transfer_inline_write)( struct pipe_context *,
+                                 struct pipe_resource *,
+                                 struct pipe_subresource,
+                                 unsigned usage, /* a combination of PIPE_TRANSFER_x */
+                                 const struct pipe_box *,
+                                 const void *data,
+                                 unsigned stride,
+                                 unsigned slice_stride);
+
 };