nv50_state.c revision cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1
147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs#include "pipe/p_state.h"
247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs#include "pipe/p_defines.h"
347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs#include "pipe/p_util.h"
447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs#include "nv50_context.h"
647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs#include "nv50_state.h"
747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
83250bacd2411d3f1af50135599380b2140238535Ben Skeggs#include "nouveau/nouveau_stateobj.h"
93250bacd2411d3f1af50135599380b2140238535Ben Skeggs
1047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void *
1147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_blend_state_create(struct pipe_context *pipe,
1247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs			const struct pipe_blend_state *cso)
1347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
143250bacd2411d3f1af50135599380b2140238535Ben Skeggs	struct nouveau_stateobj *so = so_new(64, 0);
153250bacd2411d3f1af50135599380b2140238535Ben Skeggs	struct nouveau_grobj *tesla = nv50_context(pipe)->screen->tesla;
163250bacd2411d3f1af50135599380b2140238535Ben Skeggs	struct nv50_blend_stateobj *bso = CALLOC_STRUCT(nv50_blend_stateobj);
173250bacd2411d3f1af50135599380b2140238535Ben Skeggs	unsigned cmask = 0, i;
183250bacd2411d3f1af50135599380b2140238535Ben Skeggs
193250bacd2411d3f1af50135599380b2140238535Ben Skeggs	/*XXX ignored:
203250bacd2411d3f1af50135599380b2140238535Ben Skeggs	 * 	- dither
213250bacd2411d3f1af50135599380b2140238535Ben Skeggs	 */
223250bacd2411d3f1af50135599380b2140238535Ben Skeggs
233250bacd2411d3f1af50135599380b2140238535Ben Skeggs	if (cso->blend_enable == 0) {
243250bacd2411d3f1af50135599380b2140238535Ben Skeggs		so_method(so, tesla, NV50TCL_BLEND_ENABLE(0), 8);
253250bacd2411d3f1af50135599380b2140238535Ben Skeggs		for (i = 0; i < 8; i++)
263250bacd2411d3f1af50135599380b2140238535Ben Skeggs			so_data(so, 0);
273250bacd2411d3f1af50135599380b2140238535Ben Skeggs	} else {
283250bacd2411d3f1af50135599380b2140238535Ben Skeggs		so_method(so, tesla, NV50TCL_BLEND_ENABLE(0), 8);
293250bacd2411d3f1af50135599380b2140238535Ben Skeggs		for (i = 0; i < 8; i++)
303250bacd2411d3f1af50135599380b2140238535Ben Skeggs			so_data(so, 1);
313250bacd2411d3f1af50135599380b2140238535Ben Skeggs		so_method(so, tesla, NV50TCL_BLEND_EQUATION_RGB, 5);
323250bacd2411d3f1af50135599380b2140238535Ben Skeggs		so_data  (so, nvgl_blend_eqn(cso->rgb_func));
333250bacd2411d3f1af50135599380b2140238535Ben Skeggs		so_data  (so, nvgl_blend_func(cso->rgb_src_factor));
343250bacd2411d3f1af50135599380b2140238535Ben Skeggs		so_data  (so, nvgl_blend_func(cso->rgb_dst_factor));
353250bacd2411d3f1af50135599380b2140238535Ben Skeggs		so_data  (so, nvgl_blend_eqn(cso->alpha_func));
363250bacd2411d3f1af50135599380b2140238535Ben Skeggs		so_data  (so, nvgl_blend_func(cso->alpha_src_factor));
373250bacd2411d3f1af50135599380b2140238535Ben Skeggs		so_method(so, tesla, NV50TCL_BLEND_FUNC_DST_ALPHA, 1);
383250bacd2411d3f1af50135599380b2140238535Ben Skeggs		so_data  (so, nvgl_blend_func(cso->alpha_dst_factor));
393250bacd2411d3f1af50135599380b2140238535Ben Skeggs	}
403250bacd2411d3f1af50135599380b2140238535Ben Skeggs
413250bacd2411d3f1af50135599380b2140238535Ben Skeggs	if (cso->logicop_enable == 0 ) {
423250bacd2411d3f1af50135599380b2140238535Ben Skeggs		so_method(so, tesla, NV50TCL_LOGIC_OP_ENABLE, 1);
433250bacd2411d3f1af50135599380b2140238535Ben Skeggs		so_data  (so, 0);
443250bacd2411d3f1af50135599380b2140238535Ben Skeggs	} else {
453250bacd2411d3f1af50135599380b2140238535Ben Skeggs		so_method(so, tesla, NV50TCL_LOGIC_OP_ENABLE, 2);
463250bacd2411d3f1af50135599380b2140238535Ben Skeggs		so_data  (so, 1);
473250bacd2411d3f1af50135599380b2140238535Ben Skeggs		so_data  (so, nvgl_logicop_func(cso->logicop_func));
483250bacd2411d3f1af50135599380b2140238535Ben Skeggs	}
493250bacd2411d3f1af50135599380b2140238535Ben Skeggs
503250bacd2411d3f1af50135599380b2140238535Ben Skeggs	if (cso->colormask & PIPE_MASK_R)
513250bacd2411d3f1af50135599380b2140238535Ben Skeggs		cmask |= (1 << 0);
523250bacd2411d3f1af50135599380b2140238535Ben Skeggs	if (cso->colormask & PIPE_MASK_G)
533250bacd2411d3f1af50135599380b2140238535Ben Skeggs		cmask |= (1 << 4);
543250bacd2411d3f1af50135599380b2140238535Ben Skeggs	if (cso->colormask & PIPE_MASK_B)
553250bacd2411d3f1af50135599380b2140238535Ben Skeggs		cmask |= (1 << 8);
563250bacd2411d3f1af50135599380b2140238535Ben Skeggs	if (cso->colormask & PIPE_MASK_A)
573250bacd2411d3f1af50135599380b2140238535Ben Skeggs		cmask |= (1 << 12);
583250bacd2411d3f1af50135599380b2140238535Ben Skeggs	so_method(so, tesla, NV50TCL_COLOR_MASK(0), 8);
593250bacd2411d3f1af50135599380b2140238535Ben Skeggs	for (i = 0; i < 8; i++)
603250bacd2411d3f1af50135599380b2140238535Ben Skeggs		so_data(so, cmask);
613250bacd2411d3f1af50135599380b2140238535Ben Skeggs
623250bacd2411d3f1af50135599380b2140238535Ben Skeggs	bso->pipe = *cso;
633250bacd2411d3f1af50135599380b2140238535Ben Skeggs	so_ref(so, &bso->so);
643250bacd2411d3f1af50135599380b2140238535Ben Skeggs	return (void *)bso;
6547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
6647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
6747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void
6847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_blend_state_bind(struct pipe_context *pipe, void *hwcso)
6947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
703250bacd2411d3f1af50135599380b2140238535Ben Skeggs	struct nv50_context *nv50 = nv50_context(pipe);
713250bacd2411d3f1af50135599380b2140238535Ben Skeggs
723250bacd2411d3f1af50135599380b2140238535Ben Skeggs	nv50->blend = hwcso;
733250bacd2411d3f1af50135599380b2140238535Ben Skeggs	nv50->dirty |= NV50_NEW_BLEND;
7447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
7547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
7647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void
7747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_blend_state_delete(struct pipe_context *pipe, void *hwcso)
7847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
793250bacd2411d3f1af50135599380b2140238535Ben Skeggs	struct nv50_blend_stateobj *bso = hwcso;
803250bacd2411d3f1af50135599380b2140238535Ben Skeggs
813250bacd2411d3f1af50135599380b2140238535Ben Skeggs	so_ref(NULL, &bso->so);
823250bacd2411d3f1af50135599380b2140238535Ben Skeggs	FREE(bso);
8347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
8447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
8547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void *
8647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_sampler_state_create(struct pipe_context *pipe,
8747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs			  const struct pipe_sampler_state *cso)
8847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
8979bca7dd884da33c06ecd3dabb893f9cfed1aaedBen Skeggs	return NULL;
9047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
9147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
9247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void
9347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_sampler_state_bind(struct pipe_context *pipe, unsigned unit,
9447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs			void *hwcso)
9547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
9647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
9747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
9847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void
9947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_sampler_state_delete(struct pipe_context *pipe, void *hwcso)
10047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
10147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
10247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
10379bca7dd884da33c06ecd3dabb893f9cfed1aaedBen Skeggsstatic void
10479bca7dd884da33c06ecd3dabb893f9cfed1aaedBen Skeggsnv50_set_sampler_texture(struct pipe_context *pipe, unsigned unit,
10579bca7dd884da33c06ecd3dabb893f9cfed1aaedBen Skeggs			 struct pipe_texture *pt)
10679bca7dd884da33c06ecd3dabb893f9cfed1aaedBen Skeggs{
10779bca7dd884da33c06ecd3dabb893f9cfed1aaedBen Skeggs}
10879bca7dd884da33c06ecd3dabb893f9cfed1aaedBen Skeggs
10947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void *
11047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_rasterizer_state_create(struct pipe_context *pipe,
11147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs			     const struct pipe_rasterizer_state *cso)
11247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
113cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	struct nouveau_stateobj *so = so_new(64, 0);
114cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	struct nouveau_grobj *tesla = nv50_context(pipe)->screen->tesla;
115cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	struct nv50_rasterizer_stateobj *rso =
116cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		CALLOC_STRUCT(nv50_rasterizer_stateobj);
117cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	unsigned i;
118cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs
119cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	/*XXX: ignored
120cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	 * 	- light_twosize
121cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	 * 	- point_smooth
122cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	 * 	- multisample
123cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	 * 	- point_sprite / sprite_coord_mode
124cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	 */
125cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs
126cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	so_method(so, tesla, NV50TCL_SHADE_MODEL, 1);
127cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	so_data  (so, cso->flatshade ? NV50TCL_SHADE_MODEL_FLAT :
128cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs				       NV50TCL_SHADE_MODEL_SMOOTH);
129cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs
130cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	so_method(so, tesla, NV50TCL_LINE_WIDTH, 1);
131cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	so_data  (so, fui(cso->line_width));
132cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	so_method(so, tesla, NV50TCL_LINE_SMOOTH_ENABLE, 1);
133cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	so_data  (so, cso->line_smooth ? 1 : 0);
134cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	if (cso->line_stipple_enable) {
135cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_method(so, tesla, NV50TCL_LINE_STIPPLE_ENABLE, 1);
136cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_data  (so, 1);
137cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_method(so, tesla, NV50TCL_LINE_STIPPLE_PATTERN, 1);
138cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_data  (so, (cso->line_stipple_pattern << 16) |
139cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs			       cso->line_stipple_factor);
140cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	} else {
141cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_method(so, tesla, NV50TCL_LINE_STIPPLE_ENABLE, 1);
142cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_data  (so, 0);
143cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	}
144cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs
145cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	so_method(so, tesla, NV50TCL_POINT_SIZE, 1);
146cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	so_data  (so, fui(cso->point_size));
147cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs
148cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	so_method(so, tesla, NV50TCL_POLYGON_MODE_FRONT, 3);
149cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	if (cso->front_winding == PIPE_WINDING_CCW) {
150cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_data(so, nvgl_polygon_mode(cso->fill_ccw));
151cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_data(so, nvgl_polygon_mode(cso->fill_cw));
152cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	} else {
153cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_data(so, nvgl_polygon_mode(cso->fill_cw));
154cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_data(so, nvgl_polygon_mode(cso->fill_ccw));
155cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	}
156cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	so_data(so, cso->poly_smooth ? 1 : 0);
157cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs
158cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	so_method(so, tesla, NV50TCL_CULL_FACE_ENABLE, 3);
159cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	so_data  (so, cso->cull_mode != PIPE_WINDING_NONE);
160cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	if (cso->front_winding == PIPE_WINDING_CCW) {
161cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_data(so, NV50TCL_FRONT_FACE_CCW);
162cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		switch (cso->cull_mode) {
163cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		case PIPE_WINDING_CCW:
164cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs			so_data(so, NV50TCL_CULL_FACE_FRONT);
165cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs			break;
166cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		case PIPE_WINDING_CW:
167cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs			so_data(so, NV50TCL_CULL_FACE_BACK);
168cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs			break;
169cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		case PIPE_WINDING_BOTH:
170cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs			so_data(so, NV50TCL_CULL_FACE_FRONT_AND_BACK);
171cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs			break;
172cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		default:
173cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs			so_data(so, NV50TCL_CULL_FACE_BACK);
174cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs			break;
175cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		}
176cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	} else {
177cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_data(so, NV50TCL_FRONT_FACE_CW);
178cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		switch (cso->cull_mode) {
179cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		case PIPE_WINDING_CCW:
180cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs			so_data(so, NV50TCL_CULL_FACE_BACK);
181cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs			break;
182cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		case PIPE_WINDING_CW:
183cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs			so_data(so, NV50TCL_CULL_FACE_FRONT);
184cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs			break;
185cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		case PIPE_WINDING_BOTH:
186cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs			so_data(so, NV50TCL_CULL_FACE_FRONT_AND_BACK);
187cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs			break;
188cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		default:
189cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs			so_data(so, NV50TCL_CULL_FACE_BACK);
190cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs			break;
191cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		}
192cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	}
193cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs
194cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	so_method(so, tesla, NV50TCL_POLYGON_STIPPLE_ENABLE, 1);
195cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	so_data  (so, cso->poly_stipple_enable ? 1 : 0);
196cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs
197cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	so_method(so, tesla, NV50TCL_POLYGON_OFFSET_POINT_ENABLE, 3);
198cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	if ((cso->offset_cw && cso->fill_cw == PIPE_POLYGON_MODE_POINT) ||
199cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	    (cso->offset_ccw && cso->fill_ccw == PIPE_POLYGON_MODE_POINT))
200cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_data(so, 1);
201cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	else
202cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_data(so, 0);
203cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	if ((cso->offset_cw && cso->fill_cw == PIPE_POLYGON_MODE_LINE) ||
204cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	    (cso->offset_ccw && cso->fill_ccw == PIPE_POLYGON_MODE_LINE))
205cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_data(so, 1);
206cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	else
207cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_data(so, 0);
208cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	if ((cso->offset_cw && cso->fill_cw == PIPE_POLYGON_MODE_FILL) ||
209cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	    (cso->offset_ccw && cso->fill_ccw == PIPE_POLYGON_MODE_FILL))
210cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_data(so, 1);
211cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	else
212cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_data(so, 0);
213cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs
214cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	if (cso->offset_cw || cso->offset_ccw) {
215cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_method(so, tesla, NV50TCL_POLYGON_OFFSET_FACTOR, 1);
216cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_data  (so, fui(cso->offset_scale));
217cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_method(so, tesla, NV50TCL_POLYGON_OFFSET_UNITS, 1);
218cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_data  (so, fui(cso->offset_units * 2));
219cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	}
220cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs
221cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	rso->pipe = *cso;
222cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	so_ref(so, &rso->so);
223cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	return (void *)rso;
22447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
22547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
22647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void
22747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_rasterizer_state_bind(struct pipe_context *pipe, void *hwcso)
22847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
229cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	struct nv50_context *nv50 = nv50_context(pipe);
230cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs
231cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	nv50->rasterizer = hwcso;
232cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	nv50->dirty |= NV50_NEW_RASTERIZER;
23347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
23447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
23547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void
23647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_rasterizer_state_delete(struct pipe_context *pipe, void *hwcso)
23747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
238cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	struct nv50_rasterizer_stateobj *rso = hwcso;
239cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs
240cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	so_ref(NULL, &rso->so);
241cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	FREE(rso);
24247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
24347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
24447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void *
2453af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggsnv50_depth_stencil_alpha_state_create(struct pipe_context *pipe,
2463af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs			const struct pipe_depth_stencil_alpha_state *cso)
24747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
24806bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	struct nouveau_grobj *tesla = nv50_context(pipe)->screen->tesla;
24906bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	struct nv50_zsa_stateobj *zsa = CALLOC_STRUCT(nv50_zsa_stateobj);
25006bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	struct nouveau_stateobj *so = so_new(64, 0);
25106bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs
25206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	so_method(so, tesla, NV50TCL_DEPTH_WRITE_ENABLE, 1);
25306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	so_data  (so, cso->depth.writemask ? 1 : 0);
25406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	if (cso->depth.enabled) {
25506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_method(so, tesla, NV50TCL_DEPTH_TEST_ENABLE, 1);
25606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, 1);
25706bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_method(so, tesla, NV50TCL_DEPTH_TEST_FUNC, 1);
25806bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, nvgl_comparison_op(cso->depth.func));
25906bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	} else {
26006bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_method(so, tesla, NV50TCL_DEPTH_TEST_ENABLE, 1);
26106bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, 0);
26206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	}
26306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs
26406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	if (cso->stencil[0].enabled) {
26506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_method(so, tesla, NV50TCL_STENCIL_FRONT_ENABLE, 5);
26606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, 1);
26706bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, nvgl_stencil_op(cso->stencil[0].fail_op));
26806bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, nvgl_stencil_op(cso->stencil[0].zfail_op));
26906bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, nvgl_stencil_op(cso->stencil[0].zpass_op));
27006bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, nvgl_comparison_op(cso->stencil[0].func));
27106bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_method(so, tesla, NV50TCL_STENCIL_FRONT_FUNC_REF, 3);
27206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, cso->stencil[0].ref_value);
27306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, cso->stencil[0].write_mask);
27406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, cso->stencil[0].value_mask);
27506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	} else {
27606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_method(so, tesla, NV50TCL_STENCIL_FRONT_ENABLE, 1);
27706bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, 0);
27806bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	}
27906bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs
28006bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	if (cso->stencil[1].enabled) {
28106bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_method(so, tesla, NV50TCL_STENCIL_BACK_ENABLE, 8);
28206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, 1);
28306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, nvgl_stencil_op(cso->stencil[1].fail_op));
28406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, nvgl_stencil_op(cso->stencil[1].zfail_op));
28506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, nvgl_stencil_op(cso->stencil[1].zpass_op));
28606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, nvgl_comparison_op(cso->stencil[1].func));
28706bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, cso->stencil[1].ref_value);
28806bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, cso->stencil[1].write_mask);
28906bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, cso->stencil[1].value_mask);
29006bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	} else {
29106bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_method(so, tesla, NV50TCL_STENCIL_BACK_ENABLE, 1);
29206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, 0);
29306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	}
29406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs
29506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	if (cso->alpha.enabled) {
29606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_method(so, tesla, NV50TCL_ALPHA_TEST_ENABLE, 1);
29706bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, 1);
29806bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_method(so, tesla, NV50TCL_ALPHA_TEST_REF, 2);
29906bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, fui(cso->alpha.ref));
30006bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, nvgl_comparison_op(cso->alpha.func));
30106bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	} else {
30206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_method(so, tesla, NV50TCL_ALPHA_TEST_ENABLE, 1);
30306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, 0);
30406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	}
30506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs
30606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	zsa->pipe = *cso;
30706bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	so_ref(so, &zsa->so);
30806bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	return (void *)zsa;
30947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
31047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
31147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void
3123af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggsnv50_depth_stencil_alpha_state_bind(struct pipe_context *pipe, void *hwcso)
31347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
31406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	struct nv50_context *nv50 = nv50_context(pipe);
31506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs
31606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	nv50->zsa = hwcso;
31706bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	nv50->dirty |= NV50_NEW_ZSA;
31847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
31947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
32047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void
3213af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggsnv50_depth_stencil_alpha_state_delete(struct pipe_context *pipe, void *hwcso)
32247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
32306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	struct nv50_zsa_stateobj *zsa = hwcso;
32406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs
32506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	so_ref(NULL, &zsa->so);
32606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	FREE(zsa);
32747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
32847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
32947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void *
33047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_vp_state_create(struct pipe_context *pipe,
33147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs		     const struct pipe_shader_state *cso)
33247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
3339bac4c7268cdbc79a1ce2d05779ed05c32e1e57bBen Skeggs	return NULL;
33447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
33547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
33647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void
33747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_vp_state_bind(struct pipe_context *pipe, void *hwcso)
33847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
33947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
34047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
34147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void
34247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_vp_state_delete(struct pipe_context *pipe, void *hwcso)
34347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
34447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
34547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
34647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void *
34747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_fp_state_create(struct pipe_context *pipe,
34847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs		     const struct pipe_shader_state *cso)
34947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
3509bac4c7268cdbc79a1ce2d05779ed05c32e1e57bBen Skeggs	return NULL;
35147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
35247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
35347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void
35447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_fp_state_bind(struct pipe_context *pipe, void *hwcso)
35547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
35647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
35747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
35847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void
35947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_fp_state_delete(struct pipe_context *pipe, void *hwcso)
36047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
36147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
36247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
36347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void
36447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_blend_color(struct pipe_context *pipe,
36547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs		     const struct pipe_blend_color *bcol)
36647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
3672fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs	struct nv50_context *nv50 = nv50_context(pipe);
3682fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs
3692fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs	nv50->blend_colour = *bcol;
3702fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs	nv50->dirty |= NV50_NEW_BLEND_COLOUR;
37147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
37247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
37347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void
37447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_clip_state(struct pipe_context *pipe,
37547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs		    const struct pipe_clip_state *clip)
37647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
37747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
37847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
37947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void
38047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_constant_buffer(struct pipe_context *pipe, uint shader, uint index,
38147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs			 const struct pipe_constant_buffer *buf )
38247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
38347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
38447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
38547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void
38647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_framebuffer_state(struct pipe_context *pipe,
38747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs			   const struct pipe_framebuffer_state *fb)
38847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
38947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
39047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
39147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void
39247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_polygon_stipple(struct pipe_context *pipe,
39347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs			 const struct pipe_poly_stipple *stipple)
39447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
3952fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs	struct nv50_context *nv50 = nv50_context(pipe);
3962fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs
3972fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs	nv50->stipple = *stipple;
3982fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs	nv50->dirty |= NV50_NEW_STIPPLE;
39947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
40047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
40147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void
40247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_scissor_state(struct pipe_context *pipe,
40347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs		       const struct pipe_scissor_state *s)
40447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
4052fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs	struct nv50_context *nv50 = nv50_context(pipe);
4062fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs
4072fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs	nv50->scissor = *s;
4082fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs	nv50->dirty |= NV50_NEW_SCISSOR;
40947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
41047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
41147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void
41247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_viewport_state(struct pipe_context *pipe,
41347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs			const struct pipe_viewport_state *vpt)
41447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
4152fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs	struct nv50_context *nv50 = nv50_context(pipe);
4162fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs
4172fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs	nv50->viewport = *vpt;
4182fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs	nv50->dirty |= NV50_NEW_VIEWPORT;
41947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
42047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
42147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void
42247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_vertex_buffer(struct pipe_context *pipe, unsigned index,
42347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs		       const struct pipe_vertex_buffer *vb)
42447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
42547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
42647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
42747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void
42847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_vertex_element(struct pipe_context *pipe, unsigned index,
42947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs			const struct pipe_vertex_element *ve)
43047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
43147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
43247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
43347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsvoid
43447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_init_state_functions(struct nv50_context *nv50)
43547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
43647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.create_blend_state = nv50_blend_state_create;
43747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.bind_blend_state = nv50_blend_state_bind;
43847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.delete_blend_state = nv50_blend_state_delete;
43947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
44047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.create_sampler_state = nv50_sampler_state_create;
44147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.bind_sampler_state = nv50_sampler_state_bind;
44247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.delete_sampler_state = nv50_sampler_state_delete;
44379bca7dd884da33c06ecd3dabb893f9cfed1aaedBen Skeggs	nv50->pipe.set_sampler_texture = nv50_set_sampler_texture;
44447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
44547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.create_rasterizer_state = nv50_rasterizer_state_create;
44647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.bind_rasterizer_state = nv50_rasterizer_state_bind;
44747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.delete_rasterizer_state = nv50_rasterizer_state_delete;
44847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
4493af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs	nv50->pipe.create_depth_stencil_alpha_state =
4503af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs		nv50_depth_stencil_alpha_state_create;
4513af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs	nv50->pipe.bind_depth_stencil_alpha_state =
4523af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs		nv50_depth_stencil_alpha_state_bind;
4533af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs	nv50->pipe.delete_depth_stencil_alpha_state =
4543af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs		nv50_depth_stencil_alpha_state_delete;
45547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
45647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.create_vs_state = nv50_vp_state_create;
45747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.bind_vs_state = nv50_vp_state_bind;
45847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.delete_vs_state = nv50_vp_state_delete;
45947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
46047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.create_fs_state = nv50_fp_state_create;
46147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.bind_fs_state = nv50_fp_state_bind;
46247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.delete_fs_state = nv50_fp_state_delete;
46347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
46447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.set_blend_color = nv50_set_blend_color;
46547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.set_clip_state = nv50_set_clip_state;
46647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.set_constant_buffer = nv50_set_constant_buffer;
46747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.set_framebuffer_state = nv50_set_framebuffer_state;
46847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.set_polygon_stipple = nv50_set_polygon_stipple;
46947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.set_scissor_state = nv50_set_scissor_state;
47047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.set_viewport_state = nv50_set_viewport_state;
47147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
47247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.set_vertex_buffer = nv50_set_vertex_buffer;
47347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.set_vertex_element = nv50_set_vertex_element;
47447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
47547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
476