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
496d28bf917fb1d741d90fd3f05c22769376021fcaChia-I Wuidentity_draw_vbo(struct pipe_context *_pipe,
506d28bf917fb1d741d90fd3f05c22769376021fcaChia-I Wu                  const struct pipe_draw_info *info)
516d28bf917fb1d741d90fd3f05c22769376021fcaChia-I Wu{
526d28bf917fb1d741d90fd3f05c22769376021fcaChia-I Wu   struct identity_context *id_pipe = identity_context(_pipe);
536d28bf917fb1d741d90fd3f05c22769376021fcaChia-I Wu   struct pipe_context *pipe = id_pipe->pipe;
546d28bf917fb1d741d90fd3f05c22769376021fcaChia-I Wu
556d28bf917fb1d741d90fd3f05c22769376021fcaChia-I Wu   pipe->draw_vbo(pipe, info);
566d28bf917fb1d741d90fd3f05c22769376021fcaChia-I Wu}
576d28bf917fb1d741d90fd3f05c22769376021fcaChia-I Wu
58d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic struct pipe_query *
59d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_create_query(struct pipe_context *_pipe,
60d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                      unsigned query_type)
61d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
62d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
63d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
64d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
65d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   return pipe->create_query(pipe,
66d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                             query_type);
67d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
68d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
69d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
70d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_destroy_query(struct pipe_context *_pipe,
71d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                       struct pipe_query *query)
72d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
73d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
74d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
75d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
76d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->destroy_query(pipe,
77d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                       query);
78d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
79d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
80d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
81d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_begin_query(struct pipe_context *_pipe,
82d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                     struct pipe_query *query)
83d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
84d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
85d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
86d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
87d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->begin_query(pipe,
88d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                     query);
89d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
90d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
91d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
92d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_end_query(struct pipe_context *_pipe,
93d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                   struct pipe_query *query)
94d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
95d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
96d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
97d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
98d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->end_query(pipe,
99d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                   query);
100d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
101d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
102d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic boolean
103d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_get_query_result(struct pipe_context *_pipe,
104d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                          struct pipe_query *query,
105d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                          boolean wait,
1064445e170bee23a3607ece0e010adef7058ac6a11Marek Olšák                          union pipe_query_result *result)
107d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
108d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
109d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
110d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
111d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   return pipe->get_query_result(pipe,
112d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                                 query,
113d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                                 wait,
114d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                                 result);
115d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
116d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
117d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void *
118d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_create_blend_state(struct pipe_context *_pipe,
119d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                            const struct pipe_blend_state *blend)
120d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
121d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
122d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
123d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
124d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   return pipe->create_blend_state(pipe,
125d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                                   blend);
126d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
127d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
128d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
129d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_bind_blend_state(struct pipe_context *_pipe,
130d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                          void *blend)
131d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
132d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
133d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
134d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
135d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->bind_blend_state(pipe,
136d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                              blend);
137d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
138d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
139d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
140d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_delete_blend_state(struct pipe_context *_pipe,
141d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                            void *blend)
142d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
143d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
144d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
145d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
146d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->delete_blend_state(pipe,
147d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                            blend);
148d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
149d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
150d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void *
151d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_create_sampler_state(struct pipe_context *_pipe,
152d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                              const struct pipe_sampler_state *sampler)
153d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
154d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
155d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
156d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
157d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   return pipe->create_sampler_state(pipe,
158d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                                     sampler);
159d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
160d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
161d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
1620ad95b923a2bfd91677872765946b6a2f8d11260Brian Paulidentity_bind_sampler_states(struct pipe_context *_pipe,
1630ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul                             unsigned shader,
164d4ab8bd0955f1b114acee80f17a2e82c7129cc1aBrian Paul                             unsigned start,
1650ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul                             unsigned num_samplers,
1660ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul                             void **samplers)
1670ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul{
1680ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul   struct identity_context *id_pipe = identity_context(_pipe);
1690ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul   struct pipe_context *pipe = id_pipe->pipe;
1700ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul
171d4ab8bd0955f1b114acee80f17a2e82c7129cc1aBrian Paul   /* remove this when we have pipe->bind_sampler_states(..., start, ...) */
172d4ab8bd0955f1b114acee80f17a2e82c7129cc1aBrian Paul   assert(start == 0);
173d4ab8bd0955f1b114acee80f17a2e82c7129cc1aBrian Paul
1740ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul   switch (shader) {
1750ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul   case PIPE_SHADER_VERTEX:
1760ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul      pipe->bind_vertex_sampler_states(pipe, num_samplers, samplers);
1770ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul      break;
1780ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul   case PIPE_SHADER_GEOMETRY:
1790ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul      pipe->bind_geometry_sampler_states(pipe, num_samplers, samplers);
1800ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul      break;
1810ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul   case PIPE_SHADER_FRAGMENT:
1820ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul      pipe->bind_fragment_sampler_states(pipe, num_samplers, samplers);
1830ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul      break;
1840ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul   default:
1850ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul      debug_error("Unexpected shader in identity_bind_sampler_states()");
1860ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul   }
1870ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul}
1880ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul
1890ad95b923a2bfd91677872765946b6a2f8d11260Brian Paulstatic void
190f2f7bd855af49752b1c77746542c62f1c529e953Michal Krolidentity_bind_fragment_sampler_states(struct pipe_context *_pipe,
191f2f7bd855af49752b1c77746542c62f1c529e953Michal Krol                                      unsigned num_samplers,
192f2f7bd855af49752b1c77746542c62f1c529e953Michal Krol                                      void **samplers)
193d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
1940ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul   identity_bind_sampler_states(_pipe, PIPE_SHADER_FRAGMENT,
195d4ab8bd0955f1b114acee80f17a2e82c7129cc1aBrian Paul                                0, num_samplers, samplers);
196d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
197d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
198d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
199f2f7bd855af49752b1c77746542c62f1c529e953Michal Krolidentity_bind_vertex_sampler_states(struct pipe_context *_pipe,
200f2f7bd855af49752b1c77746542c62f1c529e953Michal Krol                                    unsigned num_samplers,
201f2f7bd855af49752b1c77746542c62f1c529e953Michal Krol                                    void **samplers)
202f2f7bd855af49752b1c77746542c62f1c529e953Michal Krol{
2030ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul   identity_bind_sampler_states(_pipe, PIPE_SHADER_VERTEX,
204d4ab8bd0955f1b114acee80f17a2e82c7129cc1aBrian Paul                                0, num_samplers, samplers);
205f2f7bd855af49752b1c77746542c62f1c529e953Michal Krol}
206f2f7bd855af49752b1c77746542c62f1c529e953Michal Krol
207f2f7bd855af49752b1c77746542c62f1c529e953Michal Krolstatic void
208d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_delete_sampler_state(struct pipe_context *_pipe,
209d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                              void *sampler)
210d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
211d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
212d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
213d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
214d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->delete_sampler_state(pipe,
215d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                              sampler);
216d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
217d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
218d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void *
219d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_create_rasterizer_state(struct pipe_context *_pipe,
220d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                                 const struct pipe_rasterizer_state *rasterizer)
221d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
222d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
223d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
224d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
225d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   return pipe->create_rasterizer_state(pipe,
226d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                                        rasterizer);
227d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
228d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
229d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
230d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_bind_rasterizer_state(struct pipe_context *_pipe,
231d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                               void *rasterizer)
232d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
233d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
234d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
235d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
236d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->bind_rasterizer_state(pipe,
237d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                               rasterizer);
238d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
239d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
240d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
241d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_delete_rasterizer_state(struct pipe_context *_pipe,
242d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                                 void *rasterizer)
243d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
244d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
245d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
246d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
247d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->delete_rasterizer_state(pipe,
248d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                                 rasterizer);
249d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
250d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
251d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void *
252d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_create_depth_stencil_alpha_state(struct pipe_context *_pipe,
253d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                                          const struct pipe_depth_stencil_alpha_state *depth_stencil_alpha)
254d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
255d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
256d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
257d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
258d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   return pipe->create_depth_stencil_alpha_state(pipe,
259d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                                                 depth_stencil_alpha);
260d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
261d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
262d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
263d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_bind_depth_stencil_alpha_state(struct pipe_context *_pipe,
264d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                                        void *depth_stencil_alpha)
265d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
266d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
267d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
268d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
269d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->bind_depth_stencil_alpha_state(pipe,
270d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                                        depth_stencil_alpha);
271d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
272d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
273d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
274d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_delete_depth_stencil_alpha_state(struct pipe_context *_pipe,
275d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                                          void *depth_stencil_alpha)
276d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
277d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
278d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
279d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
280d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->delete_depth_stencil_alpha_state(pipe,
281d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                                          depth_stencil_alpha);
282d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
283d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
284d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void *
285d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_create_fs_state(struct pipe_context *_pipe,
286d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                         const struct pipe_shader_state *fs)
287d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
288d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
289d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
290d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
291d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   return pipe->create_fs_state(pipe,
292d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                                fs);
293d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
294d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
295d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
296d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_bind_fs_state(struct pipe_context *_pipe,
297d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                       void *fs)
298d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
299d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
300d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
301d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
302d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->bind_fs_state(pipe,
303d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                       fs);
304d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
305d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
306d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
307d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_delete_fs_state(struct pipe_context *_pipe,
308d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                         void *fs)
309d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
310d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
311d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
312d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
313d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->delete_fs_state(pipe,
314d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                         fs);
315d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
316d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
317d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void *
318d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_create_vs_state(struct pipe_context *_pipe,
319d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                         const struct pipe_shader_state *vs)
320d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
321d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
322d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
323d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
324d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   return pipe->create_vs_state(pipe,
325d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                                vs);
326d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
327d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
328d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
329d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_bind_vs_state(struct pipe_context *_pipe,
330d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                       void *vs)
331d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
332d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
333d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
334d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
335d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->bind_vs_state(pipe,
336d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                       vs);
337d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
338d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
339d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
340d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_delete_vs_state(struct pipe_context *_pipe,
341d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                         void *vs)
342d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
343d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
344d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
345d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
346d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->delete_vs_state(pipe,
347d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                         vs);
348d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
349d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
350881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger
3514d02534628e5fd4cd1231c5d742928b34067f25cRoland Scheideggerstatic void *
352881be308360ec8019f17bc970bece23e9395134fRoland Scheideggeridentity_create_vertex_elements_state(struct pipe_context *_pipe,
353881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger                                      unsigned num_elements,
354881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger                                      const struct pipe_vertex_element *vertex_elements)
355881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger{
356881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger   struct identity_context *id_pipe = identity_context(_pipe);
357881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger   struct pipe_context *pipe = id_pipe->pipe;
358881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger
3594d02534628e5fd4cd1231c5d742928b34067f25cRoland Scheidegger   return pipe->create_vertex_elements_state(pipe,
3604d02534628e5fd4cd1231c5d742928b34067f25cRoland Scheidegger                                             num_elements,
3614d02534628e5fd4cd1231c5d742928b34067f25cRoland Scheidegger                                             vertex_elements);
362881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger}
363881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger
364881be308360ec8019f17bc970bece23e9395134fRoland Scheideggerstatic void
365881be308360ec8019f17bc970bece23e9395134fRoland Scheideggeridentity_bind_vertex_elements_state(struct pipe_context *_pipe,
366881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger                                    void *velems)
367881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger{
368881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger   struct identity_context *id_pipe = identity_context(_pipe);
369881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger   struct pipe_context *pipe = id_pipe->pipe;
370881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger
371881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger   pipe->bind_vertex_elements_state(pipe,
372881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger                                    velems);
373881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger}
374881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger
375881be308360ec8019f17bc970bece23e9395134fRoland Scheideggerstatic void
376881be308360ec8019f17bc970bece23e9395134fRoland Scheideggeridentity_delete_vertex_elements_state(struct pipe_context *_pipe,
377881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger                                      void *velems)
378881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger{
379881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger   struct identity_context *id_pipe = identity_context(_pipe);
380881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger   struct pipe_context *pipe = id_pipe->pipe;
381881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger
382881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger   pipe->delete_vertex_elements_state(pipe,
383881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger                                      velems);
384881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger}
385881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger
386d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
387d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_set_blend_color(struct pipe_context *_pipe,
388d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                         const struct pipe_blend_color *blend_color)
389d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
390d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
391d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
392d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
393d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->set_blend_color(pipe,
394d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                         blend_color);
395d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
396d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
397d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
3984ea2f61e5ae556fa4141cd226ecbf1521e9f16ffRoland Scheideggeridentity_set_stencil_ref(struct pipe_context *_pipe,
3994ea2f61e5ae556fa4141cd226ecbf1521e9f16ffRoland Scheidegger                         const struct pipe_stencil_ref *stencil_ref)
4004ea2f61e5ae556fa4141cd226ecbf1521e9f16ffRoland Scheidegger{
4014ea2f61e5ae556fa4141cd226ecbf1521e9f16ffRoland Scheidegger   struct identity_context *id_pipe = identity_context(_pipe);
4024ea2f61e5ae556fa4141cd226ecbf1521e9f16ffRoland Scheidegger   struct pipe_context *pipe = id_pipe->pipe;
4034ea2f61e5ae556fa4141cd226ecbf1521e9f16ffRoland Scheidegger
4044ea2f61e5ae556fa4141cd226ecbf1521e9f16ffRoland Scheidegger   pipe->set_stencil_ref(pipe,
4054ea2f61e5ae556fa4141cd226ecbf1521e9f16ffRoland Scheidegger                         stencil_ref);
4064ea2f61e5ae556fa4141cd226ecbf1521e9f16ffRoland Scheidegger}
4074ea2f61e5ae556fa4141cd226ecbf1521e9f16ffRoland Scheidegger
4084ea2f61e5ae556fa4141cd226ecbf1521e9f16ffRoland Scheideggerstatic void
409d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_set_clip_state(struct pipe_context *_pipe,
410d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                        const struct pipe_clip_state *clip)
411d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
412d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
413d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
414d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
415d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->set_clip_state(pipe,
416d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                        clip);
417d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
418d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
419d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
42043234cee40c48e14a3eab4268181d9b0b2b7cf79Roland Scheideggeridentity_set_sample_mask(struct pipe_context *_pipe,
42143234cee40c48e14a3eab4268181d9b0b2b7cf79Roland Scheidegger                         unsigned sample_mask)
42243234cee40c48e14a3eab4268181d9b0b2b7cf79Roland Scheidegger{
42343234cee40c48e14a3eab4268181d9b0b2b7cf79Roland Scheidegger   struct identity_context *id_pipe = identity_context(_pipe);
42443234cee40c48e14a3eab4268181d9b0b2b7cf79Roland Scheidegger   struct pipe_context *pipe = id_pipe->pipe;
42543234cee40c48e14a3eab4268181d9b0b2b7cf79Roland Scheidegger
42643234cee40c48e14a3eab4268181d9b0b2b7cf79Roland Scheidegger   pipe->set_sample_mask(pipe,
42743234cee40c48e14a3eab4268181d9b0b2b7cf79Roland Scheidegger                         sample_mask);
42843234cee40c48e14a3eab4268181d9b0b2b7cf79Roland Scheidegger}
42943234cee40c48e14a3eab4268181d9b0b2b7cf79Roland Scheidegger
43043234cee40c48e14a3eab4268181d9b0b2b7cf79Roland Scheideggerstatic void
431d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_set_constant_buffer(struct pipe_context *_pipe,
432d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                             uint shader,
433d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                             uint index,
434507337864fa80caf9f26602324d2c28dd0a75d61Marek Olšák                             struct pipe_constant_buffer *_cb)
435d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
436d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
437d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
438507337864fa80caf9f26602324d2c28dd0a75d61Marek Olšák   struct pipe_constant_buffer cb;
439d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
4401278507e3bf2e83c7027820a0d313de267a440ffRoland Scheidegger   /* XXX hmm? unwrap the input state */
441507337864fa80caf9f26602324d2c28dd0a75d61Marek Olšák   if (_cb) {
442507337864fa80caf9f26602324d2c28dd0a75d61Marek Olšák      cb = *_cb;
443507337864fa80caf9f26602324d2c28dd0a75d61Marek Olšák      cb.buffer = identity_resource_unwrap(_cb->buffer);
444d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   }
445d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
446d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->set_constant_buffer(pipe,
447d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                             shader,
448d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                             index,
449507337864fa80caf9f26602324d2c28dd0a75d61Marek Olšák                             _cb ? &cb : NULL);
450d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
451d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
452d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
453d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_set_framebuffer_state(struct pipe_context *_pipe,
454d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                               const struct pipe_framebuffer_state *_state)
455d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
456d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
457d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
458d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_framebuffer_state unwrapped_state;
459d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_framebuffer_state *state = NULL;
460d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   unsigned i;
461d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
462d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   /* unwrap the input state */
463d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   if (_state) {
464d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz      memcpy(&unwrapped_state, _state, sizeof(unwrapped_state));
465d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz      for(i = 0; i < _state->nr_cbufs; i++)
466d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz         unwrapped_state.cbufs[i] = identity_surface_unwrap(_state->cbufs[i]);
467d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz      for (; i < PIPE_MAX_COLOR_BUFS; i++)
468d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz         unwrapped_state.cbufs[i] = NULL;
469d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz      unwrapped_state.zsbuf = identity_surface_unwrap(_state->zsbuf);
470d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz      state = &unwrapped_state;
471d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   }
472d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
473d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->set_framebuffer_state(pipe,
474d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                               state);
475d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
476d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
477d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
478d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_set_polygon_stipple(struct pipe_context *_pipe,
479d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                             const struct pipe_poly_stipple *poly_stipple)
480d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
481d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
482d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
483d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
484d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->set_polygon_stipple(pipe,
485d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                             poly_stipple);
486d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
487d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
488d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
489d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_set_scissor_state(struct pipe_context *_pipe,
490d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                           const struct pipe_scissor_state *scissor)
491d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
492d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
493d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
494d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
495d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->set_scissor_state(pipe,
496d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                           scissor);
497d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
498d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
499d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
500d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_set_viewport_state(struct pipe_context *_pipe,
501d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                            const struct pipe_viewport_state *viewport)
502d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
503d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
504d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
505d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
506d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->set_viewport_state(pipe,
507d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                            viewport);
508d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
509d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
510d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
5110ad95b923a2bfd91677872765946b6a2f8d11260Brian Paulidentity_set_sampler_views(struct pipe_context *_pipe,
5120ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul                           unsigned shader,
513d4ab8bd0955f1b114acee80f17a2e82c7129cc1aBrian Paul                           unsigned start,
5140ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul                           unsigned num,
5150ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul                           struct pipe_sampler_view **_views)
516d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
517d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
518d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
519f6106566081978f663cf08e54bb8908cb58a5316Michal Krol   struct pipe_sampler_view *unwrapped_views[PIPE_MAX_SAMPLERS];
520f6106566081978f663cf08e54bb8908cb58a5316Michal Krol   struct pipe_sampler_view **views = NULL;
521d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   unsigned i;
522d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
523d4ab8bd0955f1b114acee80f17a2e82c7129cc1aBrian Paul   /* remove this when we have pipe->set_sampler_views(..., start, ...) */
524d4ab8bd0955f1b114acee80f17a2e82c7129cc1aBrian Paul   assert(start == 0);
525d4ab8bd0955f1b114acee80f17a2e82c7129cc1aBrian Paul
526f6106566081978f663cf08e54bb8908cb58a5316Michal Krol   if (_views) {
527f6106566081978f663cf08e54bb8908cb58a5316Michal Krol      for (i = 0; i < num; i++)
528f6106566081978f663cf08e54bb8908cb58a5316Michal Krol         unwrapped_views[i] = identity_sampler_view_unwrap(_views[i]);
529d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz      for (; i < PIPE_MAX_SAMPLERS; i++)
530f6106566081978f663cf08e54bb8908cb58a5316Michal Krol         unwrapped_views[i] = NULL;
531d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
532f6106566081978f663cf08e54bb8908cb58a5316Michal Krol      views = unwrapped_views;
533d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   }
534d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
5350ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul   switch (shader) {
5360ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul   case PIPE_SHADER_VERTEX:
5370ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul      pipe->set_vertex_sampler_views(pipe, num, views);
5380ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul      break;
5390ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul   case PIPE_SHADER_GEOMETRY:
5400ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul      pipe->set_geometry_sampler_views(pipe, num, views);
5410ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul      break;
5420ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul   case PIPE_SHADER_FRAGMENT:
5430ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul      pipe->set_fragment_sampler_views(pipe, num, views);
5440ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul      break;
5450ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul   default:
5460ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul      debug_error("Unexpected shader in identity_set_sampler_views()");
5470ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul   }
5480ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul}
5490ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul
5500ad95b923a2bfd91677872765946b6a2f8d11260Brian Paulstatic void
5510ad95b923a2bfd91677872765946b6a2f8d11260Brian Paulidentity_set_fragment_sampler_views(struct pipe_context *_pipe,
5520ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul                                    unsigned num,
5530ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul                                    struct pipe_sampler_view **_views)
5540ad95b923a2bfd91677872765946b6a2f8d11260Brian Paul{
555d4ab8bd0955f1b114acee80f17a2e82c7129cc1aBrian Paul   identity_set_sampler_views(_pipe, PIPE_SHADER_FRAGMENT, 0, num, _views);
556d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
557d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
558d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
559f6106566081978f663cf08e54bb8908cb58a5316Michal Krolidentity_set_vertex_sampler_views(struct pipe_context *_pipe,
560f6106566081978f663cf08e54bb8908cb58a5316Michal Krol                                  unsigned num,
561f6106566081978f663cf08e54bb8908cb58a5316Michal Krol                                  struct pipe_sampler_view **_views)
562f2f7bd855af49752b1c77746542c62f1c529e953Michal Krol{
563d4ab8bd0955f1b114acee80f17a2e82c7129cc1aBrian Paul   identity_set_sampler_views(_pipe, PIPE_SHADER_VERTEX, 0, num, _views);
564f2f7bd855af49752b1c77746542c62f1c529e953Michal Krol}
565f2f7bd855af49752b1c77746542c62f1c529e953Michal Krol
566f2f7bd855af49752b1c77746542c62f1c529e953Michal Krolstatic void
567d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_set_vertex_buffers(struct pipe_context *_pipe,
568d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                            unsigned num_buffers,
569d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                            const struct pipe_vertex_buffer *_buffers)
570d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
571d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
572d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
573d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_vertex_buffer unwrapped_buffers[PIPE_MAX_SHADER_INPUTS];
574d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_vertex_buffer *buffers = NULL;
575d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   unsigned i;
576d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
577d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   if (num_buffers) {
578d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz      memcpy(unwrapped_buffers, _buffers, num_buffers * sizeof(*_buffers));
579d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz      for (i = 0; i < num_buffers; i++)
580287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell         unwrapped_buffers[i].buffer = identity_resource_unwrap(_buffers[i].buffer);
581d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz      buffers = unwrapped_buffers;
582d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   }
583d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
584d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->set_vertex_buffers(pipe,
585d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                            num_buffers,
586d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz                            buffers);
587d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
5886d28bf917fb1d741d90fd3f05c22769376021fcaChia-I Wu
5896d28bf917fb1d741d90fd3f05c22769376021fcaChia-I Wustatic void
5906d28bf917fb1d741d90fd3f05c22769376021fcaChia-I Wuidentity_set_index_buffer(struct pipe_context *_pipe,
5916d28bf917fb1d741d90fd3f05c22769376021fcaChia-I Wu                          const struct pipe_index_buffer *_ib)
5926d28bf917fb1d741d90fd3f05c22769376021fcaChia-I Wu{
5936d28bf917fb1d741d90fd3f05c22769376021fcaChia-I Wu   struct identity_context *id_pipe = identity_context(_pipe);
5946d28bf917fb1d741d90fd3f05c22769376021fcaChia-I Wu   struct pipe_context *pipe = id_pipe->pipe;
5956d28bf917fb1d741d90fd3f05c22769376021fcaChia-I Wu   struct pipe_index_buffer unwrapped_ib, *ib = NULL;
5966d28bf917fb1d741d90fd3f05c22769376021fcaChia-I Wu
5976d28bf917fb1d741d90fd3f05c22769376021fcaChia-I Wu   if (_ib) {
5986d28bf917fb1d741d90fd3f05c22769376021fcaChia-I Wu      unwrapped_ib = *_ib;
5996d28bf917fb1d741d90fd3f05c22769376021fcaChia-I Wu      unwrapped_ib.buffer = identity_resource_unwrap(_ib->buffer);
6006d28bf917fb1d741d90fd3f05c22769376021fcaChia-I Wu      ib = &unwrapped_ib;
6016d28bf917fb1d741d90fd3f05c22769376021fcaChia-I Wu   }
6026d28bf917fb1d741d90fd3f05c22769376021fcaChia-I Wu
6036d28bf917fb1d741d90fd3f05c22769376021fcaChia-I Wu   pipe->set_index_buffer(pipe, ib);
6046d28bf917fb1d741d90fd3f05c22769376021fcaChia-I Wu}
6056d28bf917fb1d741d90fd3f05c22769376021fcaChia-I Wu
606d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
607fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheideggeridentity_resource_copy_region(struct pipe_context *_pipe,
608fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger                              struct pipe_resource *_dst,
6094c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger                              unsigned dst_level,
610fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger                              unsigned dstx,
611fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger                              unsigned dsty,
612fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger                              unsigned dstz,
613fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger                              struct pipe_resource *_src,
6144c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger                              unsigned src_level,
6154c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger                              const struct pipe_box *src_box)
616fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger{
617fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger   struct identity_context *id_pipe = identity_context(_pipe);
618fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger   struct identity_resource *id_resource_dst = identity_resource(_dst);
619fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger   struct identity_resource *id_resource_src = identity_resource(_src);
620fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger   struct pipe_context *pipe = id_pipe->pipe;
621fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger   struct pipe_resource *dst = id_resource_dst->resource;
622fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger   struct pipe_resource *src = id_resource_src->resource;
623fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger
624fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger   pipe->resource_copy_region(pipe,
625fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger                              dst,
6264c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger                              dst_level,
627fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger                              dstx,
628fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger                              dsty,
629fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger                              dstz,
630fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger                              src,
6314c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger                              src_level,
6324c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger                              src_box);
633fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger}
634fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger
635fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheideggerstatic void
636d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_clear(struct pipe_context *_pipe,
637d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz               unsigned buffers,
6386dd284f7c8fac22f64c13fdf9909094f5ec59086Dave Airlie               const union pipe_color_union *color,
639d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz               double depth,
640d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz               unsigned stencil)
641d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
642d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
643d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
644d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
645d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->clear(pipe,
646d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz               buffers,
6476dd284f7c8fac22f64c13fdf9909094f5ec59086Dave Airlie               color,
648d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz               depth,
649d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz               stencil);
650d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
651d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
652d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstatic void
653a6e5c6c000df8655de3b41d5809547bb41c88c23Roland Scheideggeridentity_clear_render_target(struct pipe_context *_pipe,
654a6e5c6c000df8655de3b41d5809547bb41c88c23Roland Scheidegger                             struct pipe_surface *_dst,
6556dd284f7c8fac22f64c13fdf9909094f5ec59086Dave Airlie                             const union pipe_color_union *color,
656a6e5c6c000df8655de3b41d5809547bb41c88c23Roland Scheidegger                             unsigned dstx, unsigned dsty,
657a6e5c6c000df8655de3b41d5809547bb41c88c23Roland Scheidegger                             unsigned width, unsigned height)
65825296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger{
65925296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger   struct identity_context *id_pipe = identity_context(_pipe);
66025296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger   struct identity_surface *id_surface_dst = identity_surface(_dst);
66125296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger   struct pipe_context *pipe = id_pipe->pipe;
66225296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger   struct pipe_surface *dst = id_surface_dst->surface;
66325296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger
664a6e5c6c000df8655de3b41d5809547bb41c88c23Roland Scheidegger   pipe->clear_render_target(pipe,
665a6e5c6c000df8655de3b41d5809547bb41c88c23Roland Scheidegger                             dst,
6666dd284f7c8fac22f64c13fdf9909094f5ec59086Dave Airlie                             color,
667a6e5c6c000df8655de3b41d5809547bb41c88c23Roland Scheidegger                             dstx,
668a6e5c6c000df8655de3b41d5809547bb41c88c23Roland Scheidegger                             dsty,
669a6e5c6c000df8655de3b41d5809547bb41c88c23Roland Scheidegger                             width,
670a6e5c6c000df8655de3b41d5809547bb41c88c23Roland Scheidegger                             height);
67125296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger}
67225296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheideggerstatic void
673a6e5c6c000df8655de3b41d5809547bb41c88c23Roland Scheideggeridentity_clear_depth_stencil(struct pipe_context *_pipe,
674a6e5c6c000df8655de3b41d5809547bb41c88c23Roland Scheidegger                             struct pipe_surface *_dst,
675a6e5c6c000df8655de3b41d5809547bb41c88c23Roland Scheidegger                             unsigned clear_flags,
676a6e5c6c000df8655de3b41d5809547bb41c88c23Roland Scheidegger                             double depth,
677a6e5c6c000df8655de3b41d5809547bb41c88c23Roland Scheidegger                             unsigned stencil,
678a6e5c6c000df8655de3b41d5809547bb41c88c23Roland Scheidegger                             unsigned dstx, unsigned dsty,
679a6e5c6c000df8655de3b41d5809547bb41c88c23Roland Scheidegger                             unsigned width, unsigned height)
68025296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger{
68125296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger   struct identity_context *id_pipe = identity_context(_pipe);
68225296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger   struct identity_surface *id_surface_dst = identity_surface(_dst);
68325296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger   struct pipe_context *pipe = id_pipe->pipe;
68425296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger   struct pipe_surface *dst = id_surface_dst->surface;
68525296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger
686a6e5c6c000df8655de3b41d5809547bb41c88c23Roland Scheidegger   pipe->clear_depth_stencil(pipe,
687a6e5c6c000df8655de3b41d5809547bb41c88c23Roland Scheidegger                             dst,
688a6e5c6c000df8655de3b41d5809547bb41c88c23Roland Scheidegger                             clear_flags,
689a6e5c6c000df8655de3b41d5809547bb41c88c23Roland Scheidegger                             depth,
690a6e5c6c000df8655de3b41d5809547bb41c88c23Roland Scheidegger                             stencil,
691a6e5c6c000df8655de3b41d5809547bb41c88c23Roland Scheidegger                             dstx,
692a6e5c6c000df8655de3b41d5809547bb41c88c23Roland Scheidegger                             dsty,
693a6e5c6c000df8655de3b41d5809547bb41c88c23Roland Scheidegger                             width,
694a6e5c6c000df8655de3b41d5809547bb41c88c23Roland Scheidegger                             height);
69525296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger
69625296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger}
69725296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheidegger
69825296a3ed380f2a2179a9f435645a7ccaf10c04cRoland Scheideggerstatic void
699d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_flush(struct pipe_context *_pipe,
700d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz               struct pipe_fence_handle **fence)
701d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
702d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe = identity_context(_pipe);
703d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct pipe_context *pipe = id_pipe->pipe;
704d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
705d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   pipe->flush(pipe,
706d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz               fence);
707d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
708d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
70914a146c4995da5074eb1192a818b7a3dfc3bb438Michal Krolstatic struct pipe_sampler_view *
710c2c1f60391113490f4f90efb2786544c599ac991Jakob Bornecrantzidentity_context_create_sampler_view(struct pipe_context *_pipe,
711c2c1f60391113490f4f90efb2786544c599ac991Jakob Bornecrantz                                     struct pipe_resource *_resource,
712c2c1f60391113490f4f90efb2786544c599ac991Jakob Bornecrantz                                     const struct pipe_sampler_view *templ)
71314a146c4995da5074eb1192a818b7a3dfc3bb438Michal Krol{
714c2c1f60391113490f4f90efb2786544c599ac991Jakob Bornecrantz   struct identity_context *id_context = identity_context(_pipe);
715c2c1f60391113490f4f90efb2786544c599ac991Jakob Bornecrantz   struct identity_resource *id_resource = identity_resource(_resource);
716c2c1f60391113490f4f90efb2786544c599ac991Jakob Bornecrantz   struct pipe_context *pipe = id_context->pipe;
717c2c1f60391113490f4f90efb2786544c599ac991Jakob Bornecrantz   struct pipe_resource *resource = id_resource->resource;
718c2c1f60391113490f4f90efb2786544c599ac991Jakob Bornecrantz   struct pipe_sampler_view *result;
71914a146c4995da5074eb1192a818b7a3dfc3bb438Michal Krol
720c2c1f60391113490f4f90efb2786544c599ac991Jakob Bornecrantz   result = pipe->create_sampler_view(pipe,
721c2c1f60391113490f4f90efb2786544c599ac991Jakob Bornecrantz                                      resource,
722c2c1f60391113490f4f90efb2786544c599ac991Jakob Bornecrantz                                      templ);
72314a146c4995da5074eb1192a818b7a3dfc3bb438Michal Krol
724c2c1f60391113490f4f90efb2786544c599ac991Jakob Bornecrantz   if (result)
725c2c1f60391113490f4f90efb2786544c599ac991Jakob Bornecrantz      return identity_sampler_view_create(id_context, id_resource, result);
726c2c1f60391113490f4f90efb2786544c599ac991Jakob Bornecrantz   return NULL;
72714a146c4995da5074eb1192a818b7a3dfc3bb438Michal Krol}
72814a146c4995da5074eb1192a818b7a3dfc3bb438Michal Krol
72914a146c4995da5074eb1192a818b7a3dfc3bb438Michal Krolstatic void
730c2c1f60391113490f4f90efb2786544c599ac991Jakob Bornecrantzidentity_context_sampler_view_destroy(struct pipe_context *_pipe,
731c2c1f60391113490f4f90efb2786544c599ac991Jakob Bornecrantz                                      struct pipe_sampler_view *_view)
73214a146c4995da5074eb1192a818b7a3dfc3bb438Michal Krol{
733c2c1f60391113490f4f90efb2786544c599ac991Jakob Bornecrantz   identity_sampler_view_destroy(identity_context(_pipe),
734c2c1f60391113490f4f90efb2786544c599ac991Jakob Bornecrantz                                 identity_sampler_view(_view));
73514a146c4995da5074eb1192a818b7a3dfc3bb438Michal Krol}
73614a146c4995da5074eb1192a818b7a3dfc3bb438Michal Krol
7374c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheideggerstatic struct pipe_surface *
7384c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheideggeridentity_context_create_surface(struct pipe_context *_pipe,
7394c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger                                struct pipe_resource *_resource,
7404c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger                                const struct pipe_surface *templ)
7414c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger{
7424c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger   struct identity_context *id_context = identity_context(_pipe);
7434c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger   struct identity_resource *id_resource = identity_resource(_resource);
7444c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger   struct pipe_context *pipe = id_context->pipe;
7454c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger   struct pipe_resource *resource = id_resource->resource;
7464c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger   struct pipe_surface *result;
7474c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger
7484c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger   result = pipe->create_surface(pipe,
7494c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger                                 resource,
7504c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger                                 templ);
7514c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger
7524c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger   if (result)
7534c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger      return identity_surface_create(id_context, id_resource, result);
7544c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger   return NULL;
7554c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger}
7564c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger
7574c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheideggerstatic void
7584c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheideggeridentity_context_surface_destroy(struct pipe_context *_pipe,
7594c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger                                 struct pipe_surface *_surf)
7604c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger{
7614c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger   identity_surface_destroy(identity_context(_pipe),
7624c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger                            identity_surface(_surf));
7634c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger}
7644c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger
765b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwellstatic struct pipe_transfer *
766287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwellidentity_context_get_transfer(struct pipe_context *_context,
767eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                              struct pipe_resource *_resource,
7684c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger                              unsigned level,
769eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                              unsigned usage,
770eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                              const struct pipe_box *box)
771b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell{
772b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell   struct identity_context *id_context = identity_context(_context);
773287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   struct identity_resource *id_resource = identity_resource(_resource);
774b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell   struct pipe_context *context = id_context->pipe;
77559b160d286e5848851848e09c87eb64cd2631c6bJakob Bornecrantz   struct pipe_resource *resource = id_resource->resource;
776b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell   struct pipe_transfer *result;
777b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell
778287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   result = context->get_transfer(context,
77959b160d286e5848851848e09c87eb64cd2631c6bJakob Bornecrantz                                  resource,
7804c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger                                  level,
781eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                  usage,
782eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                  box);
783b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell
784b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell   if (result)
785287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell      return identity_transfer_create(id_context, id_resource, result);
786b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell   return NULL;
787b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell}
788b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell
789b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwellstatic void
790287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwellidentity_context_transfer_destroy(struct pipe_context *_pipe,
791eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                  struct pipe_transfer *_transfer)
792b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell{
793d35ecca5ee231c072687578642e0c22c6c0590b1Keith Whitwell   identity_transfer_destroy(identity_context(_pipe),
794d35ecca5ee231c072687578642e0c22c6c0590b1Keith Whitwell                             identity_transfer(_transfer));
795b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell}
796b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell
797b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwellstatic void *
798b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwellidentity_context_transfer_map(struct pipe_context *_context,
799eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                              struct pipe_transfer *_transfer)
800b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell{
801b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell   struct identity_context *id_context = identity_context(_context);
802b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell   struct identity_transfer *id_transfer = identity_transfer(_transfer);
803b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell   struct pipe_context *context = id_context->pipe;
804b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell   struct pipe_transfer *transfer = id_transfer->transfer;
805b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell
806b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell   return context->transfer_map(context,
807eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                transfer);
808b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell}
809b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell
810287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell
811287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell
812287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwellstatic void
813eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantzidentity_context_transfer_flush_region(struct pipe_context *_context,
814eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                       struct pipe_transfer *_transfer,
815eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                       const struct pipe_box *box)
816287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell{
817287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   struct identity_context *id_context = identity_context(_context);
818287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   struct identity_transfer *id_transfer = identity_transfer(_transfer);
819287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   struct pipe_context *context = id_context->pipe;
820287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   struct pipe_transfer *transfer = id_transfer->transfer;
821287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell
822287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   context->transfer_flush_region(context,
823eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                  transfer,
824eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                  box);
825287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell}
826287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell
827287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell
828b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwellstatic void
829b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwellidentity_context_transfer_unmap(struct pipe_context *_context,
830eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                struct pipe_transfer *_transfer)
831b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell{
832b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell   struct identity_context *id_context = identity_context(_context);
833b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell   struct identity_transfer *id_transfer = identity_transfer(_transfer);
834b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell   struct pipe_context *context = id_context->pipe;
835b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell   struct pipe_transfer *transfer = id_transfer->transfer;
836b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell
837b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell   context->transfer_unmap(context,
838eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                           transfer);
839b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell}
840b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell
841287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell
842287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwellstatic void
843eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantzidentity_context_transfer_inline_write(struct pipe_context *_context,
844eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                       struct pipe_resource *_resource,
8454c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger                                       unsigned level,
846eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                       unsigned usage,
847eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                       const struct pipe_box *box,
848eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                       const void *data,
849eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                       unsigned stride,
8504c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger                                       unsigned layer_stride)
851287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell{
852287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   struct identity_context *id_context = identity_context(_context);
853287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   struct identity_resource *id_resource = identity_resource(_resource);
854287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   struct pipe_context *context = id_context->pipe;
85559b160d286e5848851848e09c87eb64cd2631c6bJakob Bornecrantz   struct pipe_resource *resource = id_resource->resource;
856287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell
857287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   context->transfer_inline_write(context,
85859b160d286e5848851848e09c87eb64cd2631c6bJakob Bornecrantz                                  resource,
8594c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger                                  level,
860eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                  usage,
861eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                  box,
862eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                  data,
863eda7c2506aff13726a265c70711d594ad8fddca3Jakob Bornecrantz                                  stride,
8644c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger                                  layer_stride);
865287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell}
866287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell
867287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell
868d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzstruct pipe_context *
869d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantzidentity_context_create(struct pipe_screen *_screen, struct pipe_context *pipe)
870d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz{
871d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   struct identity_context *id_pipe;
872d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   (void)identity_screen(_screen);
873d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
874d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe = CALLOC_STRUCT(identity_context);
875d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   if (!id_pipe) {
876d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz      return NULL;
877d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   }
878d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
879d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.screen = _screen;
8807f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell   id_pipe->base.priv = pipe->priv; /* expose wrapped data */
881d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.draw = NULL;
882d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
883d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.destroy = identity_destroy;
8846d28bf917fb1d741d90fd3f05c22769376021fcaChia-I Wu   id_pipe->base.draw_vbo = identity_draw_vbo;
885d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.create_query = identity_create_query;
886d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.destroy_query = identity_destroy_query;
887d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.begin_query = identity_begin_query;
888d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.end_query = identity_end_query;
889d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.get_query_result = identity_get_query_result;
890d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.create_blend_state = identity_create_blend_state;
891d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.bind_blend_state = identity_bind_blend_state;
892d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.delete_blend_state = identity_delete_blend_state;
893d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.create_sampler_state = identity_create_sampler_state;
894f2f7bd855af49752b1c77746542c62f1c529e953Michal Krol   id_pipe->base.bind_fragment_sampler_states = identity_bind_fragment_sampler_states;
895f2f7bd855af49752b1c77746542c62f1c529e953Michal Krol   id_pipe->base.bind_vertex_sampler_states = identity_bind_vertex_sampler_states;
896d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.delete_sampler_state = identity_delete_sampler_state;
897d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.create_rasterizer_state = identity_create_rasterizer_state;
898d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.bind_rasterizer_state = identity_bind_rasterizer_state;
899d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.delete_rasterizer_state = identity_delete_rasterizer_state;
900d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.create_depth_stencil_alpha_state = identity_create_depth_stencil_alpha_state;
901d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.bind_depth_stencil_alpha_state = identity_bind_depth_stencil_alpha_state;
902d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.delete_depth_stencil_alpha_state = identity_delete_depth_stencil_alpha_state;
903d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.create_fs_state = identity_create_fs_state;
904d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.bind_fs_state = identity_bind_fs_state;
905d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.delete_fs_state = identity_delete_fs_state;
906d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.create_vs_state = identity_create_vs_state;
907d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.bind_vs_state = identity_bind_vs_state;
908d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.delete_vs_state = identity_delete_vs_state;
909881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger   id_pipe->base.create_vertex_elements_state = identity_create_vertex_elements_state;
910881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger   id_pipe->base.bind_vertex_elements_state = identity_bind_vertex_elements_state;
911881be308360ec8019f17bc970bece23e9395134fRoland Scheidegger   id_pipe->base.delete_vertex_elements_state = identity_delete_vertex_elements_state;
912d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.set_blend_color = identity_set_blend_color;
9134ea2f61e5ae556fa4141cd226ecbf1521e9f16ffRoland Scheidegger   id_pipe->base.set_stencil_ref = identity_set_stencil_ref;
914d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.set_clip_state = identity_set_clip_state;
91543234cee40c48e14a3eab4268181d9b0b2b7cf79Roland Scheidegger   id_pipe->base.set_sample_mask = identity_set_sample_mask;
916d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.set_constant_buffer = identity_set_constant_buffer;
917d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.set_framebuffer_state = identity_set_framebuffer_state;
918d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.set_polygon_stipple = identity_set_polygon_stipple;
919d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.set_scissor_state = identity_set_scissor_state;
920d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.set_viewport_state = identity_set_viewport_state;
921f6106566081978f663cf08e54bb8908cb58a5316Michal Krol   id_pipe->base.set_fragment_sampler_views = identity_set_fragment_sampler_views;
922f6106566081978f663cf08e54bb8908cb58a5316Michal Krol   id_pipe->base.set_vertex_sampler_views = identity_set_vertex_sampler_views;
923d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.set_vertex_buffers = identity_set_vertex_buffers;
9246d28bf917fb1d741d90fd3f05c22769376021fcaChia-I Wu   id_pipe->base.set_index_buffer = identity_set_index_buffer;
925fd578be828e1dd7c25160e7748b30b1421f4d0c7Roland Scheidegger   id_pipe->base.resource_copy_region = identity_resource_copy_region;
926d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.clear = identity_clear;
927a6e5c6c000df8655de3b41d5809547bb41c88c23Roland Scheidegger   id_pipe->base.clear_render_target = identity_clear_render_target;
928a6e5c6c000df8655de3b41d5809547bb41c88c23Roland Scheidegger   id_pipe->base.clear_depth_stencil = identity_clear_depth_stencil;
929d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->base.flush = identity_flush;
9304c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger   id_pipe->base.create_surface = identity_context_create_surface;
9314c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger   id_pipe->base.surface_destroy = identity_context_surface_destroy;
932c2c1f60391113490f4f90efb2786544c599ac991Jakob Bornecrantz   id_pipe->base.create_sampler_view = identity_context_create_sampler_view;
933c2c1f60391113490f4f90efb2786544c599ac991Jakob Bornecrantz   id_pipe->base.sampler_view_destroy = identity_context_sampler_view_destroy;
934287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   id_pipe->base.get_transfer = identity_context_get_transfer;
935287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   id_pipe->base.transfer_destroy = identity_context_transfer_destroy;
936b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell   id_pipe->base.transfer_map = identity_context_transfer_map;
937b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell   id_pipe->base.transfer_unmap = identity_context_transfer_unmap;
938287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   id_pipe->base.transfer_flush_region = identity_context_transfer_flush_region;
939287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   id_pipe->base.transfer_inline_write = identity_context_transfer_inline_write;
940d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
941d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   id_pipe->pipe = pipe;
942d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz
943d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz   return &id_pipe->base;
944d60b2c68552a2729dfdb33c2bac4822453cf8ae2Jakob Bornecrantz}
945