projects
/
mesa.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
nv50: fix occlusion queries
[mesa.git]
/
src
/
gallium
/
drivers
/
nouveau
/
nouveau_stateobj.h
diff --git
a/src/gallium/drivers/nouveau/nouveau_stateobj.h
b/src/gallium/drivers/nouveau/nouveau_stateobj.h
index 439c7e4734ad3514bfa15576921a4548acc1c8a7..029b01e17d519c86312db14d269bb1a0f0fe898d 100644
(file)
--- a/
src/gallium/drivers/nouveau/nouveau_stateobj.h
+++ b/
src/gallium/drivers/nouveau/nouveau_stateobj.h
@@
-1,7
+1,7
@@
#ifndef __NOUVEAU_STATEOBJ_H__
#define __NOUVEAU_STATEOBJ_H__
#ifndef __NOUVEAU_STATEOBJ_H__
#define __NOUVEAU_STATEOBJ_H__
-#include "
pipe/p_util
.h"
+#include "
util/u_debug
.h"
struct nouveau_stateobj_reloc {
struct pipe_buffer *bo;
struct nouveau_stateobj_reloc {
struct pipe_buffer *bo;
@@
-67,6
+67,14
@@
so_data(struct nouveau_stateobj *so, unsigned data)
so->cur_packet += 4;
}
so->cur_packet += 4;
}
+static INLINE void
+so_datap(struct nouveau_stateobj *so, unsigned *data, unsigned size)
+{
+ so->cur_packet += (4 * size);
+ while (size--)
+ (*so->cur++) = (*data++);
+}
+
static INLINE void
so_method(struct nouveau_stateobj *so, struct nouveau_grobj *gr,
unsigned mthd, unsigned size)
static INLINE void
so_method(struct nouveau_stateobj *so, struct nouveau_grobj *gr,
unsigned mthd, unsigned size)
@@
-91,6
+99,15
@@
so_reloc(struct nouveau_stateobj *so, struct pipe_buffer *bo,
so_data(so, data);
}
so_data(so, data);
}
+static INLINE void
+so_dump(struct nouveau_stateobj *so)
+{
+ unsigned i, nr = so->cur - so->push;
+
+ for (i = 0; i < nr; i++)
+ debug_printf("+0x%04x: 0x%08x\n", i, so->push[i]);
+}
+
static INLINE void
so_emit(struct nouveau_winsys *nvws, struct nouveau_stateobj *so)
{
static INLINE void
so_emit(struct nouveau_winsys *nvws, struct nouveau_stateobj *so)
{
@@
-99,14
+116,14
@@
so_emit(struct nouveau_winsys *nvws, struct nouveau_stateobj *so)
nr = so->cur - so->push;
if (pb->remaining < nr)
nr = so->cur - so->push;
if (pb->remaining < nr)
- nvws->push_flush(nvws
->channel, nr
);
+ nvws->push_flush(nvws
, nr, NULL
);
pb->remaining -= nr;
memcpy(pb->cur, so->push, nr * 4);
for (i = 0; i < so->cur_reloc; i++) {
struct nouveau_stateobj_reloc *r = &so->reloc[i];
pb->remaining -= nr;
memcpy(pb->cur, so->push, nr * 4);
for (i = 0; i < so->cur_reloc; i++) {
struct nouveau_stateobj_reloc *r = &so->reloc[i];
- nvws->push_reloc(nvws
->channel
, pb->cur + r->offset, r->bo,
+ nvws->push_reloc(nvws, pb->cur + r->offset, r->bo,
r->data, r->flags, r->vor, r->tor);
}
pb->cur += nr;
r->data, r->flags, r->vor, r->tor);
}
pb->cur += nr;
@@
-118,19
+135,23
@@
so_emit_reloc_markers(struct nouveau_winsys *nvws, struct nouveau_stateobj *so)
struct nouveau_pushbuf *pb = nvws->channel->pushbuf;
unsigned i;
struct nouveau_pushbuf *pb = nvws->channel->pushbuf;
unsigned i;
+ if (!so)
+ return;
+
i = so->cur_reloc << 1;
if (nvws->channel->pushbuf->remaining < i)
i = so->cur_reloc << 1;
if (nvws->channel->pushbuf->remaining < i)
- nvws->push_flush(nvws
->channel, i
);
+ nvws->push_flush(nvws
, i, NULL
);
nvws->channel->pushbuf->remaining -= i;
for (i = 0; i < so->cur_reloc; i++) {
struct nouveau_stateobj_reloc *r = &so->reloc[i];
nvws->channel->pushbuf->remaining -= i;
for (i = 0; i < so->cur_reloc; i++) {
struct nouveau_stateobj_reloc *r = &so->reloc[i];
- nvws->push_reloc(nvws->channel, pb->cur++, r->bo, r->packet,
- (r->flags &
- (NOUVEAU_BO_VRAM | NOUVEAU_BO_GART)) |
+ nvws->push_reloc(nvws, pb->cur++, r->bo, r->packet,
+ (r->flags & (NOUVEAU_BO_VRAM |
+ NOUVEAU_BO_GART |
+ NOUVEAU_BO_RDWR)) |
NOUVEAU_BO_DUMMY, 0, 0);
NOUVEAU_BO_DUMMY, 0, 0);
- nvws->push_reloc(nvws
->channel
, pb->cur++, r->bo, r->data,
+ nvws->push_reloc(nvws, pb->cur++, r->bo, r->data,
r->flags | NOUVEAU_BO_DUMMY, r->vor, r->tor);
}
}
r->flags | NOUVEAU_BO_DUMMY, r->vor, r->tor);
}
}