diff options
| author | Christoph Bumiller <e0425955@student.tuwien.ac.at> | 2011-01-21 16:52:17 +0100 | 
|---|---|---|
| committer | Christoph Bumiller <e0425955@student.tuwien.ac.at> | 2011-01-23 13:03:10 +0100 | 
| commit | bf1df06773d6eca8b71a687f838edccd1a6c9cb8 (patch) | |
| tree | 1073728717fc0db82ccaba265b6ee889672a866f /src/gallium/drivers | |
| parent | 49f16c96f150b192bfd6828ae4ba03afe3a7b8f3 (diff) | |
nvc0: add MARK_RING where missing to avoid too many relocs errors
Diffstat (limited to 'src/gallium/drivers')
| -rw-r--r-- | src/gallium/drivers/nvc0/nvc0_context.c | 6 | ||||
| -rw-r--r-- | src/gallium/drivers/nvc0/nvc0_fence.c | 1 | ||||
| -rw-r--r-- | src/gallium/drivers/nvc0/nvc0_query.c | 2 | ||||
| -rw-r--r-- | src/gallium/drivers/nvc0/nvc0_screen.c | 1 | ||||
| -rw-r--r-- | src/gallium/drivers/nvc0/nvc0_state_validate.c | 11 | ||||
| -rw-r--r-- | src/gallium/drivers/nvc0/nvc0_vbo.c | 2 | 
6 files changed, 19 insertions, 4 deletions
| diff --git a/src/gallium/drivers/nvc0/nvc0_context.c b/src/gallium/drivers/nvc0/nvc0_context.c index 2118abb5d5..1ebf9e2baf 100644 --- a/src/gallium/drivers/nvc0/nvc0_context.c +++ b/src/gallium/drivers/nvc0/nvc0_context.c @@ -148,12 +148,14 @@ nvc0_bufctx_emit_relocs(struct nvc0_context *nvc0)  {     struct resident *rsd;     struct util_dynarray *array; -   unsigned ctx, i; +   unsigned ctx, i, n;     for (ctx = 0; ctx < NVC0_BUFCTX_COUNT; ++ctx) {        array = &nvc0->residents[ctx]; -      for (i = 0; i < array->size / sizeof(struct resident); ++i) { +      n = array->size / sizeof(struct resident); +      MARK_RING(nvc0->screen->base.channel, n, n); +      for (i = 0; i < n; ++i) {           rsd = util_dynarray_element(array, struct resident, i);           nvc0_resource_validate(rsd->res, rsd->flags); diff --git a/src/gallium/drivers/nvc0/nvc0_fence.c b/src/gallium/drivers/nvc0/nvc0_fence.c index 9d2c48cf14..3a3dd75c15 100644 --- a/src/gallium/drivers/nvc0/nvc0_fence.c +++ b/src/gallium/drivers/nvc0/nvc0_fence.c @@ -55,6 +55,7 @@ nvc0_fence_emit(struct nvc0_fence *fence)     assert(fence->state == NVC0_FENCE_STATE_AVAILABLE); +   MARK_RING (chan, 5, 2);     BEGIN_RING(chan, RING_3D(QUERY_ADDRESS_HIGH), 4);     OUT_RELOCh(chan, screen->fence.bo, 0, NOUVEAU_BO_WR);     OUT_RELOCl(chan, screen->fence.bo, 0, NOUVEAU_BO_WR); diff --git a/src/gallium/drivers/nvc0/nvc0_query.c b/src/gallium/drivers/nvc0/nvc0_query.c index cc83fbe771..e5e43c0e7a 100644 --- a/src/gallium/drivers/nvc0/nvc0_query.c +++ b/src/gallium/drivers/nvc0/nvc0_query.c @@ -312,6 +312,7 @@ nvc0_render_condition(struct pipe_context *pipe,     if (mode == PIPE_RENDER_COND_WAIT ||         mode == PIPE_RENDER_COND_BY_REGION_WAIT) { +      MARK_RING (chan, 5, 2);        BEGIN_RING(chan, RING_3D_(NV84_SUBCHAN_QUERY_ADDRESS_HIGH), 4);        OUT_RELOCh(chan, q->bo, q->offset, NOUVEAU_BO_GART | NOUVEAU_BO_RD);        OUT_RELOCl(chan, q->bo, q->offset, NOUVEAU_BO_GART | NOUVEAU_BO_RD); @@ -319,6 +320,7 @@ nvc0_render_condition(struct pipe_context *pipe,        OUT_RING  (chan, 0x00001001);     } +   MARK_RING (chan, 4, 2);     BEGIN_RING(chan, RING_3D(COND_ADDRESS_HIGH), 3);     OUT_RELOCh(chan, q->bo, q->offset, NOUVEAU_BO_GART | NOUVEAU_BO_RD);     OUT_RELOCl(chan, q->bo, q->offset, NOUVEAU_BO_GART | NOUVEAU_BO_RD); diff --git a/src/gallium/drivers/nvc0/nvc0_screen.c b/src/gallium/drivers/nvc0/nvc0_screen.c index f608b32e1c..68f3867fd0 100644 --- a/src/gallium/drivers/nvc0/nvc0_screen.c +++ b/src/gallium/drivers/nvc0/nvc0_screen.c @@ -628,6 +628,7 @@ nvc0_screen_make_buffers_resident(struct nvc0_screen *screen)     const unsigned flags = NOUVEAU_BO_VRAM | NOUVEAU_BO_RD; +   MARK_RING(chan, 5, 5);     nouveau_bo_validate(chan, screen->text, flags);     nouveau_bo_validate(chan, screen->uniforms, flags);     nouveau_bo_validate(chan, screen->txc, flags); diff --git a/src/gallium/drivers/nvc0/nvc0_state_validate.c b/src/gallium/drivers/nvc0/nvc0_state_validate.c index 25aec0244d..b41ca056b6 100644 --- a/src/gallium/drivers/nvc0/nvc0_state_validate.c +++ b/src/gallium/drivers/nvc0/nvc0_state_validate.c @@ -25,6 +25,7 @@ nvc0_validate_zcull(struct nvc0_context *nvc0)      else         width = fb->width; +    MARK_RING (chan, 23, 4);      BEGIN_RING(chan, RING_3D_(0x1590), 1); /* ZCULL_REGION_INDEX (bits 0x3f) */      OUT_RING  (chan, 0);      BEGIN_RING(chan, RING_3D_(0x07e8), 2); /* ZCULL_ADDRESS_A_HIGH */ @@ -66,12 +67,14 @@ nvc0_validate_fb(struct nvc0_context *nvc0)      OUT_RING  (chan, fb->width << 16);      OUT_RING  (chan, fb->height << 16); +    MARK_RING(chan, 9 * fb->nr_cbufs, 2 * fb->nr_cbufs); +      for (i = 0; i < fb->nr_cbufs; ++i) {          struct nvc0_miptree *mt = nvc0_miptree(fb->cbufs[i]->texture);          struct nvc0_surface *sf = nvc0_surface(fb->cbufs[i]);          struct nouveau_bo *bo = mt->base.bo;          uint32_t offset = sf->offset; -         +          BEGIN_RING(chan, RING_3D(RT_ADDRESS_HIGH(i)), 8);          OUT_RELOCh(chan, bo, offset, NOUVEAU_BO_VRAM | NOUVEAU_BO_RDWR);          OUT_RELOCl(chan, bo, offset, NOUVEAU_BO_VRAM | NOUVEAU_BO_RDWR); @@ -93,7 +96,8 @@ nvc0_validate_fb(struct nvc0_context *nvc0)          struct nouveau_bo *bo = mt->base.bo;          int unk = mt->base.base.target == PIPE_TEXTURE_2D;          uint32_t offset = sf->offset; -         + +        MARK_RING (chan, 12, 2);          BEGIN_RING(chan, RING_3D(ZETA_ADDRESS_HIGH), 5);          OUT_RELOCh(chan, bo, offset, NOUVEAU_BO_VRAM | NOUVEAU_BO_RDWR);          OUT_RELOCl(chan, bo, offset, NOUVEAU_BO_VRAM | NOUVEAU_BO_RDWR); @@ -238,6 +242,7 @@ nvc0_validate_clip(struct nvc0_context *nvc0)     if (nvc0->clip.nr) {        struct nouveau_bo *bo = nvc0->screen->uniforms; +      MARK_RING (chan, 6 + nvc0->clip.nr * 4, 2);        BEGIN_RING(chan, RING_3D(CB_SIZE), 3);        OUT_RING  (chan, 256);        OUT_RELOCh(chan, bo, 5 << 16, NOUVEAU_BO_VRAM | NOUVEAU_BO_RD); @@ -340,6 +345,7 @@ nvc0_constbufs_validate(struct nvc0_context *nvc0)                                       NOUVEAU_BO_VRAM | NOUVEAU_BO_RD);           if (rebind) { +            MARK_RING (chan, 4, 2);              BEGIN_RING(chan, RING_3D(CB_SIZE), 3);              OUT_RING  (chan, align(res->base.width0, 0x100));              OUT_RELOCh(chan, bo, base, NOUVEAU_BO_VRAM | NOUVEAU_BO_RD); @@ -357,6 +363,7 @@ nvc0_constbufs_validate(struct nvc0_context *nvc0)              }              nr = MIN2(MIN2(nr - 6, words), NV04_PFIFO_MAX_PACKET_LEN - 1); +            MARK_RING (chan, nr + 5, 2);              BEGIN_RING(chan, RING_3D(CB_SIZE), 3);              OUT_RING  (chan, align(res->base.width0, 0x100));              OUT_RELOCh(chan, bo, base, NOUVEAU_BO_VRAM | NOUVEAU_BO_RD); diff --git a/src/gallium/drivers/nvc0/nvc0_vbo.c b/src/gallium/drivers/nvc0/nvc0_vbo.c index a51a887ed8..486909c1eb 100644 --- a/src/gallium/drivers/nvc0/nvc0_vbo.c +++ b/src/gallium/drivers/nvc0/nvc0_vbo.c @@ -227,6 +227,7 @@ nvc0_update_user_vbufs(struct nvc0_context *nvc0)        }        offset = vb->buffer_offset + ve->src_offset; +      MARK_RING (chan, 6, 4);        BEGIN_RING_1I(chan, RING_3D(VERTEX_ARRAY_SELECT), 5);        OUT_RING  (chan, i);        OUT_RESRCh(chan, buf, size - 1, NOUVEAU_BO_RD); @@ -292,6 +293,7 @@ nvc0_vertex_arrays_validate(struct nvc0_context *nvc0)        size = vb->buffer->width0;        offset = ve->pipe.src_offset + vb->buffer_offset; +      MARK_RING (chan, 8, 4);        BEGIN_RING(chan, RING_3D(VERTEX_ARRAY_FETCH(i)), 1);        OUT_RING  (chan, (1 << 12) | vb->stride);        BEGIN_RING_1I(chan, RING_3D(VERTEX_ARRAY_SELECT), 5); | 
