diff options
author | Ben Skeggs <skeggsb@gmail.com> | 2007-12-16 20:44:44 +1100 |
---|---|---|
committer | Ben Skeggs <skeggsb@gmail.com> | 2007-12-16 20:44:44 +1100 |
commit | b337ecdd8e10b4fa224b2bfb7fdfeda5931d7a6e (patch) | |
tree | 5be713ec39b2dfc2dae1cabc1da7976065ec1c4b /src/mesa | |
parent | 19af6e9161c941d66eac4cd0c782e2a2caadce67 (diff) |
nv40: fix culling
Diffstat (limited to 'src/mesa')
-rw-r--r-- | src/mesa/pipe/nv40/nv40_state.c | 24 |
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; } |