id_context.c revision 25296a3ed380f2a2179a9f435645a7ccaf10c04c
1d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz/**************************************************************************
2d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz *
3d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz * Copyright 2009 VMware, Inc.
4d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz * All Rights Reserved.
5d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz *
6d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz * Permission is hereby granted, free of charge, to any person obtaining a
7d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz * copy of this software and associated documentation files (the
8d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz * "Software"), to deal in the Software without restriction, including
9d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz * without limitation the rights to use, copy, modify, merge, publish,
10d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz * distribute, sub license, and/or sell copies of the Software, and to
11d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz * permit persons to whom the Software is furnished to do so, subject to
12d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz * the following conditions:
13d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz *
14d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz * The above copyright notice and this permission notice (including the
15d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz * next paragraph) shall be included in all copies or substantial portions
16d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz * of the Software.
17d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz *
18d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
22d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz *
26d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz **************************************************************************/
27d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
28d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
29d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz#include "pipe/p_context.h"
30d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz#include "util/u_memory.h"
31287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell#include "util/u_inlines.h"
32d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
33d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz#include "id_context.h"
34d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz#include "id_objects.h"
35d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
36d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
37d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
38d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_destroy(struct pipe_context *_pipe)
39d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
40d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
41d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
42d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
43d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->destroy(pipe);
44d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
452ce1d6696b1415fcc340bcf888904e43c2792c68José Fonseca   FREE(id_pipe);
46d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
47d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
48d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
49d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_draw_arrays(struct pipe_context *_pipe,
50d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                     unsigned prim,
51d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                     unsigned start,
52d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                     unsigned count)
53d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
54d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
55d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
56d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
5709e785ee04c80c2bdf27245be7dafc79cce5b0adKeith Whitwell   pipe->draw_arrays(pipe,
5809e785ee04c80c2bdf27245be7dafc79cce5b0adKeith Whitwell                     prim,
5909e785ee04c80c2bdf27245be7dafc79cce5b0adKeith Whitwell                     start,
6009e785ee04c80c2bdf27245be7dafc79cce5b0adKeith Whitwell                     count);
61d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
62d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
6309e785ee04c80c2bdf27245be7dafc79cce5b0adKeith Whitwellstatic void
64d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_draw_elements(struct pipe_context *_pipe,
65287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell                       struct pipe_resource *_indexResource,
66d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                       unsigned indexSize,
67382e9cc07b9193924b0eaf840a4d34cade2c7d92José Fonseca                       int indexBias,
68d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                       unsigned prim,
69d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                       unsigned start,
70d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                       unsigned count)
71d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
72d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
73287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   struct identity_resource *id_resource = identity_resource(_indexResource);
74d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
75287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   struct pipe_resource *indexResource = id_resource->resource;
76d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
7709e785ee04c80c2bdf27245be7dafc79cce5b0adKeith Whitwell   pipe->draw_elements(pipe,
78287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell                       indexResource,
7909e785ee04c80c2bdf27245be7dafc79cce5b0adKeith Whitwell                       indexSize,
80382e9cc07b9193924b0eaf840a4d34cade2c7d92José Fonseca                       indexBias,
8109e785ee04c80c2bdf27245be7dafc79cce5b0adKeith Whitwell                       prim,
8209e785ee04c80c2bdf27245be7dafc79cce5b0adKeith Whitwell                       start,
8309e785ee04c80c2bdf27245be7dafc79cce5b0adKeith Whitwell                       count);
84d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
85d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
8609e785ee04c80c2bdf27245be7dafc79cce5b0adKeith Whitwellstatic void
87d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_draw_range_elements(struct pipe_context *_pipe,
88287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell                             struct pipe_resource *_indexResource,
89d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                             unsigned indexSize,
90382e9cc07b9193924b0eaf840a4d34cade2c7d92José Fonseca                             int indexBias,
91d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                             unsigned minIndex,
92d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                             unsigned maxIndex,
93d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                             unsigned mode,
94d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                             unsigned start,
95d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                             unsigned count)
96d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
97d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
98287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   struct identity_resource *id_resource = identity_resource(_indexResource);
99d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
100287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   struct pipe_resource *indexResource = id_resource->resource;
101d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
10209e785ee04c80c2bdf27245be7dafc79cce5b0adKeith Whitwell   pipe->draw_range_elements(pipe,
103287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell                             indexResource,
10409e785ee04c80c2bdf27245be7dafc79cce5b0adKeith Whitwell                             indexSize,
105382e9cc07b9193924b0eaf840a4d34cade2c7d92José Fonseca                             indexBias,
10609e785ee04c80c2bdf27245be7dafc79cce5b0adKeith Whitwell                             minIndex,
10709e785ee04c80c2bdf27245be7dafc79cce5b0adKeith Whitwell                             maxIndex,
10809e785ee04c80c2bdf27245be7dafc79cce5b0adKeith Whitwell                             mode,
10909e785ee04c80c2bdf27245be7dafc79cce5b0adKeith Whitwell                             start,
11009e785ee04c80c2bdf27245be7dafc79cce5b0adKeith Whitwell                             count);
111d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
112d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
113d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic struct pipe_query *
114d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_create_query(struct pipe_context *_pipe,
115d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                      unsigned query_type)
116d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
117d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
118d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
119d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
120d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   return pipe->create_query(pipe,
121d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                             query_type);
122d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
123d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
124d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
125d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_destroy_query(struct pipe_context *_pipe,
126d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                       struct pipe_query *query)
127d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
128d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
129d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
130d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
131d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->destroy_query(pipe,
132d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                       query);
133d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
134d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
135d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
136d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_begin_query(struct pipe_context *_pipe,
137d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                     struct pipe_query *query)
138d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
139d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
140d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
141d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
142d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->begin_query(pipe,
143d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                     query);
144d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
145d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
146d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
147d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_end_query(struct pipe_context *_pipe,
148d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                   struct pipe_query *query)
149d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
150d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
151d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
152d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
153d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->end_query(pipe,
154d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                   query);
155d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
156d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
157d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic boolean
158d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_get_query_result(struct pipe_context *_pipe,
159d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                          struct pipe_query *query,
160d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                          boolean wait,
161d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                          uint64_t *result)
162d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
163d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
164d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
165d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
166d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   return pipe->get_query_result(pipe,
167d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                                 query,
168d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                                 wait,
169d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                                 result);
170d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
171d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
172d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void *
173d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_create_blend_state(struct pipe_context *_pipe,
174d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                            const struct pipe_blend_state *blend)
175d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
176d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
177d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
178d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
179d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   return pipe->create_blend_state(pipe,
180d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                                   blend);
181d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
182d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
183d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
184d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_bind_blend_state(struct pipe_context *_pipe,
185d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                          void *blend)
186d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
187d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
188d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
189d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
190d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->bind_blend_state(pipe,
191d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                              blend);
192d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
193d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
194d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
195d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_delete_blend_state(struct pipe_context *_pipe,
196d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                            void *blend)
197d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
198d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
199d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
200d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
201d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->delete_blend_state(pipe,
202d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                            blend);
203d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
204d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
205d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void *
206d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_create_sampler_state(struct pipe_context *_pipe,
207d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                              const struct pipe_sampler_state *sampler)
208d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
209d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
210d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
211d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
212d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   return pipe->create_sampler_state(pipe,
213d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                                     sampler);
214d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
215d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
216d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
217f2f7bd855af49752b1c77746542c62f1c529e953Michal Krolidentity_bind_fragment_sampler_states(struct pipe_context *_pipe,
218f2f7bd855af49752b1c77746542c62f1c529e953Michal Krol                                      unsigned num_samplers,
219f2f7bd855af49752b1c77746542c62f1c529e953Michal Krol                                      void **samplers)
220d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
221d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
222d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
223d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
224f0d3abf3834d3ae6107e66b61d8660e6c09a0a99Michal Krol   pipe->bind_fragment_sampler_states(pipe,
225f2f7bd855af49752b1c77746542c62f1c529e953Michal Krol                                      num_samplers,
226f0d3abf3834d3ae6107e66b61d8660e6c09a0a99Michal Krol                                      samplers);
227d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
228d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
229d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
230f2f7bd855af49752b1c77746542c62f1c529e953Michal Krolidentity_bind_vertex_sampler_states(struct pipe_context *_pipe,
231f2f7bd855af49752b1c77746542c62f1c529e953Michal Krol                                    unsigned num_samplers,
232f2f7bd855af49752b1c77746542c62f1c529e953Michal Krol                                    void **samplers)
233f2f7bd855af49752b1c77746542c62f1c529e953Michal Krol{
234f2f7bd855af49752b1c77746542c62f1c529e953Michal Krol   struct identity_context *id_pipe = identity_context(_pipe);
235f2f7bd855af49752b1c77746542c62f1c529e953Michal Krol   struct pipe_context *pipe = id_pipe->pipe;
236f2f7bd855af49752b1c77746542c62f1c529e953Michal Krol
237f2f7bd855af49752b1c77746542c62f1c529e953Michal Krol   pipe->bind_vertex_sampler_states(pipe,
238f2f7bd855af49752b1c77746542c62f1c529e953Michal Krol                                    num_samplers,
239f2f7bd855af49752b1c77746542c62f1c529e953Michal Krol                                    samplers);
240f2f7bd855af49752b1c77746542c62f1c529e953Michal Krol}
241f2f7bd855af49752b1c77746542c62f1c529e953Michal Krol
242f2f7bd855af49752b1c77746542c62f1c529e953Michal Krolstatic void
243d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_delete_sampler_state(struct pipe_context *_pipe,
244d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                              void *sampler)
245d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
246d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
247d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
248d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
249d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->delete_sampler_state(pipe,
250d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                              sampler);
251d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
252d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
253d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void *
254d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_create_rasterizer_state(struct pipe_context *_pipe,
255d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                                 const struct pipe_rasterizer_state *rasterizer)
256d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
257d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
258d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
259d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
260d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   return pipe->create_rasterizer_state(pipe,
261d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                                        rasterizer);
262d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
263d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
264d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
265d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_bind_rasterizer_state(struct pipe_context *_pipe,
266d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                               void *rasterizer)
267d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
268d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
269d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
270d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
271d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->bind_rasterizer_state(pipe,
272d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                               rasterizer);
273d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
274d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
275d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
276d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_delete_rasterizer_state(struct pipe_context *_pipe,
277d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                                 void *rasterizer)
278d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
279d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
280d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
281d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
282d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->delete_rasterizer_state(pipe,
283d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                                 rasterizer);
284d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
285d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
286d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void *
287d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_create_depth_stencil_alpha_state(struct pipe_context *_pipe,
288d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                                          const struct pipe_depth_stencil_alpha_state *depth_stencil_alpha)
289d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
290d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
291d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
292d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
293d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   return pipe->create_depth_stencil_alpha_state(pipe,
294d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                                                 depth_stencil_alpha);
295d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
296d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
297d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
298d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_bind_depth_stencil_alpha_state(struct pipe_context *_pipe,
299d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                                        void *depth_stencil_alpha)
300d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
301d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
302d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
303d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
304d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->bind_depth_stencil_alpha_state(pipe,
305d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                                        depth_stencil_alpha);
306d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
307d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
308d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
309d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_delete_depth_stencil_alpha_state(struct pipe_context *_pipe,
310d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                                          void *depth_stencil_alpha)
311d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
312d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
313d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
314d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
315d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->delete_depth_stencil_alpha_state(pipe,
316d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                                          depth_stencil_alpha);
317d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
318d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
319d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void *
320d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_create_fs_state(struct pipe_context *_pipe,
321d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                         const struct pipe_shader_state *fs)
322d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
323d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
324d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
325d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
326d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   return pipe->create_fs_state(pipe,
327d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                                fs);
328d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
329d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
330d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
331d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_bind_fs_state(struct pipe_context *_pipe,
332d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                       void *fs)
333d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
334d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
335d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
336d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
337d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->bind_fs_state(pipe,
338d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                       fs);
339d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
340d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
341d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
342d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_delete_fs_state(struct pipe_context *_pipe,
343d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                         void *fs)
344d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
345d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
346d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
347d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
348d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->delete_fs_state(pipe,
349d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                         fs);
350d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
351d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
352d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void *
353d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_create_vs_state(struct pipe_context *_pipe,
354d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                         const struct pipe_shader_state *vs)
355d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
356d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
357d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
358d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
359d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   return pipe->create_vs_state(pipe,
360d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                                vs);
361d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
362d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
363d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
364d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_bind_vs_state(struct pipe_context *_pipe,
365d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                       void *vs)
366d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
367d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
368d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
369d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
370d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->bind_vs_state(pipe,
371d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                       vs);
372d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
373d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
374d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
375d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_delete_vs_state(struct pipe_context *_pipe,
376d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                         void *vs)
377d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
378d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
379d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
380d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
381d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->delete_vs_state(pipe,
382d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                         vs);
383d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
384d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
385881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger
3864d02534628e5fd4cd1231c5d742928b34067f25cRoland Scheideggerstatic void *
387881be308360ec8019f17bc970bece23e9395134fRoland Scheideggeridentity_create_vertex_elements_state(struct pipe_context *_pipe,
388881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger                                      unsigned num_elements,
389881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger                                      const struct pipe_vertex_element *vertex_elements)
390881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger{
391881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger   struct identity_context *id_pipe = identity_context(_pipe);
392881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger   struct pipe_context *pipe = id_pipe->pipe;
393881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger
3944d02534628e5fd4cd1231c5d742928b34067f25cRoland Scheidegger   return pipe->create_vertex_elements_state(pipe,
3954d02534628e5fd4cd1231c5d742928b34067f25cRoland Scheidegger                                             num_elements,
3964d02534628e5fd4cd1231c5d742928b34067f25cRoland Scheidegger                                             vertex_elements);
397881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger}
398881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger
399881be308360ec8019f17bc970bece23e9395134fRoland Scheideggerstatic void
400881be308360ec8019f17bc970bece23e9395134fRoland Scheideggeridentity_bind_vertex_elements_state(struct pipe_context *_pipe,
401881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger                                    void *velems)
402881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger{
403881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger   struct identity_context *id_pipe = identity_context(_pipe);
404881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger   struct pipe_context *pipe = id_pipe->pipe;
405881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger
406881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger   pipe->bind_vertex_elements_state(pipe,
407881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger                                    velems);
408881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger}
409881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger
410881be308360ec8019f17bc970bece23e9395134fRoland Scheideggerstatic void
411881be308360ec8019f17bc970bece23e9395134fRoland Scheideggeridentity_delete_vertex_elements_state(struct pipe_context *_pipe,
412881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger                                      void *velems)
413881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger{
414881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger   struct identity_context *id_pipe = identity_context(_pipe);
415881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger   struct pipe_context *pipe = id_pipe->pipe;
416881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger
417881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger   pipe->delete_vertex_elements_state(pipe,
418881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger                                      velems);
419881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger}
420881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger
421d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
422d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_set_blend_color(struct pipe_context *_pipe,
423d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                         const struct pipe_blend_color *blend_color)
424d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
425d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
426d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
427d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
428d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->set_blend_color(pipe,
429d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                         blend_color);
430d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
431d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
432d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
4334ea2f61e5ae556fa4141cd226ecbf1521e9f16ffRoland Scheideggeridentity_set_stencil_ref(struct pipe_context *_pipe,
4344ea2f61e5ae556fa4141cd226ecbf1521e9f16ffRoland Scheidegger                         const struct pipe_stencil_ref *stencil_ref)
4354ea2f61e5ae556fa4141cd226ecbf1521e9f16ffRoland Scheidegger{
4364ea2f61e5ae556fa4141cd226ecbf1521e9f16ffRoland Scheidegger   struct identity_context *id_pipe = identity_context(_pipe);
4374ea2f61e5ae556fa4141cd226ecbf1521e9f16ffRoland Scheidegger   struct pipe_context *pipe = id_pipe->pipe;
4384ea2f61e5ae556fa4141cd226ecbf1521e9f16ffRoland Scheidegger
4394ea2f61e5ae556fa4141cd226ecbf1521e9f16ffRoland Scheidegger   pipe->set_stencil_ref(pipe,
4404ea2f61e5ae556fa4141cd226ecbf1521e9f16ffRoland Scheidegger                         stencil_ref);
4414ea2f61e5ae556fa4141cd226ecbf1521e9f16ffRoland Scheidegger}
4424ea2f61e5ae556fa4141cd226ecbf1521e9f16ffRoland Scheidegger
4434ea2f61e5ae556fa4141cd226ecbf1521e9f16ffRoland Scheideggerstatic void
444d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_set_clip_state(struct pipe_context *_pipe,
445d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                        const struct pipe_clip_state *clip)
446d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
447d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
448d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
449d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
450d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->set_clip_state(pipe,
451d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                        clip);
452d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
453d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
454d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
45543234cee40c48e14a3eab4268181d9b0b2b7cf79Roland Scheideggeridentity_set_sample_mask(struct pipe_context *_pipe,
45643234cee40c48e14a3eab4268181d9b0b2b7cf79Roland Scheidegger                         unsigned sample_mask)
45743234cee40c48e14a3eab4268181d9b0b2b7cf79Roland Scheidegger{
45843234cee40c48e14a3eab4268181d9b0b2b7cf79Roland Scheidegger   struct identity_context *id_pipe = identity_context(_pipe);
45943234cee40c48e14a3eab4268181d9b0b2b7cf79Roland Scheidegger   struct pipe_context *pipe = id_pipe->pipe;
46043234cee40c48e14a3eab4268181d9b0b2b7cf79Roland Scheidegger
46143234cee40c48e14a3eab4268181d9b0b2b7cf79Roland Scheidegger   pipe->set_sample_mask(pipe,
46243234cee40c48e14a3eab4268181d9b0b2b7cf79Roland Scheidegger                         sample_mask);
46343234cee40c48e14a3eab4268181d9b0b2b7cf79Roland Scheidegger}
46443234cee40c48e14a3eab4268181d9b0b2b7cf79Roland Scheidegger
46543234cee40c48e14a3eab4268181d9b0b2b7cf79Roland Scheideggerstatic void
466d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_set_constant_buffer(struct pipe_context *_pipe,
467d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                             uint shader,
468d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                             uint index,
469287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell                             struct pipe_resource *_resource)
470d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
471d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
472d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
473287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   struct pipe_resource *unwrapped_resource;
474287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   struct pipe_resource *resource = NULL;
475d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
4761278507e3bf2e83c7027820a0d313de267a440ffRoland Scheidegger   /* XXX hmm? unwrap the input state */
477287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   if (_resource) {
478287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell      unwrapped_resource = identity_resource_unwrap(_resource);
479287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell      resource = unwrapped_resource;
480d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   }
481d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
482d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->set_constant_buffer(pipe,
483d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                             shader,
484d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                             index,
485287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell                             resource);
486d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
487d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
488d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
489d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_set_framebuffer_state(struct pipe_context *_pipe,
490d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                               const struct pipe_framebuffer_state *_state)
491d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
492d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
493d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
494d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_framebuffer_state unwrapped_state;
495d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_framebuffer_state *state = NULL;
496d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   unsigned i;
497d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
498d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   /* unwrap the input state */
499d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   if (_state) {
500d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz      memcpy(&unwrapped_state, _state, sizeof(unwrapped_state));
501d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz      for(i = 0; i < _state->nr_cbufs; i++)
502d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz         unwrapped_state.cbufs[i] = identity_surface_unwrap(_state->cbufs[i]);
503d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz      for (; i < PIPE_MAX_COLOR_BUFS; i++)
504d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz         unwrapped_state.cbufs[i] = NULL;
505d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz      unwrapped_state.zsbuf = identity_surface_unwrap(_state->zsbuf);
506d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz      state = &unwrapped_state;
507d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   }
508d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
509d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->set_framebuffer_state(pipe,
510d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                               state);
511d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
512d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
513d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
514d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_set_polygon_stipple(struct pipe_context *_pipe,
515d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                             const struct pipe_poly_stipple *poly_stipple)
516d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
517d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
518d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
519d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
520d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->set_polygon_stipple(pipe,
521d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                             poly_stipple);
522d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
523d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
524d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
525d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_set_scissor_state(struct pipe_context *_pipe,
526d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                           const struct pipe_scissor_state *scissor)
527d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
528d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
529d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
530d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
531d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->set_scissor_state(pipe,
532d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                           scissor);
533d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
534d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
535d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
536d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_set_viewport_state(struct pipe_context *_pipe,
537d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                            const struct pipe_viewport_state *viewport)
538d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
539d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
540d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
541d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
542d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->set_viewport_state(pipe,
543d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                            viewport);
544d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
545d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
546d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
547f6106566081978f663cf08e54bb8908cb58a5316Michal Krolidentity_set_fragment_sampler_views(struct pipe_context *_pipe,
548f6106566081978f663cf08e54bb8908cb58a5316Michal Krol                                    unsigned num,
549f6106566081978f663cf08e54bb8908cb58a5316Michal Krol                                    struct pipe_sampler_view **_views)
550d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
551d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
552d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
553f6106566081978f663cf08e54bb8908cb58a5316Michal Krol   struct pipe_sampler_view *unwrapped_views[PIPE_MAX_SAMPLERS];
554f6106566081978f663cf08e54bb8908cb58a5316Michal Krol   struct pipe_sampler_view **views = NULL;
555d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   unsigned i;
556d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
557f6106566081978f663cf08e54bb8908cb58a5316Michal Krol   if (_views) {
558f6106566081978f663cf08e54bb8908cb58a5316Michal Krol      for (i = 0; i < num; i++)
559f6106566081978f663cf08e54bb8908cb58a5316Michal Krol         unwrapped_views[i] = identity_sampler_view_unwrap(_views[i]);
560d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz      for (; i < PIPE_MAX_SAMPLERS; i++)
561f6106566081978f663cf08e54bb8908cb58a5316Michal Krol         unwrapped_views[i] = NULL;
562d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
563f6106566081978f663cf08e54bb8908cb58a5316Michal Krol      views = unwrapped_views;
564d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   }
565d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
566f6106566081978f663cf08e54bb8908cb58a5316Michal Krol   pipe->set_fragment_sampler_views(pipe, num, views);
567d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
568d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
569d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
570f6106566081978f663cf08e54bb8908cb58a5316Michal Krolidentity_set_vertex_sampler_views(struct pipe_context *_pipe,
571f6106566081978f663cf08e54bb8908cb58a5316Michal Krol                                  unsigned num,
572f6106566081978f663cf08e54bb8908cb58a5316Michal Krol                                  struct pipe_sampler_view **_views)
573f2f7bd855af49752b1c77746542c62f1c529e953Michal Krol{
574f2f7bd855af49752b1c77746542c62f1c529e953Michal Krol   struct identity_context *id_pipe = identity_context(_pipe);
575f2f7bd855af49752b1c77746542c62f1c529e953Michal Krol   struct pipe_context *pipe = id_pipe->pipe;
576f6106566081978f663cf08e54bb8908cb58a5316Michal Krol   struct pipe_sampler_view *unwrapped_views[PIPE_MAX_VERTEX_SAMPLERS];
577f6106566081978f663cf08e54bb8908cb58a5316Michal Krol   struct pipe_sampler_view **views = NULL;
578f2f7bd855af49752b1c77746542c62f1c529e953Michal Krol   unsigned i;
579f2f7bd855af49752b1c77746542c62f1c529e953Michal Krol
580f6106566081978f663cf08e54bb8908cb58a5316Michal Krol   if (_views) {
581f6106566081978f663cf08e54bb8908cb58a5316Michal Krol      for (i = 0; i < num; i++)
582f6106566081978f663cf08e54bb8908cb58a5316Michal Krol         unwrapped_views[i] = identity_sampler_view_unwrap(_views[i]);
583f2f7bd855af49752b1c77746542c62f1c529e953Michal Krol      for (; i < PIPE_MAX_VERTEX_SAMPLERS; i++)
584f6106566081978f663cf08e54bb8908cb58a5316Michal Krol         unwrapped_views[i] = NULL;
585f2f7bd855af49752b1c77746542c62f1c529e953Michal Krol
586f6106566081978f663cf08e54bb8908cb58a5316Michal Krol      views = unwrapped_views;
587f2f7bd855af49752b1c77746542c62f1c529e953Michal Krol   }
588f2f7bd855af49752b1c77746542c62f1c529e953Michal Krol
589f6106566081978f663cf08e54bb8908cb58a5316Michal Krol   pipe->set_vertex_sampler_views(pipe, num, views);
590f2f7bd855af49752b1c77746542c62f1c529e953Michal Krol}
591f2f7bd855af49752b1c77746542c62f1c529e953Michal Krol
592f2f7bd855af49752b1c77746542c62f1c529e953Michal Krolstatic void
593d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_set_vertex_buffers(struct pipe_context *_pipe,
594d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                            unsigned num_buffers,
595d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                            const struct pipe_vertex_buffer *_buffers)
596d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
597d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
598d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
599d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_vertex_buffer unwrapped_buffers[PIPE_MAX_SHADER_INPUTS];
600d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_vertex_buffer *buffers = NULL;
601d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   unsigned i;
602d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
603d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   if (num_buffers) {
604d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz      memcpy(unwrapped_buffers, _buffers, num_buffers * sizeof(*_buffers));
605d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz      for (i = 0; i < num_buffers; i++)
606287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell         unwrapped_buffers[i].buffer = identity_resource_unwrap(_buffers[i].buffer);
607d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz      buffers = unwrapped_buffers;
608d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   }
609d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
610d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->set_vertex_buffers(pipe,
611d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                            num_buffers,
612d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                            buffers);
613d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
614d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
615fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheideggeridentity_resource_copy_region(struct pipe_context *_pipe,
616fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger                              struct pipe_resource *_dst,
617fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger                              struct pipe_subresource subdst,
618fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger                              unsigned dstx,
619fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger                              unsigned dsty,
620fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger                              unsigned dstz,
621fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger                              struct pipe_resource *_src,
622fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger                              struct pipe_subresource subsrc,
623fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger                              unsigned srcx,
624fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger                              unsigned srcy,
625fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger                              unsigned srcz,
626fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger                              unsigned width,
627fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger                              unsigned height)
628fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger{
629fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger   struct identity_context *id_pipe = identity_context(_pipe);
630fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger   struct identity_resource *id_resource_dst = identity_resource(_dst);
631fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger   struct identity_resource *id_resource_src = identity_resource(_src);
632fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger   struct pipe_context *pipe = id_pipe->pipe;
633fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger   struct pipe_resource *dst = id_resource_dst->resource;
634fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger   struct pipe_resource *src = id_resource_src->resource;
635fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger
636fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger   pipe->resource_copy_region(pipe,
637fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger                              dst,
638fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger                              subdst,
639fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger                              dstx,
640fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger                              dsty,
641fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger                              dstz,
642fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger                              src,
643fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger                              subsrc,
644fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger                              srcx,
645fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger                              srcy,
646fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger                              srcz,
647fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger                              width,
648fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger                              height);
649fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger}
650fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger
651fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheideggerstatic void
652d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_clear(struct pipe_context *_pipe,
653d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz               unsigned buffers,
654d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz               const float *rgba,
655d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz               double depth,
656d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz               unsigned stencil)
657d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
658d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
659d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
660d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
661d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->clear(pipe,
662d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz               buffers,
663d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz               rgba,
664d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz               depth,
665d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz               stencil);
666d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
667d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
668d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
66925296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheideggeridentity_clearRT(struct pipe_context *_pipe,
67025296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger                 struct pipe_surface *_dst,
67125296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger                 const float *rgba,
67225296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger                 unsigned dstx, unsigned dsty,
67325296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger                 unsigned width, unsigned height)
67425296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger{
67525296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger   struct identity_context *id_pipe = identity_context(_pipe);
67625296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger   struct identity_surface *id_surface_dst = identity_surface(_dst);
67725296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger   struct pipe_context *pipe = id_pipe->pipe;
67825296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger   struct pipe_surface *dst = id_surface_dst->surface;
67925296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger
68025296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger   pipe->clearRT(pipe,
68125296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger                 dst,
68225296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger                 rgba,
68325296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger                 dstx,
68425296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger                 dsty,
68525296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger                 width,
68625296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger                 height);
68725296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger}
68825296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheideggerstatic void
68925296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheideggeridentity_clearDS(struct pipe_context *_pipe,
69025296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger                        struct pipe_surface *_dst,
69125296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger                        unsigned clear_flags,
69225296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger                        double depth,
69325296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger                        unsigned stencil,
69425296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger                        unsigned dstx, unsigned dsty,
69525296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger                        unsigned width, unsigned height)
69625296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger{
69725296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger   struct identity_context *id_pipe = identity_context(_pipe);
69825296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger   struct identity_surface *id_surface_dst = identity_surface(_dst);
69925296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger   struct pipe_context *pipe = id_pipe->pipe;
70025296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger   struct pipe_surface *dst = id_surface_dst->surface;
70125296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger
70225296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger   pipe->clearDS(pipe,
70325296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger                 dst,
70425296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger                 clear_flags,
70525296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger                 depth,
70625296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger                 stencil,
70725296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger                 dstx,
70825296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger                 dsty,
70925296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger                 width,
71025296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger                 height);
71125296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger
71225296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger}
71325296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger
71425296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheideggerstatic void
715d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_flush(struct pipe_context *_pipe,
716d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz               unsigned flags,
717d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz               struct pipe_fence_handle **fence)
718d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
719d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
720d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
721d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
722d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->flush(pipe,
723d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz               flags,
724d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz               fence);
725d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
726d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
727d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic unsigned int
728287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwellidentity_is_resource_referenced(struct pipe_context *_pipe,
729eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                struct pipe_resource *_resource,
730eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                unsigned face,
731eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                unsigned level)
732d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
733d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
734287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   struct identity_resource *id_resource = identity_resource(_resource);
735d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
73659b160d286e5848851848e09c87eb64cd2631c6bJakob Bornecrantz   struct pipe_resource *resource = id_resource->resource;
737d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
738287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   return pipe->is_resource_referenced(pipe,
73959b160d286e5848851848e09c87eb64cd2631c6bJakob Bornecrantz                                       resource,
740eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                       face,
741eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                       level);
742d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
743d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
74414a146c4995da5074eb1192a818b7a3dfc3bb438Michal Krolstatic struct pipe_sampler_view *
745c2c1f60391113490f4f90efb2786544c599ac991Jakob Bornecrantzidentity_context_create_sampler_view(struct pipe_context *_pipe,
746c2c1f60391113490f4f90efb2786544c599ac991Jakob Bornecrantz                                     struct pipe_resource *_resource,
747c2c1f60391113490f4f90efb2786544c599ac991Jakob Bornecrantz                                     const struct pipe_sampler_view *templ)
74814a146c4995da5074eb1192a818b7a3dfc3bb438Michal Krol{
749c2c1f60391113490f4f90efb2786544c599ac991Jakob Bornecrantz   struct identity_context *id_context = identity_context(_pipe);
750c2c1f60391113490f4f90efb2786544c599ac991Jakob Bornecrantz   struct identity_resource *id_resource = identity_resource(_resource);
751c2c1f60391113490f4f90efb2786544c599ac991Jakob Bornecrantz   struct pipe_context *pipe = id_context->pipe;
752c2c1f60391113490f4f90efb2786544c599ac991Jakob Bornecrantz   struct pipe_resource *resource = id_resource->resource;
753c2c1f60391113490f4f90efb2786544c599ac991Jakob Bornecrantz   struct pipe_sampler_view *result;
75414a146c4995da5074eb1192a818b7a3dfc3bb438Michal Krol
755c2c1f60391113490f4f90efb2786544c599ac991Jakob Bornecrantz   result = pipe->create_sampler_view(pipe,
756c2c1f60391113490f4f90efb2786544c599ac991Jakob Bornecrantz                                      resource,
757c2c1f60391113490f4f90efb2786544c599ac991Jakob Bornecrantz                                      templ);
75814a146c4995da5074eb1192a818b7a3dfc3bb438Michal Krol
759c2c1f60391113490f4f90efb2786544c599ac991Jakob Bornecrantz   if (result)
760c2c1f60391113490f4f90efb2786544c599ac991Jakob Bornecrantz      return identity_sampler_view_create(id_context, id_resource, result);
761c2c1f60391113490f4f90efb2786544c599ac991Jakob Bornecrantz   return NULL;
76214a146c4995da5074eb1192a818b7a3dfc3bb438Michal Krol}
76314a146c4995da5074eb1192a818b7a3dfc3bb438Michal Krol
76414a146c4995da5074eb1192a818b7a3dfc3bb438Michal Krolstatic void
765c2c1f60391113490f4f90efb2786544c599ac991Jakob Bornecrantzidentity_context_sampler_view_destroy(struct pipe_context *_pipe,
766c2c1f60391113490f4f90efb2786544c599ac991Jakob Bornecrantz                                      struct pipe_sampler_view *_view)
76714a146c4995da5074eb1192a818b7a3dfc3bb438Michal Krol{
768c2c1f60391113490f4f90efb2786544c599ac991Jakob Bornecrantz   identity_sampler_view_destroy(identity_context(_pipe),
769c2c1f60391113490f4f90efb2786544c599ac991Jakob Bornecrantz                                 identity_sampler_view(_view));
77014a146c4995da5074eb1192a818b7a3dfc3bb438Michal Krol}
77114a146c4995da5074eb1192a818b7a3dfc3bb438Michal Krol
772b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwellstatic struct pipe_transfer *
773287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwellidentity_context_get_transfer(struct pipe_context *_context,
774eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                              struct pipe_resource *_resource,
775eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                              struct pipe_subresource sr,
776eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                              unsigned usage,
777eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                              const struct pipe_box *box)
778b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell{
779b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell   struct identity_context *id_context = identity_context(_context);
780287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   struct identity_resource *id_resource = identity_resource(_resource);
781b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell   struct pipe_context *context = id_context->pipe;
78259b160d286e5848851848e09c87eb64cd2631c6bJakob Bornecrantz   struct pipe_resource *resource = id_resource->resource;
783b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell   struct pipe_transfer *result;
784b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell
785287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   result = context->get_transfer(context,
78659b160d286e5848851848e09c87eb64cd2631c6bJakob Bornecrantz                                  resource,
787eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                  sr,
788eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                  usage,
789eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                  box);
790b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell
791b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell   if (result)
792287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell      return identity_transfer_create(id_context, id_resource, result);
793b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell   return NULL;
794b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell}
795b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell
796b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwellstatic void
797287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwellidentity_context_transfer_destroy(struct pipe_context *_pipe,
798eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                  struct pipe_transfer *_transfer)
799b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell{
800d35ecca5ee231c072687578642e0c22c6c0590b1Keith Whitwell   identity_transfer_destroy(identity_context(_pipe),
801d35ecca5ee231c072687578642e0c22c6c0590b1Keith Whitwell                             identity_transfer(_transfer));
802b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell}
803b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell
804b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwellstatic void *
805b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwellidentity_context_transfer_map(struct pipe_context *_context,
806eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                              struct pipe_transfer *_transfer)
807b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell{
808b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell   struct identity_context *id_context = identity_context(_context);
809b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell   struct identity_transfer *id_transfer = identity_transfer(_transfer);
810b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell   struct pipe_context *context = id_context->pipe;
811b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell   struct pipe_transfer *transfer = id_transfer->transfer;
812b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell
813b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell   return context->transfer_map(context,
814eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                transfer);
815b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell}
816b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell
817287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell
818287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell
819287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwellstatic void
820eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantzidentity_context_transfer_flush_region(struct pipe_context *_context,
821eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                       struct pipe_transfer *_transfer,
822eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                       const struct pipe_box *box)
823287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell{
824287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   struct identity_context *id_context = identity_context(_context);
825287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   struct identity_transfer *id_transfer = identity_transfer(_transfer);
826287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   struct pipe_context *context = id_context->pipe;
827287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   struct pipe_transfer *transfer = id_transfer->transfer;
828287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell
829287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   context->transfer_flush_region(context,
830eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                  transfer,
831eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                  box);
832287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell}
833287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell
834287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell
835b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwellstatic void
836b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwellidentity_context_transfer_unmap(struct pipe_context *_context,
837eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                struct pipe_transfer *_transfer)
838b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell{
839b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell   struct identity_context *id_context = identity_context(_context);
840b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell   struct identity_transfer *id_transfer = identity_transfer(_transfer);
841b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell   struct pipe_context *context = id_context->pipe;
842b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell   struct pipe_transfer *transfer = id_transfer->transfer;
843b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell
844b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell   context->transfer_unmap(context,
845eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                           transfer);
846b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell}
847b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell
848287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell
849287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwellstatic void
850eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantzidentity_context_transfer_inline_write(struct pipe_context *_context,
851eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                       struct pipe_resource *_resource,
852eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                       struct pipe_subresource sr,
853eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                       unsigned usage,
854eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                       const struct pipe_box *box,
855eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                       const void *data,
856eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                       unsigned stride,
857eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                       unsigned slice_stride)
858287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell{
859287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   struct identity_context *id_context = identity_context(_context);
860287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   struct identity_resource *id_resource = identity_resource(_resource);
861287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   struct pipe_context *context = id_context->pipe;
86259b160d286e5848851848e09c87eb64cd2631c6bJakob Bornecrantz   struct pipe_resource *resource = id_resource->resource;
863287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell
864287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   context->transfer_inline_write(context,
86559b160d286e5848851848e09c87eb64cd2631c6bJakob Bornecrantz                                  resource,
866eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                  sr,
867eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                  usage,
868eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                  box,
869eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                  data,
870eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                  stride,
871eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                  slice_stride);
872287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell}
873287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell
874287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell
875d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstruct pipe_context *
876d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_context_create(struct pipe_screen *_screen, struct pipe_context *pipe)
877d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
878d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe;
879d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   (void)identity_screen(_screen);
880d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
881d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe = CALLOC_STRUCT(identity_context);
882d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   if (!id_pipe) {
883d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz      return NULL;
884d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   }
885d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
886d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.winsys = NULL;
887d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.screen = _screen;
8887f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell   id_pipe->base.priv = pipe->priv; /* expose wrapped data */
889d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.draw = NULL;
890d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
891d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.destroy = identity_destroy;
892d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.draw_arrays = identity_draw_arrays;
893d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.draw_elements = identity_draw_elements;
894d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.draw_range_elements = identity_draw_range_elements;
895d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.create_query = identity_create_query;
896d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.destroy_query = identity_destroy_query;
897d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.begin_query = identity_begin_query;
898d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.end_query = identity_end_query;
899d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.get_query_result = identity_get_query_result;
900d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.create_blend_state = identity_create_blend_state;
901d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.bind_blend_state = identity_bind_blend_state;
902d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.delete_blend_state = identity_delete_blend_state;
903d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.create_sampler_state = identity_create_sampler_state;
904f2f7bd855af49752b1c77746542c62f1c529e953Michal Krol   id_pipe->base.bind_fragment_sampler_states = identity_bind_fragment_sampler_states;
905f2f7bd855af49752b1c77746542c62f1c529e953Michal Krol   id_pipe->base.bind_vertex_sampler_states = identity_bind_vertex_sampler_states;
906d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.delete_sampler_state = identity_delete_sampler_state;
907d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.create_rasterizer_state = identity_create_rasterizer_state;
908d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.bind_rasterizer_state = identity_bind_rasterizer_state;
909d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.delete_rasterizer_state = identity_delete_rasterizer_state;
910d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.create_depth_stencil_alpha_state = identity_create_depth_stencil_alpha_state;
911d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.bind_depth_stencil_alpha_state = identity_bind_depth_stencil_alpha_state;
912d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.delete_depth_stencil_alpha_state = identity_delete_depth_stencil_alpha_state;
913d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.create_fs_state = identity_create_fs_state;
914d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.bind_fs_state = identity_bind_fs_state;
915d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.delete_fs_state = identity_delete_fs_state;
916d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.create_vs_state = identity_create_vs_state;
917d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.bind_vs_state = identity_bind_vs_state;
918d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.delete_vs_state = identity_delete_vs_state;
919881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger   id_pipe->base.create_vertex_elements_state = identity_create_vertex_elements_state;
920881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger   id_pipe->base.bind_vertex_elements_state = identity_bind_vertex_elements_state;
921881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger   id_pipe->base.delete_vertex_elements_state = identity_delete_vertex_elements_state;
922d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.set_blend_color = identity_set_blend_color;
9234ea2f61e5ae556fa4141cd226ecbf1521e9f16ffRoland Scheidegger   id_pipe->base.set_stencil_ref = identity_set_stencil_ref;
924d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.set_clip_state = identity_set_clip_state;
92543234cee40c48e14a3eab4268181d9b0b2b7cf79Roland Scheidegger   id_pipe->base.set_sample_mask = identity_set_sample_mask;
926d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.set_constant_buffer = identity_set_constant_buffer;
927d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.set_framebuffer_state = identity_set_framebuffer_state;
928d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.set_polygon_stipple = identity_set_polygon_stipple;
929d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.set_scissor_state = identity_set_scissor_state;
930d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.set_viewport_state = identity_set_viewport_state;
931f6106566081978f663cf08e54bb8908cb58a5316Michal Krol   id_pipe->base.set_fragment_sampler_views = identity_set_fragment_sampler_views;
932f6106566081978f663cf08e54bb8908cb58a5316Michal Krol   id_pipe->base.set_vertex_sampler_views = identity_set_vertex_sampler_views;
933d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.set_vertex_buffers = identity_set_vertex_buffers;
934fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger   id_pipe->base.resource_copy_region = identity_resource_copy_region;
935d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.clear = identity_clear;
93625296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger   id_pipe->base.clearRT = identity_clearRT;
93725296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger   id_pipe->base.clearDS = identity_clearDS;
938d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.flush = identity_flush;
939287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   id_pipe->base.is_resource_referenced = identity_is_resource_referenced;
940c2c1f60391113490f4f90efb2786544c599ac991Jakob Bornecrantz   id_pipe->base.create_sampler_view = identity_context_create_sampler_view;
941c2c1f60391113490f4f90efb2786544c599ac991Jakob Bornecrantz   id_pipe->base.sampler_view_destroy = identity_context_sampler_view_destroy;
942287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   id_pipe->base.get_transfer = identity_context_get_transfer;
943287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   id_pipe->base.transfer_destroy = identity_context_transfer_destroy;
944b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell   id_pipe->base.transfer_map = identity_context_transfer_map;
945b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell   id_pipe->base.transfer_unmap = identity_context_transfer_unmap;
946287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   id_pipe->base.transfer_flush_region = identity_context_transfer_flush_region;
947287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   id_pipe->base.transfer_inline_write = identity_context_transfer_inline_write;
948d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
949d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->pipe = pipe;
950d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
951d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   return &id_pipe->base;
952d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
953