summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/nv40/nv40_state_emit.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/drivers/nv40/nv40_state_emit.c')
-rw-r--r--src/gallium/drivers/nv40/nv40_state_emit.c26
1 files changed, 13 insertions, 13 deletions
diff --git a/src/gallium/drivers/nv40/nv40_state_emit.c b/src/gallium/drivers/nv40/nv40_state_emit.c
index b5d0d68d6b..e10e178432 100644
--- a/src/gallium/drivers/nv40/nv40_state_emit.c
+++ b/src/gallium/drivers/nv40/nv40_state_emit.c
@@ -19,21 +19,14 @@ nv40_state_emit_dummy_relocs(struct nv40_context *nv40)
continue;
so_emit_reloc_markers(nv40->nvws, nv40->so_fragtex[i]);
}
- so_emit_reloc_markers(nv40->nvws, nv40->fragprog.active->so);
-}
-
-static boolean
-nv40_state_clip_validate(struct nv40_context *nv40)
-{
- if (nv40->pipe_state.clip.nr)
- nv40->fallback |= NV40_FALLBACK_TNL;
- return FALSE;
+ so_emit_reloc_markers(nv40->nvws, nv40->state.fragprog);
}
static struct nv40_state_entry *render_states[] = {
&nv40_state_clip,
&nv40_state_scissor,
&nv40_state_stipple,
+ &nv40_state_fragprog,
NULL
};
@@ -65,6 +58,15 @@ nv40_state_validate(struct nv40_context *nv40)
!(nv40->fallback & NV40_FALLBACK_TNL)) {
NOUVEAU_ERR("XXX: swtnl->hwtnl\n");
}
+
+ if (nv40->fallback & NV40_FALLBACK_RAST &&
+ !(last_fallback & NV40_FALLBACK_RAST)) {
+ NOUVEAU_ERR("XXX: hwrast->swrast\n");
+ } else
+ if (last_fallback & NV40_FALLBACK_RAST &&
+ !(nv40->fallback & NV40_FALLBACK_RAST)) {
+ NOUVEAU_ERR("XXX: swrast->hwrast\n");
+ }
}
void
@@ -100,10 +102,8 @@ nv40_emit_hw_state(struct nv40_context *nv40)
nv40->hw_dirty &= ~NV40_NEW_STIPPLE;
}
- if (nv40->dirty & NV40_NEW_FRAGPROG) {
- nv40_fragprog_bind(nv40, nv40->fragprog.current);
- /*XXX: clear NV40_NEW_FRAGPROG if no new program uploaded */
- }
+ if (nv40->hw_dirty & NV40_NEW_FRAGPROG)
+ so_emit(nv40->nvws, nv40->state.fragprog);
if (nv40->dirty_samplers || (nv40->dirty & NV40_NEW_FRAGPROG)) {
nv40_fragtex_bind(nv40);