From 3d4bfe8c893d016ef43d1ebf28e4607aa1f540a4 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Wed, 3 Jun 2009 13:54:43 +1000 Subject: nouveau: 0.0.14 + extend bo interface to support subrange mapping Normal map() should operate as before, and map_range()/map_flush() should give correct results but lacking any performance difference from map(). Nothing exiting being done here yet, but the interface is a good start. --- libdrm/nouveau/nouveau_pushbuf.h | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) (limited to 'libdrm/nouveau/nouveau_pushbuf.h') diff --git a/libdrm/nouveau/nouveau_pushbuf.h b/libdrm/nouveau/nouveau_pushbuf.h index 414ad2d8..3c746ed2 100644 --- a/libdrm/nouveau/nouveau_pushbuf.h +++ b/libdrm/nouveau/nouveau_pushbuf.h @@ -41,8 +41,8 @@ nouveau_pushbuf_flush(struct nouveau_channel *, unsigned min); int nouveau_pushbuf_emit_reloc(struct nouveau_channel *, void *ptr, - struct nouveau_bo *, uint32_t data, uint32_t flags, - uint32_t vor, uint32_t tor); + struct nouveau_bo *, uint32_t data, uint32_t data2, + uint32_t flags, uint32_t vor, uint32_t tor); /* Push buffer access macros */ static __inline__ void @@ -121,7 +121,16 @@ OUT_RELOC(struct nouveau_channel *chan, struct nouveau_bo *bo, unsigned data, unsigned flags, unsigned vor, unsigned tor) { nouveau_pushbuf_emit_reloc(chan, chan->pushbuf->cur++, bo, - data, flags, vor, tor); + data, 0, flags, vor, tor); +} + +static __inline__ void +OUT_RELOC2(struct nouveau_channel *chan, struct nouveau_bo *bo, + unsigned data, unsigned data2, unsigned flags, + unsigned vor, unsigned tor) +{ + nouveau_pushbuf_emit_reloc(chan, chan->pushbuf->cur++, bo, + data, data2, flags, vor, tor); } /* Raw data + flags depending on FB/TT buffer */ @@ -149,6 +158,14 @@ OUT_RELOCl(struct nouveau_channel *chan, struct nouveau_bo *bo, OUT_RELOC(chan, bo, delta, flags | NOUVEAU_BO_LOW, 0, 0); } +/* Low 32-bits of offset + GPU linear access range info */ +static __inline__ void +OUT_RELOCr(struct nouveau_channel *chan, struct nouveau_bo *bo, + unsigned delta, unsigned size, unsigned flags) +{ + OUT_RELOC2(chan, bo, delta, size, flags | NOUVEAU_BO_LOW, 0, 0); +} + /* High 32-bits of offset */ static __inline__ void OUT_RELOCh(struct nouveau_channel *chan, struct nouveau_bo *bo, -- cgit v1.2.3