[Nouveau] [PATCH] nouveau: don't emit reloc markers for bo's that are mapped

Maarten Maathuis madman2003 at gmail.com
Thu Dec 17 17:06:13 PST 2009


Signed-off-by: Maarten Maathuis <madman2003 at gmail.com>
---
 src/gallium/drivers/nouveau/nouveau_stateobj.h |    9 +++++++++
 1 files changed, 9 insertions(+), 0 deletions(-)

diff --git a/src/gallium/drivers/nouveau/nouveau_stateobj.h b/src/gallium/drivers/nouveau/nouveau_stateobj.h
index 9aee9e4..6c40f64 100644
--- a/src/gallium/drivers/nouveau/nouveau_stateobj.h
+++ b/src/gallium/drivers/nouveau/nouveau_stateobj.h
@@ -163,6 +163,15 @@ so_emit_reloc_markers(struct nouveau_channel *chan, struct nouveau_stateobj *so)
 	for (i = 0; i < so->cur_reloc; i++) {
 		struct nouveau_stateobj_reloc *r = &so->reloc[i];
 
+		/* This is probably a vbo which has caused a pushbuf flush
+		 * before mapping. Don't try to reloc it again, it will cause
+		 * problems, because important stuff is skipped.
+		 */
+		if (r->bo->map) {
+			pb->remaining += 2;
+			continue;
+		}
+
 		if ((ret = nouveau_pushbuf_emit_reloc(chan, pb->cur++, r->bo,
 					   r->packet, 0,
 					   (r->flags & (NOUVEAU_BO_VRAM |
-- 
1.6.5.4



More information about the Nouveau mailing list