nv50_state.c revision 716c1cd2ecbc1e86c0fd747c9fa9e095ded5fd5d
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
939a4938d7033101122b627786273ff37229b5558aBen Skeggsnv50_sampler_state_bind(struct pipe_context *pipe, unsigned nr, void **sampler)
9447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
9547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
9647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
9747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void
9847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_sampler_state_delete(struct pipe_context *pipe, void *hwcso)
9947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
10047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
10147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
10279bca7dd884da33c06ecd3dabb893f9cfed1aaedBen Skeggsstatic void
1039a4938d7033101122b627786273ff37229b5558aBen Skeggsnv50_set_sampler_texture(struct pipe_context *pipe, unsigned nr,
1049a4938d7033101122b627786273ff37229b5558aBen Skeggs			 struct pipe_texture **pt)
10579bca7dd884da33c06ecd3dabb893f9cfed1aaedBen Skeggs{
10679bca7dd884da33c06ecd3dabb893f9cfed1aaedBen Skeggs}
10779bca7dd884da33c06ecd3dabb893f9cfed1aaedBen Skeggs
10847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void *
10947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_rasterizer_state_create(struct pipe_context *pipe,
11047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs			     const struct pipe_rasterizer_state *cso)
11147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
112cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	struct nouveau_stateobj *so = so_new(64, 0);
113cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	struct nouveau_grobj *tesla = nv50_context(pipe)->screen->tesla;
114cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	struct nv50_rasterizer_stateobj *rso =
115cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		CALLOC_STRUCT(nv50_rasterizer_stateobj);
116cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs
117cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	/*XXX: ignored
118cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	 * 	- light_twosize
119cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	 * 	- point_smooth
120cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	 * 	- multisample
121cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	 * 	- point_sprite / sprite_coord_mode
122cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	 */
123cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs
124cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	so_method(so, tesla, NV50TCL_SHADE_MODEL, 1);
125cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	so_data  (so, cso->flatshade ? NV50TCL_SHADE_MODEL_FLAT :
126cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs				       NV50TCL_SHADE_MODEL_SMOOTH);
127cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs
128cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	so_method(so, tesla, NV50TCL_LINE_WIDTH, 1);
129cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	so_data  (so, fui(cso->line_width));
130cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	so_method(so, tesla, NV50TCL_LINE_SMOOTH_ENABLE, 1);
131cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	so_data  (so, cso->line_smooth ? 1 : 0);
132cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	if (cso->line_stipple_enable) {
133cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_method(so, tesla, NV50TCL_LINE_STIPPLE_ENABLE, 1);
134cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_data  (so, 1);
135cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_method(so, tesla, NV50TCL_LINE_STIPPLE_PATTERN, 1);
136cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_data  (so, (cso->line_stipple_pattern << 16) |
137cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs			       cso->line_stipple_factor);
138cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	} else {
139cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_method(so, tesla, NV50TCL_LINE_STIPPLE_ENABLE, 1);
140cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_data  (so, 0);
141cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	}
142cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs
143cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	so_method(so, tesla, NV50TCL_POINT_SIZE, 1);
144cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	so_data  (so, fui(cso->point_size));
145cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs
146cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	so_method(so, tesla, NV50TCL_POLYGON_MODE_FRONT, 3);
147cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	if (cso->front_winding == PIPE_WINDING_CCW) {
148cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_data(so, nvgl_polygon_mode(cso->fill_ccw));
149cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_data(so, nvgl_polygon_mode(cso->fill_cw));
150cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	} else {
151cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_data(so, nvgl_polygon_mode(cso->fill_cw));
152cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_data(so, nvgl_polygon_mode(cso->fill_ccw));
153cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	}
154cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	so_data(so, cso->poly_smooth ? 1 : 0);
155cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs
156cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	so_method(so, tesla, NV50TCL_CULL_FACE_ENABLE, 3);
157cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	so_data  (so, cso->cull_mode != PIPE_WINDING_NONE);
158cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	if (cso->front_winding == PIPE_WINDING_CCW) {
159cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_data(so, NV50TCL_FRONT_FACE_CCW);
160cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		switch (cso->cull_mode) {
161cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		case PIPE_WINDING_CCW:
162cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs			so_data(so, NV50TCL_CULL_FACE_FRONT);
163cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs			break;
164cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		case PIPE_WINDING_CW:
165cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs			so_data(so, NV50TCL_CULL_FACE_BACK);
166cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs			break;
167cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		case PIPE_WINDING_BOTH:
168cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs			so_data(so, NV50TCL_CULL_FACE_FRONT_AND_BACK);
169cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs			break;
170cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		default:
171cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs			so_data(so, NV50TCL_CULL_FACE_BACK);
172cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs			break;
173cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		}
174cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	} else {
175cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_data(so, NV50TCL_FRONT_FACE_CW);
176cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		switch (cso->cull_mode) {
177cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		case PIPE_WINDING_CCW:
178cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs			so_data(so, NV50TCL_CULL_FACE_BACK);
179cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs			break;
180cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		case PIPE_WINDING_CW:
181cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs			so_data(so, NV50TCL_CULL_FACE_FRONT);
182cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs			break;
183cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		case PIPE_WINDING_BOTH:
184cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs			so_data(so, NV50TCL_CULL_FACE_FRONT_AND_BACK);
185cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs			break;
186cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		default:
187cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs			so_data(so, NV50TCL_CULL_FACE_BACK);
188cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs			break;
189cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		}
190cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	}
191cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs
192cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	so_method(so, tesla, NV50TCL_POLYGON_STIPPLE_ENABLE, 1);
193cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	so_data  (so, cso->poly_stipple_enable ? 1 : 0);
194cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs
195cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	so_method(so, tesla, NV50TCL_POLYGON_OFFSET_POINT_ENABLE, 3);
196cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	if ((cso->offset_cw && cso->fill_cw == PIPE_POLYGON_MODE_POINT) ||
197cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	    (cso->offset_ccw && cso->fill_ccw == PIPE_POLYGON_MODE_POINT))
198cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_data(so, 1);
199cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	else
200cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_data(so, 0);
201cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	if ((cso->offset_cw && cso->fill_cw == PIPE_POLYGON_MODE_LINE) ||
202cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	    (cso->offset_ccw && cso->fill_ccw == PIPE_POLYGON_MODE_LINE))
203cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_data(so, 1);
204cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	else
205cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_data(so, 0);
206cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	if ((cso->offset_cw && cso->fill_cw == PIPE_POLYGON_MODE_FILL) ||
207cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	    (cso->offset_ccw && cso->fill_ccw == PIPE_POLYGON_MODE_FILL))
208cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_data(so, 1);
209cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	else
210cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_data(so, 0);
211cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs
212cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	if (cso->offset_cw || cso->offset_ccw) {
213cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_method(so, tesla, NV50TCL_POLYGON_OFFSET_FACTOR, 1);
214cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_data  (so, fui(cso->offset_scale));
215cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_method(so, tesla, NV50TCL_POLYGON_OFFSET_UNITS, 1);
216cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs		so_data  (so, fui(cso->offset_units * 2));
217cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	}
218cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs
219cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	rso->pipe = *cso;
220cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	so_ref(so, &rso->so);
221cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	return (void *)rso;
22247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
22347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
22447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void
22547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_rasterizer_state_bind(struct pipe_context *pipe, void *hwcso)
22647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
227cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	struct nv50_context *nv50 = nv50_context(pipe);
228cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs
229cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	nv50->rasterizer = hwcso;
230cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	nv50->dirty |= NV50_NEW_RASTERIZER;
23147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
23247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
23347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void
23447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_rasterizer_state_delete(struct pipe_context *pipe, void *hwcso)
23547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
236cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	struct nv50_rasterizer_stateobj *rso = hwcso;
237cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs
238cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	so_ref(NULL, &rso->so);
239cd85dc1e5dfa37cb9bee696e5e18332e3f1d65a1Ben Skeggs	FREE(rso);
24047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
24147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
24247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void *
2433af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggsnv50_depth_stencil_alpha_state_create(struct pipe_context *pipe,
2443af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs			const struct pipe_depth_stencil_alpha_state *cso)
24547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
24606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	struct nouveau_grobj *tesla = nv50_context(pipe)->screen->tesla;
24706bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	struct nv50_zsa_stateobj *zsa = CALLOC_STRUCT(nv50_zsa_stateobj);
24806bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	struct nouveau_stateobj *so = so_new(64, 0);
24906bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs
25006bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	so_method(so, tesla, NV50TCL_DEPTH_WRITE_ENABLE, 1);
251f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs	so_data  (so, 0); //cso->depth.writemask ? 1 : 0);
252f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs	if (0 && cso->depth.enabled) {
25306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_method(so, tesla, NV50TCL_DEPTH_TEST_ENABLE, 1);
25406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, 1);
25506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_method(so, tesla, NV50TCL_DEPTH_TEST_FUNC, 1);
25606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, nvgl_comparison_op(cso->depth.func));
25706bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	} else {
25806bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_method(so, tesla, NV50TCL_DEPTH_TEST_ENABLE, 1);
25906bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, 0);
26006bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	}
26106bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs
26206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	if (cso->stencil[0].enabled) {
26306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_method(so, tesla, NV50TCL_STENCIL_FRONT_ENABLE, 5);
26406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, 1);
26506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, nvgl_stencil_op(cso->stencil[0].fail_op));
26606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, nvgl_stencil_op(cso->stencil[0].zfail_op));
26706bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, nvgl_stencil_op(cso->stencil[0].zpass_op));
26806bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, nvgl_comparison_op(cso->stencil[0].func));
26906bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_method(so, tesla, NV50TCL_STENCIL_FRONT_FUNC_REF, 3);
27006bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, cso->stencil[0].ref_value);
27106bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, cso->stencil[0].write_mask);
27206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, cso->stencil[0].value_mask);
27306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	} else {
27406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_method(so, tesla, NV50TCL_STENCIL_FRONT_ENABLE, 1);
27506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, 0);
27606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	}
27706bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs
27806bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	if (cso->stencil[1].enabled) {
27906bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_method(so, tesla, NV50TCL_STENCIL_BACK_ENABLE, 8);
28006bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, 1);
28106bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, nvgl_stencil_op(cso->stencil[1].fail_op));
28206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, nvgl_stencil_op(cso->stencil[1].zfail_op));
28306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, nvgl_stencil_op(cso->stencil[1].zpass_op));
28406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, nvgl_comparison_op(cso->stencil[1].func));
28506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, cso->stencil[1].ref_value);
28606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, cso->stencil[1].write_mask);
28706bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, cso->stencil[1].value_mask);
28806bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	} else {
28906bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_method(so, tesla, NV50TCL_STENCIL_BACK_ENABLE, 1);
29006bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, 0);
29106bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	}
29206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs
29306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	if (cso->alpha.enabled) {
29406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_method(so, tesla, NV50TCL_ALPHA_TEST_ENABLE, 1);
29506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, 1);
29606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_method(so, tesla, NV50TCL_ALPHA_TEST_REF, 2);
29706bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, fui(cso->alpha.ref));
29806bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, nvgl_comparison_op(cso->alpha.func));
29906bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	} else {
30006bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_method(so, tesla, NV50TCL_ALPHA_TEST_ENABLE, 1);
30106bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs		so_data  (so, 0);
30206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	}
30306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs
30406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	zsa->pipe = *cso;
30506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	so_ref(so, &zsa->so);
30606bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	return (void *)zsa;
30747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
30847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
30947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void
3103af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggsnv50_depth_stencil_alpha_state_bind(struct pipe_context *pipe, void *hwcso)
31147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
31206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	struct nv50_context *nv50 = nv50_context(pipe);
31306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs
31406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	nv50->zsa = hwcso;
31506bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	nv50->dirty |= NV50_NEW_ZSA;
31647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
31747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
31847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void
3193af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggsnv50_depth_stencil_alpha_state_delete(struct pipe_context *pipe, void *hwcso)
32047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
32106bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	struct nv50_zsa_stateobj *zsa = hwcso;
32206bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs
32306bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	so_ref(NULL, &zsa->so);
32406bd7d78b979df66915b161157f2b6b1c09ad285Ben Skeggs	FREE(zsa);
32547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
32647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
32747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void *
32847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_vp_state_create(struct pipe_context *pipe,
32947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs		     const struct pipe_shader_state *cso)
33047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
331f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs	struct nv50_program *p = CALLOC_STRUCT(nv50_program);
332f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs
333f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs	p->pipe = *cso;
334f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs	tgsi_scan_shader(p->pipe.tokens, &p->info);
335f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs	return (void *)p;
33647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
33747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
33847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void
33947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_vp_state_bind(struct pipe_context *pipe, void *hwcso)
34047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
341f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs	struct nv50_context *nv50 = nv50_context(pipe);
342f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs
343f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs	nv50->vertprog = hwcso;
344f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs	nv50->dirty |= NV50_NEW_VERTPROG;
34547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
34647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
34747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void
34847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_vp_state_delete(struct pipe_context *pipe, void *hwcso)
34947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
350f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs	struct nv50_context *nv50 = nv50_context(pipe);
351f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs
352f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs	nv50_program_destroy(nv50, hwcso);
353f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs	FREE(hwcso);
35447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
35547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
35647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void *
35747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_fp_state_create(struct pipe_context *pipe,
35847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs		     const struct pipe_shader_state *cso)
35947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
360f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs	struct nv50_program *p = CALLOC_STRUCT(nv50_program);
361f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs
362f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs	p->pipe = *cso;
363f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs	tgsi_scan_shader(p->pipe.tokens, &p->info);
364f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs	return (void *)p;
36547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
36647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
36747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void
36847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_fp_state_bind(struct pipe_context *pipe, void *hwcso)
36947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
370f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs	struct nv50_context *nv50 = nv50_context(pipe);
371f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs
372f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs	nv50->fragprog = hwcso;
373f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs	nv50->dirty |= NV50_NEW_FRAGPROG;
37447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
37547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
37647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void
37747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_fp_state_delete(struct pipe_context *pipe, void *hwcso)
37847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
379f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs	struct nv50_context *nv50 = nv50_context(pipe);
380f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs
381f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs	nv50_program_destroy(nv50, hwcso);
382f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs	FREE(hwcso);
38347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
38447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
38547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void
38647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_blend_color(struct pipe_context *pipe,
38747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs		     const struct pipe_blend_color *bcol)
38847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
3892fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs	struct nv50_context *nv50 = nv50_context(pipe);
3902fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs
3912fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs	nv50->blend_colour = *bcol;
3922fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs	nv50->dirty |= NV50_NEW_BLEND_COLOUR;
39347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
39447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
39547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void
39647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_clip_state(struct pipe_context *pipe,
39747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs		    const struct pipe_clip_state *clip)
39847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
39947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
40047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
40147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void
40247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_constant_buffer(struct pipe_context *pipe, uint shader, uint index,
40347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs			 const struct pipe_constant_buffer *buf )
40447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
405f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs	struct nv50_context *nv50 = nv50_context(pipe);
406f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs
407f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs	if (shader == PIPE_SHADER_VERTEX) {
408f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs		nv50->constbuf[PIPE_SHADER_VERTEX] = buf->buffer;
409716c1cd2ecbc1e86c0fd747c9fa9e095ded5fd5dBen Skeggs		nv50->dirty |= NV50_NEW_VERTPROG_CB;
410f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs	} else
411f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs	if (shader == PIPE_SHADER_FRAGMENT) {
412f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs		nv50->constbuf[PIPE_SHADER_FRAGMENT] = buf->buffer;
413716c1cd2ecbc1e86c0fd747c9fa9e095ded5fd5dBen Skeggs		nv50->dirty |= NV50_NEW_FRAGPROG_CB;
414f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs	}
41547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
41647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
41747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void
41847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_framebuffer_state(struct pipe_context *pipe,
41947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs			   const struct pipe_framebuffer_state *fb)
42047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
421cd9ed05aec9d1d9614973165fd13647ba2e1b8c7Ben Skeggs	struct nv50_context *nv50 = nv50_context(pipe);
422cd9ed05aec9d1d9614973165fd13647ba2e1b8c7Ben Skeggs
423cd9ed05aec9d1d9614973165fd13647ba2e1b8c7Ben Skeggs	nv50->framebuffer = *fb;
424cd9ed05aec9d1d9614973165fd13647ba2e1b8c7Ben Skeggs	nv50->dirty |= NV50_NEW_FRAMEBUFFER;
42547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
42647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
42747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void
42847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_polygon_stipple(struct pipe_context *pipe,
42947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs			 const struct pipe_poly_stipple *stipple)
43047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
4312fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs	struct nv50_context *nv50 = nv50_context(pipe);
4322fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs
4332fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs	nv50->stipple = *stipple;
4342fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs	nv50->dirty |= NV50_NEW_STIPPLE;
43547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
43647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
43747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void
43847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_scissor_state(struct pipe_context *pipe,
43947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs		       const struct pipe_scissor_state *s)
44047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
4412fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs	struct nv50_context *nv50 = nv50_context(pipe);
4422fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs
4432fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs	nv50->scissor = *s;
4442fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs	nv50->dirty |= NV50_NEW_SCISSOR;
44547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
44647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
44747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void
44847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_set_viewport_state(struct pipe_context *pipe,
44947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs			const struct pipe_viewport_state *vpt)
45047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
4512fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs	struct nv50_context *nv50 = nv50_context(pipe);
4522fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs
4532fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs	nv50->viewport = *vpt;
4542fee5f76483feb301546b24c26eea699732ffb57Ben Skeggs	nv50->dirty |= NV50_NEW_VIEWPORT;
45547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
45647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
45747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void
458bbefb541ad94382debb0f7a8daa636729799a31aBen Skeggsnv50_set_vertex_buffers(struct pipe_context *pipe, unsigned count,
459bbefb541ad94382debb0f7a8daa636729799a31aBen Skeggs			const struct pipe_vertex_buffer *vb)
46047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
461f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs	struct nv50_context *nv50 = nv50_context(pipe);
462f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs
463f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs	memcpy(nv50->vtxbuf, vb, sizeof(*vb) * count);
464f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs	nv50->vtxbuf_nr = count;
465f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs
466f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs	nv50->dirty |= NV50_NEW_ARRAYS;
46747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
46847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
46947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsstatic void
470bbefb541ad94382debb0f7a8daa636729799a31aBen Skeggsnv50_set_vertex_elements(struct pipe_context *pipe, unsigned count,
471bbefb541ad94382debb0f7a8daa636729799a31aBen Skeggs			 const struct pipe_vertex_element *ve)
47247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
473f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs	struct nv50_context *nv50 = nv50_context(pipe);
474f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs
475f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs	memcpy(nv50->vtxelt, ve, sizeof(*ve) * count);
476f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs	nv50->vtxelt_nr = count;
477f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs
478f722fd937db2f3cacf1947d538c66528fd16eb89Ben Skeggs	nv50->dirty |= NV50_NEW_ARRAYS;
47947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
48047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
48147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsvoid
48247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_init_state_functions(struct nv50_context *nv50)
48347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{
48447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.create_blend_state = nv50_blend_state_create;
48547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.bind_blend_state = nv50_blend_state_bind;
48647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.delete_blend_state = nv50_blend_state_delete;
48747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
48847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.create_sampler_state = nv50_sampler_state_create;
4899a4938d7033101122b627786273ff37229b5558aBen Skeggs	nv50->pipe.bind_sampler_states = nv50_sampler_state_bind;
49047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.delete_sampler_state = nv50_sampler_state_delete;
4919a4938d7033101122b627786273ff37229b5558aBen Skeggs	nv50->pipe.set_sampler_textures = nv50_set_sampler_texture;
49247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
49347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.create_rasterizer_state = nv50_rasterizer_state_create;
49447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.bind_rasterizer_state = nv50_rasterizer_state_bind;
49547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.delete_rasterizer_state = nv50_rasterizer_state_delete;
49647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
4973af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs	nv50->pipe.create_depth_stencil_alpha_state =
4983af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs		nv50_depth_stencil_alpha_state_create;
4993af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs	nv50->pipe.bind_depth_stencil_alpha_state =
5003af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs		nv50_depth_stencil_alpha_state_bind;
5013af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs	nv50->pipe.delete_depth_stencil_alpha_state =
5023af35c6dfa4db1cbf830731882e61d57741f2898Ben Skeggs		nv50_depth_stencil_alpha_state_delete;
50347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
50447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.create_vs_state = nv50_vp_state_create;
50547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.bind_vs_state = nv50_vp_state_bind;
50647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.delete_vs_state = nv50_vp_state_delete;
50747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
50847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.create_fs_state = nv50_fp_state_create;
50947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.bind_fs_state = nv50_fp_state_bind;
51047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.delete_fs_state = nv50_fp_state_delete;
51147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
51247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.set_blend_color = nv50_set_blend_color;
51347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.set_clip_state = nv50_set_clip_state;
51447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.set_constant_buffer = nv50_set_constant_buffer;
51547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.set_framebuffer_state = nv50_set_framebuffer_state;
51647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.set_polygon_stipple = nv50_set_polygon_stipple;
51747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.set_scissor_state = nv50_set_scissor_state;
51847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs	nv50->pipe.set_viewport_state = nv50_set_viewport_state;
51947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
520bbefb541ad94382debb0f7a8daa636729799a31aBen Skeggs	nv50->pipe.set_vertex_buffers = nv50_set_vertex_buffers;
521bbefb541ad94382debb0f7a8daa636729799a31aBen Skeggs	nv50->pipe.set_vertex_elements = nv50_set_vertex_elements;
52247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs}
52347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs
524