diff options
Diffstat (limited to 'src/gallium')
| -rw-r--r-- | src/gallium/drivers/nv50/nv50_query.c | 25 | 
1 files changed, 12 insertions, 13 deletions
| diff --git a/src/gallium/drivers/nv50/nv50_query.c b/src/gallium/drivers/nv50/nv50_query.c index f57540150a..940e04365f 100644 --- a/src/gallium/drivers/nv50/nv50_query.c +++ b/src/gallium/drivers/nv50/nv50_query.c @@ -26,7 +26,7 @@  #include "nv50_context.h"  struct nv50_query { -	struct pipe_buffer *buffer; +	struct nouveau_bo *bo;  	unsigned type;  	boolean ready;  	uint64_t result; @@ -41,14 +41,16 @@ nv50_query(struct pipe_query *pipe)  static struct pipe_query *  nv50_query_create(struct pipe_context *pipe, unsigned type)  { -	struct pipe_screen *screen = pipe->screen; +	struct nouveau_device *dev = nouveau_screen(pipe->screen)->device;  	struct nv50_query *q = CALLOC_STRUCT(nv50_query); +	int ret;  	assert (q->type == PIPE_QUERY_OCCLUSION_COUNTER);  	q->type = type; -	q->buffer = screen->buffer_create(screen, 256, 0, 16); -	if (!q->buffer) { +	ret = nouveau_bo_new(dev, NOUVEAU_BO_VRAM | NOUVEAU_BO_MAP, 256, +			     16, &q->bo); +	if (ret) {  		FREE(q);  		return NULL;  	} @@ -62,7 +64,7 @@ nv50_query_destroy(struct pipe_context *pipe, struct pipe_query *pq)  	struct nv50_query *q = nv50_query(pq);  	if (q) { -		pipe_buffer_reference(&q->buffer, NULL); +		nouveau_bo_ref(NULL, &q->bo);  		FREE(q);  	}  } @@ -90,12 +92,11 @@ nv50_query_end(struct pipe_context *pipe, struct pipe_query *pq)  	struct nouveau_channel *chan = nv50->screen->base.channel;  	struct nouveau_grobj *tesla = nv50->screen->tesla;  	struct nv50_query *q = nv50_query(pq); -	struct nouveau_bo *bo = nouveau_bo(q->buffer);  	WAIT_RING (chan, 5);  	BEGIN_RING(chan, tesla, 0x1b00, 4); -	OUT_RELOCh(chan, bo, 0, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR); -	OUT_RELOCl(chan, bo, 0, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR); +	OUT_RELOCh(chan, q->bo, 0, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR); +	OUT_RELOCl(chan, q->bo, 0, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR);  	OUT_RING  (chan, 0x00000000);  	OUT_RING  (chan, 0x0100f002);  	FIRE_RING (chan); @@ -105,7 +106,6 @@ static boolean  nv50_query_result(struct pipe_context *pipe, struct pipe_query *pq,  		  boolean wait, uint64_t *result)  { -	struct pipe_screen *pscreen = pipe->screen;  	struct nv50_query *q = nv50_query(pq);  	/*XXX: Want to be able to return FALSE here instead of blocking @@ -113,11 +113,10 @@ nv50_query_result(struct pipe_context *pipe, struct pipe_query *pq,  	 */  	if (!q->ready) { -		uint32_t *map = pipe_buffer_map(pscreen, q->buffer, -						PIPE_BUFFER_USAGE_CPU_READ); -		q->result = map[1]; +		nouveau_bo_map(q->bo, NOUVEAU_BO_RD); +		q->result = ((uint32_t *)q->bo->map)[1];  		q->ready = TRUE; -		pipe_buffer_unmap(pscreen, q->buffer); +		nouveau_bo_unmap(q->bo);  	}  	*result = q->result; | 
