summaryrefslogtreecommitdiff
path: root/src/mesa
diff options
context:
space:
mode:
authorBen Skeggs <skeggsb@gmail.com>2007-12-16 20:44:44 +1100
committerBen Skeggs <skeggsb@gmail.com>2007-12-16 20:44:44 +1100
commitb337ecdd8e10b4fa224b2bfb7fdfeda5931d7a6e (patch)
tree5be713ec39b2dfc2dae1cabc1da7976065ec1c4b /src/mesa
parent19af6e9161c941d66eac4cd0c782e2a2caadce67 (diff)
nv40: fix culling
Diffstat (limited to 'src/mesa')
-rw-r--r--src/mesa/pipe/nv40/nv40_state.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/src/mesa/pipe/nv40/nv40_state.c b/src/mesa/pipe/nv40/nv40_state.c
index 89d91bdb64..c1a882feff 100644
--- a/src/mesa/pipe/nv40/nv40_state.c
+++ b/src/mesa/pipe/nv40/nv40_state.c
@@ -345,26 +345,38 @@ nv40_rasterizer_state_create(struct pipe_context *pipe,
rs->poly_stipple_en = cso->poly_stipple_enable ? 1 : 0;
if (cso->front_winding == PIPE_WINDING_CCW) {
- rs->front_face = 0x0901;
+ rs->front_face = NV40TCL_FRONT_FACE_CCW;
rs->poly_mode_front = nvgl_polygon_mode(cso->fill_ccw);
rs->poly_mode_back = nvgl_polygon_mode(cso->fill_cw);
} else {
- rs->front_face = 0x0900;
+ rs->front_face = NV40TCL_FRONT_FACE_CW;
rs->poly_mode_front = nvgl_polygon_mode(cso->fill_cw);
rs->poly_mode_back = nvgl_polygon_mode(cso->fill_ccw);
}
- rs->cull_face_en = 0;
- rs->cull_face = 0x0900;
switch (cso->cull_mode) {
case PIPE_WINDING_CCW:
- rs->cull_face = 0x0901;
- /* fall-through */
+ rs->cull_face_en = 1;
+ if (cso->front_winding == PIPE_WINDING_CCW)
+ rs->cull_face = NV40TCL_CULL_FACE_FRONT;
+ else
+ rs->cull_face = NV40TCL_CULL_FACE_BACK;
+ break;
case PIPE_WINDING_CW:
rs->cull_face_en = 1;
+ if (cso->front_winding == PIPE_WINDING_CW)
+ rs->cull_face = NV40TCL_CULL_FACE_FRONT;
+ else
+ rs->cull_face = NV40TCL_CULL_FACE_BACK;
+ break;
+ case PIPE_WINDING_BOTH:
+ rs->cull_face_en = 1;
+ rs->cull_face = NV40TCL_CULL_FACE_FRONT_AND_BACK;
break;
case PIPE_WINDING_NONE:
default:
+ rs->cull_face_en = 0;
+ rs->cull_face = 0;
break;
}