projects
/
mesa.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
r300: respect radeon common code fallbacks
[mesa.git]
/
src
/
gallium
/
drivers
/
nv30
/
nv30_state_emit.c
diff --git
a/src/gallium/drivers/nv30/nv30_state_emit.c
b/src/gallium/drivers/nv30/nv30_state_emit.c
index 621b8846c8ed3835c97fd809ddfbe0dcba208e26..deefe7fd8db1eba2cf47c265ecafd1f2cc2ec984 100644
(file)
--- a/
src/gallium/drivers/nv30/nv30_state_emit.c
+++ b/
src/gallium/drivers/nv30/nv30_state_emit.c
@@
-12,6
+12,7
@@
static struct nv30_state_entry *render_states[] = {
&nv30_state_blend,
&nv30_state_blend_colour,
&nv30_state_zsa,
&nv30_state_blend,
&nv30_state_blend_colour,
&nv30_state_zsa,
+ &nv30_state_sr,
&nv30_state_viewport,
&nv30_state_vbo,
NULL
&nv30_state_viewport,
&nv30_state_vbo,
NULL
@@
-41,16
+42,18
@@
nv30_state_emit(struct nv30_context *nv30)
struct nouveau_channel *chan = nv30->screen->base.channel;
struct nv30_state *state = &nv30->state;
struct nv30_screen *screen = nv30->screen;
struct nouveau_channel *chan = nv30->screen->base.channel;
struct nv30_state *state = &nv30->state;
struct nv30_screen *screen = nv30->screen;
- unsigned i
, samplers
;
+ unsigned i;
uint64_t states;
uint64_t states;
- if (nv30->pctx_id != screen->cur_pctx) {
+ /* XXX: racy!
+ */
+ if (nv30 != screen->cur_ctx) {
for (i = 0; i < NV30_STATE_MAX; i++) {
if (state->hw[i] && screen->state[i] != state->hw[i])
state->dirty |= (1ULL << i);
}
for (i = 0; i < NV30_STATE_MAX; i++) {
if (state->hw[i] && screen->state[i] != state->hw[i])
state->dirty |= (1ULL << i);
}
- screen->cur_
pctx = nv30->pctx_id
;
+ screen->cur_
ctx = nv30
;
}
for (i = 0, states = state->dirty; states; i++) {
}
for (i = 0, states = state->dirty; states; i++) {
@@
-63,6
+66,14
@@
nv30_state_emit(struct nv30_context *nv30)
}
state->dirty = 0;
}
state->dirty = 0;
+}
+
+void
+nv30_state_flush_notify(struct nouveau_channel *chan)
+{
+ struct nv30_context *nv30 = chan->user_private;
+ struct nv30_state *state = &nv30->state;
+ unsigned i, samplers;
so_emit_reloc_markers(chan, state->hw[NV30_STATE_FB]);
for (i = 0, samplers = state->fp_samplers; i < 16 && samplers; i++) {
so_emit_reloc_markers(chan, state->hw[NV30_STATE_FB]);
for (i = 0, samplers = state->fp_samplers; i < 16 && samplers; i++) {