1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**************************************************************************
2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas.
4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * All Rights Reserved.
5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a
7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * copy of this software and associated documentation files (the
8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * "Software"), to deal in the Software without restriction, including
9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * without limitation the rights to use, copy, modify, merge, publish,
10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * distribute, sub license, and/or sell copies of the Software, and to
11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * permit persons to whom the Software is furnished to do so, subject to
12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the following conditions:
13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The above copyright notice and this permission notice (including the
15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * next paragraph) shall be included in all copies or substantial portions
16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * of the Software.
17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org **************************************************************************/
27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef PIPE_CONTEXT_H
29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PIPE_CONTEXT_H
30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "p_compiler.h"
32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "p_format.h"
33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "p_video_enums.h"
34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef __cplusplus
36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern "C" {
37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif
38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_blend_color;
41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_blend_state;
42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_box;
43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_clip_state;
44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_constant_buffer;
45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_depth_stencil_alpha_state;
46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_draw_info;
47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_fence_handle;
48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_framebuffer_state;
49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_index_buffer;
50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_query;
51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_poly_stipple;
52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_rasterizer_state;
53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_resolve_info;
54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_resource;
55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_sampler_state;
56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_sampler_view;
57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_scissor_state;
58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_shader_state;
59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_stencil_ref;
60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_stream_output_target;
61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_surface;
62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_vertex_buffer;
63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_vertex_element;
64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_video_buffer;
65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_video_decoder;
66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_viewport_state;
67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_compute_state;
68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgunion pipe_color_union;
69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgunion pipe_query_result;
70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**
72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Gallium rendering context.  Basically:
73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *  - state setting functions
74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *  - VBO drawing functions
75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *  - surface functions
76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_context {
78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct pipe_screen *screen;
79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void *priv;  /**< context private data (for DRI for example) */
81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void *draw;  /**< private, for draw module (temporary?) */
82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void (*destroy)( struct pipe_context * );
84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /**
86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * VBO drawing
87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    */
88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /*@{*/
89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void (*draw_vbo)( struct pipe_context *pipe,
90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                     const struct pipe_draw_info *info );
91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /*@}*/
92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /**
94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * Predicate subsequent rendering on occlusion query result
95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * \param query  the query predicate, or NULL if no predicate
96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * \param mode  one of PIPE_RENDER_COND_x
97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    */
98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void (*render_condition)( struct pipe_context *pipe,
99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                             struct pipe_query *query,
100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                             uint mode );
101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /**
103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * Query objects
104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    */
105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /*@{*/
106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct pipe_query *(*create_query)( struct pipe_context *pipe,
107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                       unsigned query_type );
108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void (*destroy_query)(struct pipe_context *pipe,
110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         struct pipe_query *q);
111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void (*begin_query)(struct pipe_context *pipe, struct pipe_query *q);
113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void (*end_query)(struct pipe_context *pipe, struct pipe_query *q);
114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /**
116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * Get results of a query.
117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * \param wait  if true, this query will block until the result is ready
118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * \return TRUE if results are ready, FALSE otherwise
119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    */
120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   boolean (*get_query_result)(struct pipe_context *pipe,
121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                               struct pipe_query *q,
122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                               boolean wait,
123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                               union pipe_query_result *result);
124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /*@}*/
125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /**
127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * State functions (create/bind/destroy state objects)
128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    */
129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /*@{*/
130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void * (*create_blend_state)(struct pipe_context *,
131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                const struct pipe_blend_state *);
132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void   (*bind_blend_state)(struct pipe_context *, void *);
133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void   (*delete_blend_state)(struct pipe_context *, void  *);
134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void * (*create_sampler_state)(struct pipe_context *,
136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  const struct pipe_sampler_state *);
137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void   (*bind_fragment_sampler_states)(struct pipe_context *,
138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                          unsigned num_samplers,
139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                          void **samplers);
140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void   (*bind_vertex_sampler_states)(struct pipe_context *,
141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                        unsigned num_samplers,
142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                        void **samplers);
143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void   (*bind_geometry_sampler_states)(struct pipe_context *,
144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                          unsigned num_samplers,
145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                          void **samplers);
146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void   (*bind_compute_sampler_states)(struct pipe_context *,
147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                         unsigned start_slot,
148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                         unsigned num_samplers,
149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                         void **samplers);
150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void   (*delete_sampler_state)(struct pipe_context *, void *);
151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void * (*create_rasterizer_state)(struct pipe_context *,
153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                     const struct pipe_rasterizer_state *);
154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void   (*bind_rasterizer_state)(struct pipe_context *, void *);
155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void   (*delete_rasterizer_state)(struct pipe_context *, void *);
156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void * (*create_depth_stencil_alpha_state)(struct pipe_context *,
158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                        const struct pipe_depth_stencil_alpha_state *);
159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void   (*bind_depth_stencil_alpha_state)(struct pipe_context *, void *);
160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void   (*delete_depth_stencil_alpha_state)(struct pipe_context *, void *);
161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void * (*create_fs_state)(struct pipe_context *,
163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                             const struct pipe_shader_state *);
164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void   (*bind_fs_state)(struct pipe_context *, void *);
165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void   (*delete_fs_state)(struct pipe_context *, void *);
166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void * (*create_vs_state)(struct pipe_context *,
168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                             const struct pipe_shader_state *);
169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void   (*bind_vs_state)(struct pipe_context *, void *);
170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void   (*delete_vs_state)(struct pipe_context *, void *);
171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void * (*create_gs_state)(struct pipe_context *,
173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                             const struct pipe_shader_state *);
174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void   (*bind_gs_state)(struct pipe_context *, void *);
175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void   (*delete_gs_state)(struct pipe_context *, void *);
176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void * (*create_vertex_elements_state)(struct pipe_context *,
178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                          unsigned num_elements,
179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                          const struct pipe_vertex_element *);
180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void   (*bind_vertex_elements_state)(struct pipe_context *, void *);
181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void   (*delete_vertex_elements_state)(struct pipe_context *, void *);
182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /*@}*/
184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /**
186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * Parameter-like state (or properties)
187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    */
188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /*@{*/
189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void (*set_blend_color)( struct pipe_context *,
190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                            const struct pipe_blend_color * );
191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void (*set_stencil_ref)( struct pipe_context *,
193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                            const struct pipe_stencil_ref * );
194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void (*set_sample_mask)( struct pipe_context *,
196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                            unsigned sample_mask );
197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void (*set_clip_state)( struct pipe_context *,
199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                            const struct pipe_clip_state * );
200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void (*set_constant_buffer)( struct pipe_context *,
202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                uint shader, uint index,
203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                struct pipe_constant_buffer *buf );
204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void (*set_framebuffer_state)( struct pipe_context *,
206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  const struct pipe_framebuffer_state * );
207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void (*set_polygon_stipple)( struct pipe_context *,
209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org				const struct pipe_poly_stipple * );
210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void (*set_scissor_state)( struct pipe_context *,
212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              const struct pipe_scissor_state * );
213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void (*set_viewport_state)( struct pipe_context *,
215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                               const struct pipe_viewport_state * );
216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void (*set_fragment_sampler_views)(struct pipe_context *,
218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                      unsigned num_views,
219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                      struct pipe_sampler_view **);
220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void (*set_vertex_sampler_views)(struct pipe_context *,
222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                    unsigned num_views,
223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                    struct pipe_sampler_view **);
224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void (*set_geometry_sampler_views)(struct pipe_context *,
226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                      unsigned num_views,
227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                      struct pipe_sampler_view **);
228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void (*set_compute_sampler_views)(struct pipe_context *,
230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                     unsigned start_slot, unsigned num_views,
231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                     struct pipe_sampler_view **);
232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /**
234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * Bind an array of shader resources that will be used by the
235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * graphics pipeline.  Any resources that were previously bound to
236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * the specified range will be unbound after this call.
237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    *
238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * \param first      first resource to bind.
239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * \param count      number of consecutive resources to bind.
240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * \param resources  array of pointers to the resources to bind, it
241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    *                   should contain at least \a count elements
242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    *                   unless it's NULL, in which case no new
243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    *                   resources will be bound.
244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    */
245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void (*set_shader_resources)(struct pipe_context *,
246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                unsigned start, unsigned count,
247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                struct pipe_surface **resources);
248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void (*set_vertex_buffers)( struct pipe_context *,
250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                               unsigned num_buffers,
251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                               const struct pipe_vertex_buffer * );
252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void (*set_index_buffer)( struct pipe_context *pipe,
254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                             const struct pipe_index_buffer * );
255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /*@}*/
257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /**
259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * Stream output functions.
260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    */
261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /*@{*/
262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct pipe_stream_output_target *(*create_stream_output_target)(
264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                        struct pipe_context *,
265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                        struct pipe_resource *,
266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                        unsigned buffer_offset,
267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                        unsigned buffer_size);
268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void (*stream_output_target_destroy)(struct pipe_context *,
270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                        struct pipe_stream_output_target *);
271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void (*set_stream_output_targets)(struct pipe_context *,
273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              unsigned num_targets,
274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              struct pipe_stream_output_target **targets,
275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              unsigned append_bitmask);
276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /*@}*/
278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /**
281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * Resource functions for blit-like functionality
282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    *
283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * If a driver supports multisampling, resource_resolve must be available.
284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    */
285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /*@{*/
286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /**
288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * Copy a block of pixels from one resource to another.
289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * The resource must be of the same format.
290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * Resources with nr_samples > 1 are not allowed.
291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    */
292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void (*resource_copy_region)(struct pipe_context *pipe,
293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                struct pipe_resource *dst,
294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                unsigned dst_level,
295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                unsigned dstx, unsigned dsty, unsigned dstz,
296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                struct pipe_resource *src,
297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                unsigned src_level,
298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                const struct pipe_box *src_box);
299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /**
301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * Resolve a multisampled resource into a non-multisampled one.
302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * Source and destination must be of the same format.
303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    */
304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void (*resource_resolve)(struct pipe_context *pipe,
305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                            const struct pipe_resolve_info *info);
306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /*@}*/
308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /**
310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * Clear the specified set of currently bound buffers to specified values.
311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * The entire buffers are cleared (no scissor, no colormask, etc).
312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    *
313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * \param buffers  bitfield of PIPE_CLEAR_* values.
314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * \param color  pointer to a union of fiu array for each of r, g, b, a.
315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * \param depth  depth clear value in [0,1].
316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * \param stencil  stencil clear value
317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    */
318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void (*clear)(struct pipe_context *pipe,
319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                 unsigned buffers,
320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                 const union pipe_color_union *color,
321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                 double depth,
322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                 unsigned stencil);
323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /**
325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * Clear a color rendertarget surface.
326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * \param color  pointer to an union of fiu array for each of r, g, b, a.
327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    */
328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void (*clear_render_target)(struct pipe_context *pipe,
329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                               struct pipe_surface *dst,
330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                               const union pipe_color_union *color,
331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                               unsigned dstx, unsigned dsty,
332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                               unsigned width, unsigned height);
333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /**
335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * Clear a depth-stencil surface.
336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * \param clear_flags  bitfield of PIPE_CLEAR_DEPTH/STENCIL values.
337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * \param depth  depth clear value in [0,1].
338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * \param stencil  stencil clear value
339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    */
340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void (*clear_depth_stencil)(struct pipe_context *pipe,
341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                               struct pipe_surface *dst,
342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                               unsigned clear_flags,
343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                               double depth,
344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                               unsigned stencil,
345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                               unsigned dstx, unsigned dsty,
346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                               unsigned width, unsigned height);
347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /** Flush draw commands
349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    */
350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void (*flush)( struct pipe_context *pipe,
351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                  struct pipe_fence_handle **fence );
352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /**
354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * Create a view on a texture to be used by a shader stage.
355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    */
356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct pipe_sampler_view * (*create_sampler_view)(struct pipe_context *ctx,
357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                                     struct pipe_resource *texture,
358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                                     const struct pipe_sampler_view *templat);
359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void (*sampler_view_destroy)(struct pipe_context *ctx,
361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                struct pipe_sampler_view *view);
362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /**
365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * Get a surface which is a "view" into a resource, used by
366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * render target / depth stencil stages.
367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * \param usage  bitmaks of PIPE_BIND_* flags
368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    */
369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct pipe_surface *(*create_surface)(struct pipe_context *ctx,
370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                          struct pipe_resource *resource,
371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                          const struct pipe_surface *templat);
372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void (*surface_destroy)(struct pipe_context *ctx,
374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                           struct pipe_surface *);
375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /**
377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * Get a transfer object for transferring data to/from a texture.
378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    *
379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * Transfers are (by default) context-private and allow uploads to be
380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * interleaved with
381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    */
382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct pipe_transfer *(*get_transfer)(struct pipe_context *,
383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                         struct pipe_resource *resource,
384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                         unsigned level,
385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                         unsigned usage,  /* a combination of PIPE_TRANSFER_x */
386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                         const struct pipe_box *);
387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void (*transfer_destroy)(struct pipe_context *,
389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                            struct pipe_transfer *);
390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void *(*transfer_map)( struct pipe_context *,
392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                          struct pipe_transfer *transfer );
393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* If transfer was created with WRITE|FLUSH_EXPLICIT, only the
395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * regions specified with this call are guaranteed to be written to
396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * the resource.
397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    */
398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void (*transfer_flush_region)( struct pipe_context *,
399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org				  struct pipe_transfer *transfer,
400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org				  const struct pipe_box *);
401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void (*transfer_unmap)( struct pipe_context *,
403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                           struct pipe_transfer *transfer );
404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* One-shot transfer operation with data supplied in a user
407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * pointer.  XXX: strides??
408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    */
409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void (*transfer_inline_write)( struct pipe_context *,
410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  struct pipe_resource *,
411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  unsigned level,
412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  unsigned usage, /* a combination of PIPE_TRANSFER_x */
413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  const struct pipe_box *,
414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  const void *data,
415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  unsigned stride,
416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  unsigned layer_stride);
417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /**
419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * Flush any pending framebuffer writes and invalidate texture caches.
420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    */
421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void (*texture_barrier)(struct pipe_context *);
422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /**
424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * Creates a video decoder for a specific video codec/profile
425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    */
426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct pipe_video_decoder *(*create_video_decoder)( struct pipe_context *context,
427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                                       enum pipe_video_profile profile,
428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                                       enum pipe_video_entrypoint entrypoint,
429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                                       enum pipe_video_chroma_format chroma_format,
430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                                       unsigned width, unsigned height, unsigned max_references,
431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                                       bool expect_chunked_decode);
432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /**
434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * Creates a video buffer as decoding target
435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    */
436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct pipe_video_buffer *(*create_video_buffer)( struct pipe_context *context,
437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                                     const struct pipe_video_buffer *templat );
438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /**
440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * Compute kernel execution
441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    */
442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /*@{*/
443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /**
444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * Define the compute program and parameters to be used by
445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * pipe_context::launch_grid.
446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    */
447f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void *(*create_compute_state)(struct pipe_context *context,
448f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org				 const struct pipe_compute_state *);
449f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void (*bind_compute_state)(struct pipe_context *, void *);
450f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void (*delete_compute_state)(struct pipe_context *, void *);
451f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
452f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /**
453f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * Bind an array of shader resources that will be used by the
454f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * compute program.  Any resources that were previously bound to
455f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * the specified range will be unbound after this call.
456f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    *
457f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * \param first      first resource to bind.
458f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * \param count      number of consecutive resources to bind.
459f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * \param resources  array of pointers to the resources to bind, it
460f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    *                   should contain at least \a count elements
461f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    *                   unless it's NULL, in which case no new
462f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    *                   resources will be bound.
463f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    */
464f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void (*set_compute_resources)(struct pipe_context *,
465f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                 unsigned start, unsigned count,
466f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                 struct pipe_surface **resources);
467f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
468f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /**
469f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * Bind an array of buffers to be mapped into the address space of
470f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * the GLOBAL resource.  Any buffers that were previously bound
471f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * between [first, first + count - 1] are unbound after this call.
472f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    *
473f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * \param first      first buffer to map.
474f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * \param count      number of consecutive buffers to map.
475f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * \param resources  array of pointers to the buffers to map, it
476f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    *                   should contain at least \a count elements
477f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    *                   unless it's NULL, in which case no new
478f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    *                   resources will be bound.
479f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * \param handles    array of pointers to the memory locations that
480f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    *                   will be filled with the respective base
481f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    *                   addresses each buffer will be mapped to.  It
482f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    *                   should contain at least \a count elements,
483f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    *                   unless \a resources is NULL in which case \a
484f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    *                   handles should be NULL as well.
485f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    *
486f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * Note that the driver isn't required to make any guarantees about
487f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * the contents of the \a handles array being valid anytime except
488f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * during the subsequent calls to pipe_context::launch_grid.  This
489f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * means that the only sensible location handles[i] may point to is
490f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * somewhere within the INPUT buffer itself.  This is so to
491f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * accommodate implementations that lack virtual memory but
492f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * nevertheless migrate buffers on the fly, leading to resource
493f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * base addresses that change on each kernel invocation or are
494f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * unknown to the pipe driver.
495f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    */
496f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void (*set_global_binding)(struct pipe_context *context,
497f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              unsigned first, unsigned count,
498f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              struct pipe_resource **resources,
499f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              uint32_t **handles);
500f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
501f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /**
502f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * Launch the compute kernel starting from instruction \a pc of the
503f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * currently bound compute program.
504f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    *
505f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * \a grid_layout and \a block_layout are arrays of size \a
506f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * PIPE_COMPUTE_CAP_GRID_DIMENSION that determine the layout of the
507f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * grid (in block units) and working block (in thread units) to be
508f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * used, respectively.
509f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    *
510f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * \a input will be used to initialize the INPUT resource, and it
511f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * should point to a buffer of at least
512f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * pipe_compute_state::req_input_mem bytes.
513f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    */
514f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void (*launch_grid)(struct pipe_context *context,
515f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       const uint *block_layout, const uint *grid_layout,
516f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       uint32_t pc, const void *input);
517f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /*@}*/
518f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
519f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
520f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
521f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef __cplusplus
522f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
523f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif
524f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
525f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif /* PIPE_CONTEXT_H */
526