summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/nv40/nv40_state_viewport.c
diff options
context:
space:
mode:
authorBen Skeggs <skeggsb@gmail.com>2008-03-24 13:41:40 +1100
committerBen Skeggs <skeggsb@gmail.com>2008-03-24 13:41:40 +1100
commit799d3bce06e998e51ad8df6bcadeb41bd061801e (patch)
tree6637eb6b99af2695138a19f1f2fddfc8fae0b515 /src/gallium/drivers/nv40/nv40_state_viewport.c
parent46a7f297a1477b9b59a5a11bf090db0ecbdf1ed7 (diff)
nv40: respect rasterizer cso bypass_clipping flag
Diffstat (limited to 'src/gallium/drivers/nv40/nv40_state_viewport.c')
-rw-r--r--src/gallium/drivers/nv40/nv40_state_viewport.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/gallium/drivers/nv40/nv40_state_viewport.c b/src/gallium/drivers/nv40/nv40_state_viewport.c
index 9e5c7a72a7..1b6248e5b8 100644
--- a/src/gallium/drivers/nv40/nv40_state_viewport.c
+++ b/src/gallium/drivers/nv40/nv40_state_viewport.c
@@ -5,8 +5,20 @@ nv40_state_viewport_validate(struct nv40_context *nv40)
{
struct nouveau_stateobj *so = so_new(11, 0);
struct pipe_viewport_state *vpt = &nv40->viewport;
+ unsigned bypass;
- if (nv40->render_mode == HW) {
+ if (nv40->render_mode == HW && !nv40->rasterizer->pipe.bypass_clipping)
+ bypass = 0;
+ else
+ bypass = 1;
+
+ if (nv40->state.hw[NV40_STATE_VIEWPORT] &&
+ (bypass || !(nv40->dirty & NV40_NEW_VIEWPORT)) &&
+ nv40->state.viewport_bypass == bypass)
+ return FALSE;
+ nv40->state.viewport_bypass = bypass;
+
+ if (!bypass) {
so_method(so, nv40->screen->curie,
NV40TCL_VIEWPORT_TRANSLATE_X, 8);
so_data (so, fui(vpt->translate[0]));
@@ -48,7 +60,7 @@ nv40_state_viewport_validate(struct nv40_context *nv40)
struct nv40_state_entry nv40_state_viewport = {
.validate = nv40_state_viewport_validate,
.dirty = {
- .pipe = NV40_NEW_VIEWPORT,
+ .pipe = NV40_NEW_VIEWPORT | NV40_NEW_RAST,
.hw = NV40_STATE_VIEWPORT
}
};