diff --git a/src/gallium/drivers/nouveau/nouveau_buffer.c b/src/gallium/drivers/nouveau/nouveau_buffer.c index e566541a579..cfaf42d7086 100644 --- a/src/gallium/drivers/nouveau/nouveau_buffer.c +++ b/src/gallium/drivers/nouveau/nouveau_buffer.c @@ -191,7 +191,7 @@ nouveau_transfer_read(struct nouveau_context *nv, struct nouveau_transfer *tx) nv->copy_data(nv, tx->bo, tx->offset, NOUVEAU_BO_GART, buf->bo, buf->offset + base, buf->domain, size); - if (nouveau_bo_wait(tx->bo, NOUVEAU_BO_RD, nv->client)) + if (BO_WAIT(nv->screen, tx->bo, NOUVEAU_BO_RD, nv->client)) return false; if (buf->data) diff --git a/src/gallium/drivers/nouveau/nouveau_winsys.h b/src/gallium/drivers/nouveau/nouveau_winsys.h index f0c401f151d..6132679bda9 100644 --- a/src/gallium/drivers/nouveau/nouveau_winsys.h +++ b/src/gallium/drivers/nouveau/nouveau_winsys.h @@ -75,6 +75,12 @@ BO_MAP(struct nouveau_screen *screen, struct nouveau_bo *bo, uint32_t access, st return nouveau_bo_map(bo, access, client); } +static inline int +BO_WAIT(struct nouveau_screen *screen, struct nouveau_bo *bo, uint32_t access, struct nouveau_client *client) +{ + return nouveau_bo_wait(bo, access, client); +} + #define NOUVEAU_RESOURCE_FLAG_LINEAR (PIPE_RESOURCE_FLAG_DRV_PRIV << 0) #define NOUVEAU_RESOURCE_FLAG_DRV_PRIV (PIPE_RESOURCE_FLAG_DRV_PRIV << 1) diff --git a/src/gallium/drivers/nouveau/nv50/nv50_query_hw.c b/src/gallium/drivers/nouveau/nv50/nv50_query_hw.c index 4d959426148..5e079cf3307 100644 --- a/src/gallium/drivers/nouveau/nv50/nv50_query_hw.c +++ b/src/gallium/drivers/nouveau/nv50/nv50_query_hw.c @@ -294,7 +294,7 @@ nv50_hw_get_query_result(struct nv50_context *nv50, struct nv50_query *q, } return false; } - if (nouveau_bo_wait(hq->bo, NOUVEAU_BO_RD, nv50->base.client)) + if (BO_WAIT(&nv50->screen->base, hq->bo, NOUVEAU_BO_RD, nv50->base.client)) return false; } hq->state = NV50_HW_QUERY_STATE_READY; @@ -447,14 +447,15 @@ nv50_hw_get_driver_query_info(struct nv50_screen *screen, unsigned id, } void -nv50_hw_query_pushbuf_submit(struct nouveau_pushbuf *push, uint16_t method, +nv50_hw_query_pushbuf_submit(struct nv50_context *nv50, uint16_t method, struct nv50_query *q, unsigned result_offset) { + struct nouveau_pushbuf *push = nv50->base.pushbuf; struct nv50_hw_query *hq = nv50_hw_query(q); nv50_hw_query_update(q); if (hq->state != NV50_HW_QUERY_STATE_READY) - nouveau_bo_wait(hq->bo, NOUVEAU_BO_RD, push->client); + BO_WAIT(&nv50->screen->base, hq->bo, NOUVEAU_BO_RD, push->client); hq->state = NV50_HW_QUERY_STATE_READY; BEGIN_NV04(push, SUBC_3D(method), 1); diff --git a/src/gallium/drivers/nouveau/nv50/nv50_query_hw.h b/src/gallium/drivers/nouveau/nv50/nv50_query_hw.h index 4a351510f72..ad2f7ec0f73 100644 --- a/src/gallium/drivers/nouveau/nv50/nv50_query_hw.h +++ b/src/gallium/drivers/nouveau/nv50/nv50_query_hw.h @@ -52,7 +52,7 @@ nv50_hw_get_driver_query_info(struct nv50_screen *, unsigned, bool nv50_hw_query_allocate(struct nv50_context *, struct nv50_query *, int); void -nv50_hw_query_pushbuf_submit(struct nouveau_pushbuf *, uint16_t, +nv50_hw_query_pushbuf_submit(struct nv50_context *, uint16_t, struct nv50_query *, unsigned); void nv84_hw_query_fifo_wait(struct nouveau_pushbuf *, struct nv50_query *); diff --git a/src/gallium/drivers/nouveau/nv50/nv50_query_hw_sm.c b/src/gallium/drivers/nouveau/nv50/nv50_query_hw_sm.c index de3d8fd950e..a6c92bbbd1e 100644 --- a/src/gallium/drivers/nouveau/nv50/nv50_query_hw_sm.c +++ b/src/gallium/drivers/nouveau/nv50/nv50_query_hw_sm.c @@ -321,7 +321,7 @@ nv50_hw_sm_query_read_data(uint32_t count[32][4], if (hq->data[b + 4] != hq->sequence) { if (!wait) return false; - if (nouveau_bo_wait(hq->bo, NOUVEAU_BO_RD, nv50->base.client)) + if (BO_WAIT(&nv50->screen->base, hq->bo, NOUVEAU_BO_RD, nv50->base.client)) return false; } count[p][c] = hq->data[b + hsq->ctr[c]]; diff --git a/src/gallium/drivers/nouveau/nv50/nv50_shader_state.c b/src/gallium/drivers/nouveau/nv50/nv50_shader_state.c index 5a3b911bfe1..3d17953ed37 100644 --- a/src/gallium/drivers/nouveau/nv50/nv50_shader_state.c +++ b/src/gallium/drivers/nouveau/nv50/nv50_shader_state.c @@ -717,7 +717,7 @@ nv50_stream_output_validate(struct nv50_context *nv50) PUSH_DATA(push, targ->pipe.buffer_size); if (!targ->clean) { assert(targ->pq); - nv50_hw_query_pushbuf_submit(push, NVA0_3D_STRMOUT_OFFSET(i), + nv50_hw_query_pushbuf_submit(nv50, NVA0_3D_STRMOUT_OFFSET(i), nv50_query(targ->pq), 0x4); } else { BEGIN_NV04(push, NVA0_3D(STRMOUT_OFFSET(i)), 1); diff --git a/src/gallium/drivers/nouveau/nv50/nv50_vbo.c b/src/gallium/drivers/nouveau/nv50/nv50_vbo.c index 600434f767d..2d1879ed72f 100644 --- a/src/gallium/drivers/nouveau/nv50/nv50_vbo.c +++ b/src/gallium/drivers/nouveau/nv50/nv50_vbo.c @@ -737,7 +737,7 @@ nva0_draw_stream_output(struct nv50_context *nv50, PUSH_DATA (push, 0); BEGIN_NV04(push, NVA0_3D(DRAW_TFB_STRIDE), 1); PUSH_DATA (push, so->stride); - nv50_hw_query_pushbuf_submit(push, NVA0_3D_DRAW_TFB_BYTES, + nv50_hw_query_pushbuf_submit(nv50, NVA0_3D_DRAW_TFB_BYTES, nv50_query(so->pq), 0x4); BEGIN_NV04(push, NV50_3D(VERTEX_END_GL), 1); PUSH_DATA (push, 0); diff --git a/src/gallium/drivers/nouveau/nv50/nv84_video.c b/src/gallium/drivers/nouveau/nv50/nv84_video.c index 7e6aa8fffb3..c5e04bb7dfb 100644 --- a/src/gallium/drivers/nouveau/nv50/nv84_video.c +++ b/src/gallium/drivers/nouveau/nv50/nv84_video.c @@ -184,11 +184,12 @@ nv84_decoder_begin_frame_mpeg12(struct pipe_video_codec *decoder, struct pipe_video_buffer *target, struct pipe_picture_desc *picture) { + struct nouveau_screen *screen = nouveau_screen(decoder->context->screen); struct nv84_decoder *dec = (struct nv84_decoder *)decoder; struct pipe_mpeg12_picture_desc *desc = (struct pipe_mpeg12_picture_desc *)picture; int i; - nouveau_bo_wait(dec->mpeg12_bo, NOUVEAU_BO_RDWR, dec->client); + BO_WAIT(screen, dec->mpeg12_bo, NOUVEAU_BO_RDWR, dec->client); dec->mpeg12_mb_info = dec->mpeg12_bo->map + 0x100; dec->mpeg12_data = dec->mpeg12_bo->map + 0x100 + align(0x20 * mb(dec->base.width) * mb(dec->base.height), 0x100); diff --git a/src/gallium/drivers/nouveau/nv50/nv84_video_bsp.c b/src/gallium/drivers/nouveau/nv50/nv84_video_bsp.c index 38eca1771c5..4bd96105bbb 100644 --- a/src/gallium/drivers/nouveau/nv50/nv84_video_bsp.c +++ b/src/gallium/drivers/nouveau/nv50/nv84_video_bsp.c @@ -89,6 +89,7 @@ nv84_decoder_bsp(struct nv84_decoder *dec, const unsigned *num_bytes, struct nv84_video_buffer *dest) { + struct nouveau_screen *screen = nouveau_screen(dec->base.context->screen); struct iparm params; uint32_t more_params[0x44 / 4] = {0}; unsigned total_bytes = 0; @@ -103,7 +104,7 @@ nv84_decoder_bsp(struct nv84_decoder *dec, { dec->fence, NOUVEAU_BO_RDWR | NOUVEAU_BO_VRAM }, }; - nouveau_bo_wait(dec->fence, NOUVEAU_BO_RDWR, dec->client); + BO_WAIT(screen, dec->fence, NOUVEAU_BO_RDWR, dec->client); STATIC_ASSERT(sizeof(struct iparm) == 0x530); diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_query_hw.c b/src/gallium/drivers/nouveau/nvc0/nvc0_query_hw.c index 7daf65bb39b..d5e0fd6d1c1 100644 --- a/src/gallium/drivers/nouveau/nvc0/nvc0_query_hw.c +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_query_hw.c @@ -330,7 +330,7 @@ nvc0_hw_get_query_result(struct nvc0_context *nvc0, struct nvc0_query *q, } return false; } - if (nouveau_bo_wait(hq->bo, NOUVEAU_BO_RD, nvc0->base.client)) + if (BO_WAIT(&nvc0->screen->base, hq->bo, NOUVEAU_BO_RD, nvc0->base.client)) return false; NOUVEAU_DRV_STAT(&nvc0->screen->base, query_sync_count, 1); } diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_query_hw_sm.c b/src/gallium/drivers/nouveau/nvc0/nvc0_query_hw_sm.c index 4cc564217db..4146ad1bc76 100644 --- a/src/gallium/drivers/nouveau/nvc0/nvc0_query_hw_sm.c +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_query_hw_sm.c @@ -2636,7 +2636,7 @@ nvc0_hw_sm_query_read_data(uint32_t count[32][8], if (hq->data[b + 8] != hq->sequence) { if (!wait) return false; - if (nouveau_bo_wait(hq->bo, NOUVEAU_BO_RD, nvc0->base.client)) + if (BO_WAIT(&nvc0->screen->base, hq->bo, NOUVEAU_BO_RD, nvc0->base.client)) return false; } count[p][c] = hq->data[b + hsq->ctr[c]] * (1 << c); @@ -2664,7 +2664,7 @@ nve4_hw_sm_query_read_data(uint32_t count[32][8], if (hq->data[b + 20 + d] != hq->sequence) { if (!wait) return false; - if (nouveau_bo_wait(hq->bo, NOUVEAU_BO_RD, nvc0->base.client)) + if (BO_WAIT(&nvc0->screen->base, hq->bo, NOUVEAU_BO_RD, nvc0->base.client)) return false; } if (hsq->ctr[c] & ~0x3) diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_transfer.c b/src/gallium/drivers/nouveau/nvc0/nvc0_transfer.c index 7ede77333ec..1e57d889289 100644 --- a/src/gallium/drivers/nouveau/nvc0/nvc0_transfer.c +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_transfer.c @@ -362,7 +362,7 @@ nvc0_mt_sync(struct nvc0_context *nvc0, struct nv50_miptree *mt, unsigned usage) if (!mt->base.mm) { uint32_t access = (usage & PIPE_MAP_WRITE) ? NOUVEAU_BO_WR : NOUVEAU_BO_RD; - return !nouveau_bo_wait(mt->base.bo, access, nvc0->base.client); + return !BO_WAIT(&nvc0->screen->base, mt->base.bo, access, nvc0->base.client); } if (usage & PIPE_MAP_WRITE) return !mt->base.fence || nouveau_fence_wait(mt->base.fence, &nvc0->base.debug);