1*61046927SAndroid Build Coastguard Worker /**************************************************************************
2*61046927SAndroid Build Coastguard Worker *
3*61046927SAndroid Build Coastguard Worker * Copyright 2012-2021 VMware, Inc.
4*61046927SAndroid Build Coastguard Worker * All Rights Reserved.
5*61046927SAndroid Build Coastguard Worker *
6*61046927SAndroid Build Coastguard Worker * Permission is hereby granted, free of charge, to any person obtaining a
7*61046927SAndroid Build Coastguard Worker * copy of this software and associated documentation files (the
8*61046927SAndroid Build Coastguard Worker * "Software"), to deal in the Software without restriction, including
9*61046927SAndroid Build Coastguard Worker * without limitation the rights to use, copy, modify, merge, publish,
10*61046927SAndroid Build Coastguard Worker * distribute, sub license, and/or sell copies of the Software, and to
11*61046927SAndroid Build Coastguard Worker * permit persons to whom the Software is furnished to do so, subject to
12*61046927SAndroid Build Coastguard Worker * the following conditions:
13*61046927SAndroid Build Coastguard Worker *
14*61046927SAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15*61046927SAndroid Build Coastguard Worker * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16*61046927SAndroid Build Coastguard Worker * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
17*61046927SAndroid Build Coastguard Worker * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
18*61046927SAndroid Build Coastguard Worker * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
19*61046927SAndroid Build Coastguard Worker * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20*61046927SAndroid Build Coastguard Worker * USE OR OTHER DEALINGS IN THE SOFTWARE.
21*61046927SAndroid Build Coastguard Worker *
22*61046927SAndroid Build Coastguard Worker * The above copyright notice and this permission notice (including the
23*61046927SAndroid Build Coastguard Worker * next paragraph) shall be included in all copies or substantial portions
24*61046927SAndroid Build Coastguard Worker * of the Software.
25*61046927SAndroid Build Coastguard Worker *
26*61046927SAndroid Build Coastguard Worker **************************************************************************/
27*61046927SAndroid Build Coastguard Worker
28*61046927SAndroid Build Coastguard Worker /*
29*61046927SAndroid Build Coastguard Worker * Rasterizer.cpp --
30*61046927SAndroid Build Coastguard Worker * Functions that manipulate rasterizer state.
31*61046927SAndroid Build Coastguard Worker */
32*61046927SAndroid Build Coastguard Worker
33*61046927SAndroid Build Coastguard Worker
34*61046927SAndroid Build Coastguard Worker #include "Rasterizer.h"
35*61046927SAndroid Build Coastguard Worker #include "State.h"
36*61046927SAndroid Build Coastguard Worker
37*61046927SAndroid Build Coastguard Worker #include "Debug.h"
38*61046927SAndroid Build Coastguard Worker
39*61046927SAndroid Build Coastguard Worker
40*61046927SAndroid Build Coastguard Worker /*
41*61046927SAndroid Build Coastguard Worker * ----------------------------------------------------------------------
42*61046927SAndroid Build Coastguard Worker *
43*61046927SAndroid Build Coastguard Worker * SetViewports --
44*61046927SAndroid Build Coastguard Worker *
45*61046927SAndroid Build Coastguard Worker * The SetViewports function sets viewports.
46*61046927SAndroid Build Coastguard Worker *
47*61046927SAndroid Build Coastguard Worker * ----------------------------------------------------------------------
48*61046927SAndroid Build Coastguard Worker */
49*61046927SAndroid Build Coastguard Worker
50*61046927SAndroid Build Coastguard Worker void APIENTRY
SetViewports(D3D10DDI_HDEVICE hDevice,UINT NumViewports,UINT ClearViewports,__in_ecount (NumViewports)const D3D10_DDI_VIEWPORT * pViewports)51*61046927SAndroid Build Coastguard Worker SetViewports(D3D10DDI_HDEVICE hDevice, // IN
52*61046927SAndroid Build Coastguard Worker UINT NumViewports, // IN
53*61046927SAndroid Build Coastguard Worker UINT ClearViewports, // IN
54*61046927SAndroid Build Coastguard Worker __in_ecount (NumViewports) const D3D10_DDI_VIEWPORT *pViewports) // IN
55*61046927SAndroid Build Coastguard Worker {
56*61046927SAndroid Build Coastguard Worker LOG_ENTRYPOINT();
57*61046927SAndroid Build Coastguard Worker
58*61046927SAndroid Build Coastguard Worker struct pipe_context *pipe = CastPipeContext(hDevice);
59*61046927SAndroid Build Coastguard Worker struct pipe_viewport_state states[PIPE_MAX_VIEWPORTS];
60*61046927SAndroid Build Coastguard Worker
61*61046927SAndroid Build Coastguard Worker ASSERT(NumViewports + ClearViewports <=
62*61046927SAndroid Build Coastguard Worker D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE);
63*61046927SAndroid Build Coastguard Worker
64*61046927SAndroid Build Coastguard Worker for (UINT i = 0; i < NumViewports; ++i) {
65*61046927SAndroid Build Coastguard Worker const D3D10_DDI_VIEWPORT *pViewport = &pViewports[i];
66*61046927SAndroid Build Coastguard Worker float width = pViewport->Width;
67*61046927SAndroid Build Coastguard Worker float height = pViewport->Height;
68*61046927SAndroid Build Coastguard Worker float x = pViewport->TopLeftX;
69*61046927SAndroid Build Coastguard Worker float y = pViewport->TopLeftY;
70*61046927SAndroid Build Coastguard Worker float z = pViewport->MinDepth;
71*61046927SAndroid Build Coastguard Worker float half_width = width / 2.0f;
72*61046927SAndroid Build Coastguard Worker float half_height = height / 2.0f;
73*61046927SAndroid Build Coastguard Worker float depth = pViewport->MaxDepth - z;
74*61046927SAndroid Build Coastguard Worker
75*61046927SAndroid Build Coastguard Worker states[i].scale[0] = half_width;
76*61046927SAndroid Build Coastguard Worker states[i].scale[1] = -half_height;
77*61046927SAndroid Build Coastguard Worker states[i].scale[2] = depth;
78*61046927SAndroid Build Coastguard Worker
79*61046927SAndroid Build Coastguard Worker states[i].translate[0] = half_width + x;
80*61046927SAndroid Build Coastguard Worker states[i].translate[1] = half_height + y;
81*61046927SAndroid Build Coastguard Worker states[i].translate[2] = z;
82*61046927SAndroid Build Coastguard Worker }
83*61046927SAndroid Build Coastguard Worker if (ClearViewports) {
84*61046927SAndroid Build Coastguard Worker memset(states + NumViewports, 0,
85*61046927SAndroid Build Coastguard Worker sizeof(struct pipe_viewport_state) * ClearViewports);
86*61046927SAndroid Build Coastguard Worker }
87*61046927SAndroid Build Coastguard Worker pipe->set_viewport_states(pipe, 0, NumViewports + ClearViewports,
88*61046927SAndroid Build Coastguard Worker states);
89*61046927SAndroid Build Coastguard Worker }
90*61046927SAndroid Build Coastguard Worker
91*61046927SAndroid Build Coastguard Worker
92*61046927SAndroid Build Coastguard Worker /*
93*61046927SAndroid Build Coastguard Worker * ----------------------------------------------------------------------
94*61046927SAndroid Build Coastguard Worker *
95*61046927SAndroid Build Coastguard Worker * SetScissorRects --
96*61046927SAndroid Build Coastguard Worker *
97*61046927SAndroid Build Coastguard Worker * The SetScissorRects function marks portions of render targets
98*61046927SAndroid Build Coastguard Worker * that rendering is confined to.
99*61046927SAndroid Build Coastguard Worker *
100*61046927SAndroid Build Coastguard Worker * ----------------------------------------------------------------------
101*61046927SAndroid Build Coastguard Worker */
102*61046927SAndroid Build Coastguard Worker
103*61046927SAndroid Build Coastguard Worker void APIENTRY
SetScissorRects(D3D10DDI_HDEVICE hDevice,UINT NumScissorRects,UINT ClearScissorRects,__in_ecount (NumRects)const D3D10_DDI_RECT * pRects)104*61046927SAndroid Build Coastguard Worker SetScissorRects(D3D10DDI_HDEVICE hDevice, // IN
105*61046927SAndroid Build Coastguard Worker UINT NumScissorRects, // IN
106*61046927SAndroid Build Coastguard Worker UINT ClearScissorRects, // IN
107*61046927SAndroid Build Coastguard Worker __in_ecount (NumRects) const D3D10_DDI_RECT *pRects) // IN
108*61046927SAndroid Build Coastguard Worker {
109*61046927SAndroid Build Coastguard Worker LOG_ENTRYPOINT();
110*61046927SAndroid Build Coastguard Worker
111*61046927SAndroid Build Coastguard Worker struct pipe_context *pipe = CastPipeContext(hDevice);
112*61046927SAndroid Build Coastguard Worker struct pipe_scissor_state states[PIPE_MAX_VIEWPORTS];
113*61046927SAndroid Build Coastguard Worker
114*61046927SAndroid Build Coastguard Worker ASSERT(NumScissorRects + ClearScissorRects <=
115*61046927SAndroid Build Coastguard Worker D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE);
116*61046927SAndroid Build Coastguard Worker
117*61046927SAndroid Build Coastguard Worker for (UINT i = 0; i < NumScissorRects; ++i) {
118*61046927SAndroid Build Coastguard Worker const D3D10_DDI_RECT *pRect = &pRects[i];
119*61046927SAndroid Build Coastguard Worker /* gallium scissor values are unsigned so lets make
120*61046927SAndroid Build Coastguard Worker * sure that we don't overflow */
121*61046927SAndroid Build Coastguard Worker states[i].minx = pRect->left < 0 ? 0 : pRect->left;
122*61046927SAndroid Build Coastguard Worker states[i].miny = pRect->top < 0 ? 0 : pRect->top;
123*61046927SAndroid Build Coastguard Worker states[i].maxx = pRect->right < 0 ? 0 : pRect->right;
124*61046927SAndroid Build Coastguard Worker states[i].maxy = pRect->bottom < 0 ? 0 : pRect->bottom;
125*61046927SAndroid Build Coastguard Worker }
126*61046927SAndroid Build Coastguard Worker if (ClearScissorRects) {
127*61046927SAndroid Build Coastguard Worker memset(states + NumScissorRects, 0,
128*61046927SAndroid Build Coastguard Worker sizeof(struct pipe_scissor_state) * ClearScissorRects);
129*61046927SAndroid Build Coastguard Worker }
130*61046927SAndroid Build Coastguard Worker pipe->set_scissor_states(pipe, 0, NumScissorRects + ClearScissorRects,
131*61046927SAndroid Build Coastguard Worker states);
132*61046927SAndroid Build Coastguard Worker }
133*61046927SAndroid Build Coastguard Worker
134*61046927SAndroid Build Coastguard Worker
135*61046927SAndroid Build Coastguard Worker /*
136*61046927SAndroid Build Coastguard Worker * ----------------------------------------------------------------------
137*61046927SAndroid Build Coastguard Worker *
138*61046927SAndroid Build Coastguard Worker * CalcPrivateRasterizerStateSize --
139*61046927SAndroid Build Coastguard Worker *
140*61046927SAndroid Build Coastguard Worker * The CalcPrivateRasterizerStateSize function determines the size
141*61046927SAndroid Build Coastguard Worker * of the user-mode display driver's private region of memory
142*61046927SAndroid Build Coastguard Worker * (that is, the size of internal driver structures, not the size
143*61046927SAndroid Build Coastguard Worker * of the resource video memory) for a rasterizer state.
144*61046927SAndroid Build Coastguard Worker *
145*61046927SAndroid Build Coastguard Worker * ----------------------------------------------------------------------
146*61046927SAndroid Build Coastguard Worker */
147*61046927SAndroid Build Coastguard Worker
148*61046927SAndroid Build Coastguard Worker SIZE_T APIENTRY
CalcPrivateRasterizerStateSize(D3D10DDI_HDEVICE hDevice,__in const D3D10_DDI_RASTERIZER_DESC * pRasterizerDesc)149*61046927SAndroid Build Coastguard Worker CalcPrivateRasterizerStateSize(
150*61046927SAndroid Build Coastguard Worker D3D10DDI_HDEVICE hDevice, // IN
151*61046927SAndroid Build Coastguard Worker __in const D3D10_DDI_RASTERIZER_DESC *pRasterizerDesc) // IN
152*61046927SAndroid Build Coastguard Worker {
153*61046927SAndroid Build Coastguard Worker return sizeof(RasterizerState);
154*61046927SAndroid Build Coastguard Worker }
155*61046927SAndroid Build Coastguard Worker
156*61046927SAndroid Build Coastguard Worker
157*61046927SAndroid Build Coastguard Worker static uint
translate_cull_mode(D3D10_DDI_CULL_MODE CullMode)158*61046927SAndroid Build Coastguard Worker translate_cull_mode(D3D10_DDI_CULL_MODE CullMode)
159*61046927SAndroid Build Coastguard Worker {
160*61046927SAndroid Build Coastguard Worker switch (CullMode) {
161*61046927SAndroid Build Coastguard Worker case D3D10_DDI_CULL_NONE:
162*61046927SAndroid Build Coastguard Worker return PIPE_FACE_NONE;
163*61046927SAndroid Build Coastguard Worker case D3D10_DDI_CULL_FRONT:
164*61046927SAndroid Build Coastguard Worker return PIPE_FACE_FRONT;
165*61046927SAndroid Build Coastguard Worker case D3D10_DDI_CULL_BACK:
166*61046927SAndroid Build Coastguard Worker return PIPE_FACE_BACK;
167*61046927SAndroid Build Coastguard Worker default:
168*61046927SAndroid Build Coastguard Worker assert(0);
169*61046927SAndroid Build Coastguard Worker return PIPE_FACE_NONE;
170*61046927SAndroid Build Coastguard Worker }
171*61046927SAndroid Build Coastguard Worker }
172*61046927SAndroid Build Coastguard Worker
173*61046927SAndroid Build Coastguard Worker static uint
translate_fill_mode(D3D10_DDI_FILL_MODE FillMode)174*61046927SAndroid Build Coastguard Worker translate_fill_mode(D3D10_DDI_FILL_MODE FillMode)
175*61046927SAndroid Build Coastguard Worker {
176*61046927SAndroid Build Coastguard Worker switch (FillMode) {
177*61046927SAndroid Build Coastguard Worker case D3D10_DDI_FILL_WIREFRAME:
178*61046927SAndroid Build Coastguard Worker return PIPE_POLYGON_MODE_LINE;
179*61046927SAndroid Build Coastguard Worker case D3D10_DDI_FILL_SOLID:
180*61046927SAndroid Build Coastguard Worker return PIPE_POLYGON_MODE_FILL;
181*61046927SAndroid Build Coastguard Worker default:
182*61046927SAndroid Build Coastguard Worker assert(0);
183*61046927SAndroid Build Coastguard Worker return PIPE_POLYGON_MODE_FILL;
184*61046927SAndroid Build Coastguard Worker }
185*61046927SAndroid Build Coastguard Worker }
186*61046927SAndroid Build Coastguard Worker
187*61046927SAndroid Build Coastguard Worker
188*61046927SAndroid Build Coastguard Worker /*
189*61046927SAndroid Build Coastguard Worker * ----------------------------------------------------------------------
190*61046927SAndroid Build Coastguard Worker *
191*61046927SAndroid Build Coastguard Worker * CreateRasterizerState --
192*61046927SAndroid Build Coastguard Worker *
193*61046927SAndroid Build Coastguard Worker * The CreateRasterizerState function creates a rasterizer state.
194*61046927SAndroid Build Coastguard Worker *
195*61046927SAndroid Build Coastguard Worker * ----------------------------------------------------------------------
196*61046927SAndroid Build Coastguard Worker */
197*61046927SAndroid Build Coastguard Worker
198*61046927SAndroid Build Coastguard Worker void APIENTRY
CreateRasterizerState(D3D10DDI_HDEVICE hDevice,__in const D3D10_DDI_RASTERIZER_DESC * pRasterizerDesc,D3D10DDI_HRASTERIZERSTATE hRasterizerState,D3D10DDI_HRTRASTERIZERSTATE hRTRasterizerState)199*61046927SAndroid Build Coastguard Worker CreateRasterizerState(
200*61046927SAndroid Build Coastguard Worker D3D10DDI_HDEVICE hDevice, // IN
201*61046927SAndroid Build Coastguard Worker __in const D3D10_DDI_RASTERIZER_DESC *pRasterizerDesc, // IN
202*61046927SAndroid Build Coastguard Worker D3D10DDI_HRASTERIZERSTATE hRasterizerState, // IN
203*61046927SAndroid Build Coastguard Worker D3D10DDI_HRTRASTERIZERSTATE hRTRasterizerState) // IN
204*61046927SAndroid Build Coastguard Worker {
205*61046927SAndroid Build Coastguard Worker LOG_ENTRYPOINT();
206*61046927SAndroid Build Coastguard Worker
207*61046927SAndroid Build Coastguard Worker struct pipe_context *pipe = CastPipeContext(hDevice);
208*61046927SAndroid Build Coastguard Worker RasterizerState *pRasterizerState = CastRasterizerState(hRasterizerState);
209*61046927SAndroid Build Coastguard Worker
210*61046927SAndroid Build Coastguard Worker struct pipe_rasterizer_state state;
211*61046927SAndroid Build Coastguard Worker memset(&state, 0, sizeof state);
212*61046927SAndroid Build Coastguard Worker
213*61046927SAndroid Build Coastguard Worker state.flatshade_first = 1;
214*61046927SAndroid Build Coastguard Worker state.front_ccw = (pRasterizerDesc->FrontCounterClockwise ? 1 : 0);
215*61046927SAndroid Build Coastguard Worker state.cull_face = translate_cull_mode(pRasterizerDesc->CullMode);
216*61046927SAndroid Build Coastguard Worker state.fill_front = translate_fill_mode(pRasterizerDesc->FillMode);
217*61046927SAndroid Build Coastguard Worker state.fill_back = state.fill_front;
218*61046927SAndroid Build Coastguard Worker state.scissor = (pRasterizerDesc->ScissorEnable ? 1 : 0);
219*61046927SAndroid Build Coastguard Worker state.line_smooth = (pRasterizerDesc->AntialiasedLineEnable ? 1 : 0);
220*61046927SAndroid Build Coastguard Worker state.offset_units = (float)pRasterizerDesc->DepthBias;
221*61046927SAndroid Build Coastguard Worker state.offset_scale = pRasterizerDesc->SlopeScaledDepthBias;
222*61046927SAndroid Build Coastguard Worker state.offset_clamp = pRasterizerDesc->DepthBiasClamp;
223*61046927SAndroid Build Coastguard Worker state.multisample = /* pRasterizerDesc->MultisampleEnable */ 0;
224*61046927SAndroid Build Coastguard Worker state.half_pixel_center = 1;
225*61046927SAndroid Build Coastguard Worker state.bottom_edge_rule = 0;
226*61046927SAndroid Build Coastguard Worker state.clip_halfz = 1;
227*61046927SAndroid Build Coastguard Worker state.depth_clip_near = pRasterizerDesc->DepthClipEnable ? 1 : 0;
228*61046927SAndroid Build Coastguard Worker state.depth_clip_far = pRasterizerDesc->DepthClipEnable ? 1 : 0;
229*61046927SAndroid Build Coastguard Worker state.depth_clamp = 1;
230*61046927SAndroid Build Coastguard Worker
231*61046927SAndroid Build Coastguard Worker state.point_quad_rasterization = 1;
232*61046927SAndroid Build Coastguard Worker state.point_size = 1.0f;
233*61046927SAndroid Build Coastguard Worker state.point_line_tri_clip = 1;
234*61046927SAndroid Build Coastguard Worker
235*61046927SAndroid Build Coastguard Worker state.line_width = 1.0f;
236*61046927SAndroid Build Coastguard Worker state.line_rectangular = 0;
237*61046927SAndroid Build Coastguard Worker
238*61046927SAndroid Build Coastguard Worker pRasterizerState->handle = pipe->create_rasterizer_state(pipe, &state);
239*61046927SAndroid Build Coastguard Worker }
240*61046927SAndroid Build Coastguard Worker
241*61046927SAndroid Build Coastguard Worker
242*61046927SAndroid Build Coastguard Worker /*
243*61046927SAndroid Build Coastguard Worker * ----------------------------------------------------------------------
244*61046927SAndroid Build Coastguard Worker *
245*61046927SAndroid Build Coastguard Worker * DestroyRasterizerState --
246*61046927SAndroid Build Coastguard Worker *
247*61046927SAndroid Build Coastguard Worker * The DestroyRasterizerState function destroys the specified
248*61046927SAndroid Build Coastguard Worker * rasterizer state object. The rasterizer state object can be
249*61046927SAndroid Build Coastguard Worker * destoyed only if it is not currently bound to a display device.
250*61046927SAndroid Build Coastguard Worker *
251*61046927SAndroid Build Coastguard Worker * ----------------------------------------------------------------------
252*61046927SAndroid Build Coastguard Worker */
253*61046927SAndroid Build Coastguard Worker
254*61046927SAndroid Build Coastguard Worker void APIENTRY
DestroyRasterizerState(D3D10DDI_HDEVICE hDevice,D3D10DDI_HRASTERIZERSTATE hRasterizerState)255*61046927SAndroid Build Coastguard Worker DestroyRasterizerState(D3D10DDI_HDEVICE hDevice, // IN
256*61046927SAndroid Build Coastguard Worker D3D10DDI_HRASTERIZERSTATE hRasterizerState) // IN
257*61046927SAndroid Build Coastguard Worker {
258*61046927SAndroid Build Coastguard Worker LOG_ENTRYPOINT();
259*61046927SAndroid Build Coastguard Worker
260*61046927SAndroid Build Coastguard Worker struct pipe_context *pipe = CastPipeContext(hDevice);
261*61046927SAndroid Build Coastguard Worker RasterizerState *pRasterizerState = CastRasterizerState(hRasterizerState);
262*61046927SAndroid Build Coastguard Worker
263*61046927SAndroid Build Coastguard Worker pipe->delete_rasterizer_state(pipe, pRasterizerState->handle);
264*61046927SAndroid Build Coastguard Worker }
265*61046927SAndroid Build Coastguard Worker
266*61046927SAndroid Build Coastguard Worker
267*61046927SAndroid Build Coastguard Worker /*
268*61046927SAndroid Build Coastguard Worker * ----------------------------------------------------------------------
269*61046927SAndroid Build Coastguard Worker *
270*61046927SAndroid Build Coastguard Worker * SetRasterizerState --
271*61046927SAndroid Build Coastguard Worker *
272*61046927SAndroid Build Coastguard Worker * The SetRasterizerState function sets the rasterizer state.
273*61046927SAndroid Build Coastguard Worker *
274*61046927SAndroid Build Coastguard Worker * ----------------------------------------------------------------------
275*61046927SAndroid Build Coastguard Worker */
276*61046927SAndroid Build Coastguard Worker
277*61046927SAndroid Build Coastguard Worker void APIENTRY
SetRasterizerState(D3D10DDI_HDEVICE hDevice,D3D10DDI_HRASTERIZERSTATE hRasterizerState)278*61046927SAndroid Build Coastguard Worker SetRasterizerState(D3D10DDI_HDEVICE hDevice, // IN
279*61046927SAndroid Build Coastguard Worker D3D10DDI_HRASTERIZERSTATE hRasterizerState) // IN
280*61046927SAndroid Build Coastguard Worker {
281*61046927SAndroid Build Coastguard Worker LOG_ENTRYPOINT();
282*61046927SAndroid Build Coastguard Worker
283*61046927SAndroid Build Coastguard Worker struct pipe_context *pipe = CastPipeContext(hDevice);
284*61046927SAndroid Build Coastguard Worker void *state = CastPipeRasterizerState(hRasterizerState);
285*61046927SAndroid Build Coastguard Worker
286*61046927SAndroid Build Coastguard Worker pipe->bind_rasterizer_state(pipe, state);
287*61046927SAndroid Build Coastguard Worker }
288