1 #include "pipe/p_state.h"
2 #include "pipe/p_defines.h"
3 #include "pipe/p_util.h"
5 #include "nv30_context.h"
6 #include "nv30_state.h"
9 nv30_blend_state_create(struct pipe_context
*pipe
,
10 const struct pipe_blend_state
*cso
)
12 struct nv30_context
*nv30
= nv30_context(pipe
);
13 struct nouveau_grobj
*rankine
= nv30
->screen
->rankine
;
14 struct nv30_blend_state
*bso
= CALLOC(1, sizeof(*bso
));
15 struct nouveau_stateobj
*so
= so_new(16, 0);
17 if (cso
->blend_enable
) {
18 so_method(so
, rankine
, NV34TCL_BLEND_FUNC_ENABLE
, 3);
20 so_data (so
, (nvgl_blend_func(cso
->alpha_src_factor
) << 16) |
21 nvgl_blend_func(cso
->rgb_src_factor
));
22 so_data (so
, nvgl_blend_func(cso
->alpha_dst_factor
) << 16 |
23 nvgl_blend_func(cso
->rgb_dst_factor
));
24 so_method(so
, rankine
, NV34TCL_BLEND_EQUATION
, 1);
25 so_data (so
, nvgl_blend_eqn(cso
->alpha_func
) << 16 |
26 nvgl_blend_eqn(cso
->rgb_func
));
28 so_method(so
, rankine
, NV34TCL_BLEND_FUNC_ENABLE
, 1);
32 so_method(so
, rankine
, NV34TCL_COLOR_MASK
, 1);
33 so_data (so
, (((cso
->colormask
& PIPE_MASK_A
) ? (0x01 << 24) : 0) |
34 ((cso
->colormask
& PIPE_MASK_R
) ? (0x01 << 16) : 0) |
35 ((cso
->colormask
& PIPE_MASK_G
) ? (0x01 << 8) : 0) |
36 ((cso
->colormask
& PIPE_MASK_B
) ? (0x01 << 0) : 0)));
38 if (cso
->logicop_enable
) {
39 so_method(so
, rankine
, NV34TCL_COLOR_LOGIC_OP_ENABLE
, 2);
41 so_data (so
, nvgl_logicop_func(cso
->logicop_func
));
43 so_method(so
, rankine
, NV34TCL_COLOR_LOGIC_OP_ENABLE
, 1);
47 so_method(so
, rankine
, NV34TCL_DITHER_ENABLE
, 1);
48 so_data (so
, cso
->dither
? 1 : 0);
56 nv30_blend_state_bind(struct pipe_context
*pipe
, void *hwcso
)
58 struct nv30_context
*nv30
= nv30_context(pipe
);
61 nv30
->dirty
|= NV30_NEW_BLEND
;
65 nv30_blend_state_delete(struct pipe_context
*pipe
, void *hwcso
)
67 struct nv30_blend_state
*bso
= hwcso
;
69 so_ref(NULL
, &bso
->so
);
74 static INLINE
unsigned
75 wrap_mode(unsigned wrap
) {
79 case PIPE_TEX_WRAP_REPEAT
:
80 ret
= NV34TCL_TX_WRAP_S_REPEAT
;
82 case PIPE_TEX_WRAP_MIRROR_REPEAT
:
83 ret
= NV34TCL_TX_WRAP_S_MIRRORED_REPEAT
;
85 case PIPE_TEX_WRAP_CLAMP_TO_EDGE
:
86 ret
= NV34TCL_TX_WRAP_S_CLAMP_TO_EDGE
;
88 case PIPE_TEX_WRAP_CLAMP_TO_BORDER
:
89 ret
= NV34TCL_TX_WRAP_S_CLAMP_TO_BORDER
;
91 case PIPE_TEX_WRAP_CLAMP
:
92 ret
= NV34TCL_TX_WRAP_S_CLAMP
;
94 /* case PIPE_TEX_WRAP_MIRROR_CLAMP_TO_EDGE:
95 ret = NV34TCL_TX_WRAP_S_MIRROR_CLAMP_TO_EDGE;
97 case PIPE_TEX_WRAP_MIRROR_CLAMP_TO_BORDER:
98 ret = NV34TCL_TX_WRAP_S_MIRROR_CLAMP_TO_BORDER;
100 case PIPE_TEX_WRAP_MIRROR_CLAMP:
101 ret = NV34TCL_TX_WRAP_S_MIRROR_CLAMP;
104 NOUVEAU_ERR("unknown wrap mode: %d\n", wrap
);
105 ret
= NV34TCL_TX_WRAP_S_REPEAT
;
109 return ret
>> NV34TCL_TX_WRAP_S_SHIFT
;
113 nv30_sampler_state_create(struct pipe_context
*pipe
,
114 const struct pipe_sampler_state
*cso
)
116 struct nv30_sampler_state
*ps
;
119 ps
= malloc(sizeof(struct nv30_sampler_state
));
122 if (!cso
->normalized_coords
)
123 ps
->fmt
|= NV34TCL_TX_FORMAT_RECT
;
125 ps
->wrap
= ((wrap_mode(cso
->wrap_s
) << NV34TCL_TX_WRAP_S_SHIFT
) |
126 (wrap_mode(cso
->wrap_t
) << NV34TCL_TX_WRAP_T_SHIFT
) |
127 (wrap_mode(cso
->wrap_r
) << NV34TCL_TX_WRAP_R_SHIFT
));
130 if (cso
->max_anisotropy
>= 2.0) {
131 /* no idea, binary driver sets it, works without it.. meh.. */
132 ps
->wrap
|= (1 << 5);
134 /* if (cso->max_anisotropy >= 16.0) {
135 ps->en |= NV34TCL_TX_ENABLE_ANISO_16X;
137 if (cso->max_anisotropy >= 12.0) {
138 ps->en |= NV34TCL_TX_ENABLE_ANISO_12X;
140 if (cso->max_anisotropy >= 10.0) {
141 ps->en |= NV34TCL_TX_ENABLE_ANISO_10X;
143 if (cso->max_anisotropy >= 8.0) {
144 ps->en |= NV34TCL_TX_ENABLE_ANISO_8X;
146 if (cso->max_anisotropy >= 6.0) {
147 ps->en |= NV34TCL_TX_ENABLE_ANISO_6X;
149 if (cso->max_anisotropy >= 4.0) {
150 ps->en |= NV34TCL_TX_ENABLE_ANISO_4X;
152 ps->en |= NV34TCL_TX_ENABLE_ANISO_2X;
156 switch (cso
->mag_img_filter
) {
157 case PIPE_TEX_FILTER_LINEAR
:
158 filter
|= NV34TCL_TX_FILTER_MAGNIFY_LINEAR
;
160 case PIPE_TEX_FILTER_NEAREST
:
162 filter
|= NV34TCL_TX_FILTER_MAGNIFY_NEAREST
;
166 switch (cso
->min_img_filter
) {
167 case PIPE_TEX_FILTER_LINEAR
:
168 switch (cso
->min_mip_filter
) {
169 case PIPE_TEX_MIPFILTER_NEAREST
:
170 filter
|= NV34TCL_TX_FILTER_MINIFY_LINEAR_MIPMAP_NEAREST
;
172 case PIPE_TEX_MIPFILTER_LINEAR
:
173 filter
|= NV34TCL_TX_FILTER_MINIFY_LINEAR_MIPMAP_LINEAR
;
175 case PIPE_TEX_MIPFILTER_NONE
:
177 filter
|= NV34TCL_TX_FILTER_MINIFY_LINEAR
;
181 case PIPE_TEX_FILTER_NEAREST
:
183 switch (cso
->min_mip_filter
) {
184 case PIPE_TEX_MIPFILTER_NEAREST
:
185 filter
|= NV34TCL_TX_FILTER_MINIFY_NEAREST_MIPMAP_NEAREST
;
187 case PIPE_TEX_MIPFILTER_LINEAR
:
188 filter
|= NV34TCL_TX_FILTER_MINIFY_NEAREST_MIPMAP_LINEAR
;
190 case PIPE_TEX_MIPFILTER_NONE
:
192 filter
|= NV34TCL_TX_FILTER_MINIFY_NEAREST
;
200 /* if (cso->compare_mode == PIPE_TEX_COMPARE_R_TO_TEXTURE) {
201 switch (cso->compare_func) {
202 case PIPE_FUNC_NEVER:
203 ps->wrap |= NV34TCL_TX_WRAP_RCOMP_NEVER;
205 case PIPE_FUNC_GREATER:
206 ps->wrap |= NV34TCL_TX_WRAP_RCOMP_GREATER;
208 case PIPE_FUNC_EQUAL:
209 ps->wrap |= NV34TCL_TX_WRAP_RCOMP_EQUAL;
211 case PIPE_FUNC_GEQUAL:
212 ps->wrap |= NV34TCL_TX_WRAP_RCOMP_GEQUAL;
215 ps->wrap |= NV34TCL_TX_WRAP_RCOMP_LESS;
217 case PIPE_FUNC_NOTEQUAL:
218 ps->wrap |= NV34TCL_TX_WRAP_RCOMP_NOTEQUAL;
220 case PIPE_FUNC_LEQUAL:
221 ps->wrap |= NV34TCL_TX_WRAP_RCOMP_LEQUAL;
223 case PIPE_FUNC_ALWAYS:
224 ps->wrap |= NV34TCL_TX_WRAP_RCOMP_ALWAYS;
231 ps
->bcol
= ((float_to_ubyte(cso
->border_color
[3]) << 24) |
232 (float_to_ubyte(cso
->border_color
[0]) << 16) |
233 (float_to_ubyte(cso
->border_color
[1]) << 8) |
234 (float_to_ubyte(cso
->border_color
[2]) << 0));
240 nv30_sampler_state_bind(struct pipe_context
*pipe
, unsigned nr
, void **sampler
)
242 struct nv30_context
*nv30
= nv30_context(pipe
);
249 for (unit
= 0; unit
< nr
; unit
++) {
250 nv30
->tex_sampler
[unit
] = sampler
[unit
];
251 nv30
->dirty_samplers
|= (1 << unit
);
256 nv30_sampler_state_delete(struct pipe_context
*pipe
, void *hwcso
)
262 nv30_set_sampler_texture(struct pipe_context
*pipe
, unsigned nr
,
263 struct pipe_texture
**miptree
)
265 struct nv30_context
*nv30
= nv30_context(pipe
);
268 for (unit
= 0; unit
< nr
; unit
++) {
269 nv30
->tex_miptree
[unit
] = (struct nv30_miptree
*)miptree
[unit
];
270 nv30
->dirty_samplers
|= (1 << unit
);
275 nv30_rasterizer_state_create(struct pipe_context
*pipe
,
276 const struct pipe_rasterizer_state
*cso
)
278 struct nv30_context
*nv30
= nv30_context(pipe
);
279 struct nv30_rasterizer_state
*rsso
= CALLOC(1, sizeof(*rsso
));
280 struct nouveau_stateobj
*so
= so_new(32, 0);
281 struct nouveau_grobj
*rankine
= nv30
->screen
->rankine
;
289 so_method(so
, rankine
, NV34TCL_SHADE_MODEL
, 1);
290 so_data (so
, cso
->flatshade
? NV34TCL_SHADE_MODEL_FLAT
:
291 NV34TCL_SHADE_MODEL_SMOOTH
);
293 so_method(so
, rankine
, NV34TCL_LINE_WIDTH
, 2);
294 so_data (so
, (unsigned char)(cso
->line_width
* 8.0) & 0xff);
295 so_data (so
, cso
->line_smooth
? 1 : 0);
296 so_method(so
, rankine
, NV34TCL_LINE_STIPPLE_ENABLE
, 2);
297 so_data (so
, cso
->line_stipple_enable
? 1 : 0);
298 so_data (so
, (cso
->line_stipple_pattern
<< 16) |
299 cso
->line_stipple_factor
);
301 so_method(so
, rankine
, NV34TCL_POINT_SIZE
, 1);
302 so_data (so
, fui(cso
->point_size
));
304 so_method(so
, rankine
, NV34TCL_POLYGON_MODE_FRONT
, 6);
305 if (cso
->front_winding
== PIPE_WINDING_CCW
) {
306 so_data(so
, nvgl_polygon_mode(cso
->fill_ccw
));
307 so_data(so
, nvgl_polygon_mode(cso
->fill_cw
));
308 switch (cso
->cull_mode
) {
309 case PIPE_WINDING_CCW
:
310 so_data(so
, NV34TCL_CULL_FACE_FRONT
);
312 case PIPE_WINDING_CW
:
313 so_data(so
, NV34TCL_CULL_FACE_BACK
);
315 case PIPE_WINDING_BOTH
:
316 so_data(so
, NV34TCL_CULL_FACE_FRONT_AND_BACK
);
319 so_data(so
, NV34TCL_CULL_FACE_BACK
);
322 so_data(so
, NV34TCL_FRONT_FACE_CCW
);
324 so_data(so
, nvgl_polygon_mode(cso
->fill_cw
));
325 so_data(so
, nvgl_polygon_mode(cso
->fill_ccw
));
326 switch (cso
->cull_mode
) {
327 case PIPE_WINDING_CCW
:
328 so_data(so
, NV34TCL_CULL_FACE_BACK
);
330 case PIPE_WINDING_CW
:
331 so_data(so
, NV34TCL_CULL_FACE_FRONT
);
333 case PIPE_WINDING_BOTH
:
334 so_data(so
, NV34TCL_CULL_FACE_FRONT_AND_BACK
);
337 so_data(so
, NV34TCL_CULL_FACE_BACK
);
340 so_data(so
, NV34TCL_FRONT_FACE_CW
);
342 so_data(so
, cso
->poly_smooth
? 1 : 0);
343 so_data(so
, (cso
->cull_mode
!= PIPE_WINDING_NONE
) ? 1 : 0);
345 so_method(so
, rankine
, NV34TCL_POLYGON_STIPPLE_ENABLE
, 1);
346 so_data (so
, cso
->poly_stipple_enable
? 1 : 0);
348 so_method(so
, rankine
, NV34TCL_POLYGON_OFFSET_POINT_ENABLE
, 3);
349 if ((cso
->offset_cw
&& cso
->fill_cw
== PIPE_POLYGON_MODE_POINT
) ||
350 (cso
->offset_ccw
&& cso
->fill_ccw
== PIPE_POLYGON_MODE_POINT
))
354 if ((cso
->offset_cw
&& cso
->fill_cw
== PIPE_POLYGON_MODE_LINE
) ||
355 (cso
->offset_ccw
&& cso
->fill_ccw
== PIPE_POLYGON_MODE_LINE
))
359 if ((cso
->offset_cw
&& cso
->fill_cw
== PIPE_POLYGON_MODE_FILL
) ||
360 (cso
->offset_ccw
&& cso
->fill_ccw
== PIPE_POLYGON_MODE_FILL
))
364 if (cso
->offset_cw
|| cso
->offset_ccw
) {
365 so_method(so
, rankine
, NV34TCL_POLYGON_OFFSET_FACTOR
, 2);
366 so_data (so
, fui(cso
->offset_scale
));
367 so_data (so
, fui(cso
->offset_units
* 2));
370 so_method(so
, rankine
, NV34TCL_POINT_SPRITE
, 1);
371 if (cso
->point_sprite
) {
372 unsigned psctl
= (1 << 0), i
;
374 for (i
= 0; i
< 8; i
++) {
375 if (cso
->sprite_coord_mode
[i
] != PIPE_SPRITE_COORD_NONE
)
376 psctl
|= (1 << (8 + i
));
384 so_ref(so
, &rsso
->so
);
390 nv30_rasterizer_state_bind(struct pipe_context
*pipe
, void *hwcso
)
392 struct nv30_context
*nv30
= nv30_context(pipe
);
394 nv30
->rasterizer
= hwcso
;
395 nv30
->dirty
|= NV30_NEW_RAST
;
396 /*nv30->draw_dirty |= NV30_NEW_RAST;*/
400 nv30_rasterizer_state_delete(struct pipe_context
*pipe
, void *hwcso
)
402 struct nv30_rasterizer_state
*rsso
= hwcso
;
404 so_ref(NULL
, &rsso
->so
);
409 nv30_depth_stencil_alpha_state_create(struct pipe_context
*pipe
,
410 const struct pipe_depth_stencil_alpha_state
*cso
)
412 struct nv30_context
*nv30
= nv30_context(pipe
);
413 struct nv30_zsa_state
*zsaso
= CALLOC(1, sizeof(*zsaso
));
414 struct nouveau_stateobj
*so
= so_new(32, 0);
415 struct nouveau_grobj
*rankine
= nv30
->screen
->rankine
;
417 so_method(so
, rankine
, NV34TCL_DEPTH_FUNC
, 3);
418 so_data (so
, nvgl_comparison_op(cso
->depth
.func
));
419 so_data (so
, cso
->depth
.writemask
? 1 : 0);
420 so_data (so
, cso
->depth
.enabled
? 1 : 0);
422 so_method(so
, rankine
, NV34TCL_ALPHA_FUNC_ENABLE
, 3);
423 so_data (so
, cso
->alpha
.enabled
? 1 : 0);
424 so_data (so
, nvgl_comparison_op(cso
->alpha
.func
));
425 so_data (so
, float_to_ubyte(cso
->alpha
.ref
));
427 if (cso
->stencil
[0].enabled
) {
428 so_method(so
, rankine
, NV34TCL_STENCIL_FRONT_ENABLE
, 8);
429 so_data (so
, cso
->stencil
[0].enabled
? 1 : 0);
430 so_data (so
, cso
->stencil
[0].write_mask
);
431 so_data (so
, nvgl_comparison_op(cso
->stencil
[0].func
));
432 so_data (so
, cso
->stencil
[0].ref_value
);
433 so_data (so
, cso
->stencil
[0].value_mask
);
434 so_data (so
, nvgl_stencil_op(cso
->stencil
[0].fail_op
));
435 so_data (so
, nvgl_stencil_op(cso
->stencil
[0].zfail_op
));
436 so_data (so
, nvgl_stencil_op(cso
->stencil
[0].zpass_op
));
438 so_method(so
, rankine
, NV34TCL_STENCIL_FRONT_ENABLE
, 1);
442 if (cso
->stencil
[1].enabled
) {
443 so_method(so
, rankine
, NV34TCL_STENCIL_BACK_ENABLE
, 8);
444 so_data (so
, cso
->stencil
[1].enabled
? 1 : 0);
445 so_data (so
, cso
->stencil
[1].write_mask
);
446 so_data (so
, nvgl_comparison_op(cso
->stencil
[1].func
));
447 so_data (so
, cso
->stencil
[1].ref_value
);
448 so_data (so
, cso
->stencil
[1].value_mask
);
449 so_data (so
, nvgl_stencil_op(cso
->stencil
[1].fail_op
));
450 so_data (so
, nvgl_stencil_op(cso
->stencil
[1].zfail_op
));
451 so_data (so
, nvgl_stencil_op(cso
->stencil
[1].zpass_op
));
453 so_method(so
, rankine
, NV34TCL_STENCIL_BACK_ENABLE
, 1);
457 so_ref(so
, &zsaso
->so
);
459 return (void *)zsaso
;
463 nv30_depth_stencil_alpha_state_bind(struct pipe_context
*pipe
, void *hwcso
)
465 struct nv30_context
*nv30
= nv30_context(pipe
);
468 nv30
->dirty
|= NV30_NEW_ZSA
;
472 nv30_depth_stencil_alpha_state_delete(struct pipe_context
*pipe
, void *hwcso
)
474 struct nv30_zsa_state
*zsaso
= hwcso
;
476 so_ref(NULL
, &zsaso
->so
);
481 nv30_vp_state_create(struct pipe_context
*pipe
,
482 const struct pipe_shader_state
*cso
)
484 struct nv30_vertex_program
*vp
;
486 vp
= CALLOC(1, sizeof(struct nv30_vertex_program
));
493 nv30_vp_state_bind(struct pipe_context
*pipe
, void *hwcso
)
495 struct nv30_context
*nv30
= nv30_context(pipe
);
496 struct nv30_vertex_program
*vp
= hwcso
;
502 nv30
->vertprog
.current
= vp
;
503 nv30
->dirty
|= NV30_NEW_VERTPROG
;
507 nv30_vp_state_delete(struct pipe_context
*pipe
, void *hwcso
)
509 struct nv30_context
*nv30
= nv30_context(pipe
);
510 struct nv30_vertex_program
*vp
= hwcso
;
512 nv30_vertprog_destroy(nv30
, vp
);
517 nv30_fp_state_create(struct pipe_context
*pipe
,
518 const struct pipe_shader_state
*cso
)
520 struct nv30_fragment_program
*fp
;
522 fp
= CALLOC(1, sizeof(struct nv30_fragment_program
));
529 nv30_fp_state_bind(struct pipe_context
*pipe
, void *hwcso
)
531 struct nv30_context
*nv30
= nv30_context(pipe
);
532 struct nv30_fragment_program
*fp
= hwcso
;
538 nv30
->fragprog
.current
= fp
;
539 nv30
->dirty
|= NV30_NEW_FRAGPROG
;
543 nv30_fp_state_delete(struct pipe_context
*pipe
, void *hwcso
)
545 struct nv30_context
*nv30
= nv30_context(pipe
);
546 struct nv30_fragment_program
*fp
= hwcso
;
548 nv30_fragprog_destroy(nv30
, fp
);
553 nv30_set_blend_color(struct pipe_context
*pipe
,
554 const struct pipe_blend_color
*bcol
)
556 struct nv30_context
*nv30
= nv30_context(pipe
);
558 nv30
->blend_colour
= *bcol
;
559 nv30
->dirty
|= NV30_NEW_BCOL
;
563 nv30_set_clip_state(struct pipe_context
*pipe
,
564 const struct pipe_clip_state
*clip
)
569 nv30_set_constant_buffer(struct pipe_context
*pipe
, uint shader
, uint index
,
570 const struct pipe_constant_buffer
*buf
)
572 struct nv30_context
*nv30
= nv30_context(pipe
);
574 if (shader
== PIPE_SHADER_VERTEX
) {
575 nv30
->vertprog
.constant_buf
= buf
->buffer
;
576 nv30
->dirty
|= NV30_NEW_VERTPROG
;
578 if (shader
== PIPE_SHADER_FRAGMENT
) {
579 nv30
->fragprog
.constant_buf
= buf
->buffer
;
580 nv30
->dirty
|= NV30_NEW_FRAGPROG
;
585 nv30_set_framebuffer_state(struct pipe_context
*pipe
,
586 const struct pipe_framebuffer_state
*fb
)
588 struct nv30_context
*nv30
= nv30_context(pipe
);
590 nv30
->framebuffer
= *fb
;
591 nv30
->dirty
|= NV30_NEW_FB
;
595 nv30_set_polygon_stipple(struct pipe_context
*pipe
,
596 const struct pipe_poly_stipple
*stipple
)
598 struct nv30_context
*nv30
= nv30_context(pipe
);
600 memcpy(nv30
->stipple
, stipple
->stipple
, 4 * 32);
601 nv30
->dirty
|= NV30_NEW_STIPPLE
;
605 nv30_set_scissor_state(struct pipe_context
*pipe
,
606 const struct pipe_scissor_state
*s
)
608 struct nv30_context
*nv30
= nv30_context(pipe
);
611 nv30
->dirty
|= NV30_NEW_SCISSOR
;
615 nv30_set_viewport_state(struct pipe_context
*pipe
,
616 const struct pipe_viewport_state
*vpt
)
618 struct nv30_context
*nv30
= nv30_context(pipe
);
620 nv30
->viewport
= *vpt
;
621 nv30
->dirty
|= NV30_NEW_VIEWPORT
;
622 /*nv30->draw_dirty |= NV30_NEW_VIEWPORT;*/
626 nv30_set_vertex_buffers(struct pipe_context
*pipe
, unsigned count
,
627 const struct pipe_vertex_buffer
*vb
)
629 struct nv30_context
*nv30
= nv30_context(pipe
);
631 memcpy(nv30
->vtxbuf
, vb
, sizeof(*vb
) * count
);
632 nv30
->dirty
|= NV30_NEW_ARRAYS
;
636 nv30_set_vertex_elements(struct pipe_context
*pipe
, unsigned count
,
637 const struct pipe_vertex_element
*ve
)
639 struct nv30_context
*nv30
= nv30_context(pipe
);
641 memcpy(nv30
->vtxelt
, ve
, sizeof(*ve
) * count
);
642 nv30
->dirty
|= NV30_NEW_ARRAYS
;
646 nv30_init_state_functions(struct nv30_context
*nv30
)
648 nv30
->pipe
.create_blend_state
= nv30_blend_state_create
;
649 nv30
->pipe
.bind_blend_state
= nv30_blend_state_bind
;
650 nv30
->pipe
.delete_blend_state
= nv30_blend_state_delete
;
652 nv30
->pipe
.create_sampler_state
= nv30_sampler_state_create
;
653 nv30
->pipe
.bind_sampler_states
= nv30_sampler_state_bind
;
654 nv30
->pipe
.delete_sampler_state
= nv30_sampler_state_delete
;
655 nv30
->pipe
.set_sampler_textures
= nv30_set_sampler_texture
;
657 nv30
->pipe
.create_rasterizer_state
= nv30_rasterizer_state_create
;
658 nv30
->pipe
.bind_rasterizer_state
= nv30_rasterizer_state_bind
;
659 nv30
->pipe
.delete_rasterizer_state
= nv30_rasterizer_state_delete
;
661 nv30
->pipe
.create_depth_stencil_alpha_state
=
662 nv30_depth_stencil_alpha_state_create
;
663 nv30
->pipe
.bind_depth_stencil_alpha_state
=
664 nv30_depth_stencil_alpha_state_bind
;
665 nv30
->pipe
.delete_depth_stencil_alpha_state
=
666 nv30_depth_stencil_alpha_state_delete
;
668 nv30
->pipe
.create_vs_state
= nv30_vp_state_create
;
669 nv30
->pipe
.bind_vs_state
= nv30_vp_state_bind
;
670 nv30
->pipe
.delete_vs_state
= nv30_vp_state_delete
;
672 nv30
->pipe
.create_fs_state
= nv30_fp_state_create
;
673 nv30
->pipe
.bind_fs_state
= nv30_fp_state_bind
;
674 nv30
->pipe
.delete_fs_state
= nv30_fp_state_delete
;
676 nv30
->pipe
.set_blend_color
= nv30_set_blend_color
;
677 nv30
->pipe
.set_clip_state
= nv30_set_clip_state
;
678 nv30
->pipe
.set_constant_buffer
= nv30_set_constant_buffer
;
679 nv30
->pipe
.set_framebuffer_state
= nv30_set_framebuffer_state
;
680 nv30
->pipe
.set_polygon_stipple
= nv30_set_polygon_stipple
;
681 nv30
->pipe
.set_scissor_state
= nv30_set_scissor_state
;
682 nv30
->pipe
.set_viewport_state
= nv30_set_viewport_state
;
684 nv30
->pipe
.set_vertex_buffers
= nv30_set_vertex_buffers
;
685 nv30
->pipe
.set_vertex_elements
= nv30_set_vertex_elements
;