Module: Mesa Branch: refs/tags/staging-dw-good Commit: 9dd9b1fa78a6791356c36855d8db0a89ffccf832 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=9dd9b1fa78a6791356c36855d8db0a89ffccf832
Author: Emil Velikov <[email protected]> Date: Thu Jun 13 18:17:56 2013 +0100 nouveau: minor post cleanup Signed-off-by: Emil Velikov <[email protected]> --- src/gallium/drivers/nouveau/nouveau_buffer.c | 26 +++++++++++--------------- src/gallium/drivers/nouveau/nouveau_screen.h | 2 +- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/src/gallium/drivers/nouveau/nouveau_buffer.c b/src/gallium/drivers/nouveau/nouveau_buffer.c index 2740a5f..2190ef9 100644 --- a/src/gallium/drivers/nouveau/nouveau_buffer.c +++ b/src/gallium/drivers/nouveau/nouveau_buffer.c @@ -130,6 +130,7 @@ nouveau_transfer_staging(struct nouveau_context *nv, /* const unsigned adj = tx->base.box.x & NOUVEAU_MIN_BUFFER_MAP_ALIGN_MASK; const unsigned size = align(tx->base.box.width, 4) + adj; + */ const unsigned adj = 0; const unsigned size = tx->base.box.width; @@ -157,10 +158,9 @@ nouveau_transfer_staging(struct nouveau_context *nv, return tx->map; } - /* Maybe just migrate to GART right away if we actually need to do this. */ static boolean -nouveau_buffer_download(struct nouveau_context *nv, struct nouveau_transfer *tx) +nouveau_transfer_read(struct nouveau_context *nv, struct nouveau_transfer *tx) { struct nv04_resource *buf = nv04_resource(tx->base.resource); const unsigned base = tx->base.box.x; @@ -174,10 +174,11 @@ nouveau_buffer_download(struct nouveau_context *nv, struct nouveau_transfer *tx) NOUVEAU_DRV_STAT(nv->screen, buf_read_bytes_staging_vid, size); nv->copy_data(nv, tx->bo, tx->offset, NOUVEAU_BO_GART, - buf->bo, buf->offset + base, NOUVEAU_BO_VRAM, size); + buf->bo, buf->offset + base, buf->domain, size); if (nouveau_bo_wait(tx->bo, NOUVEAU_BO_RD, nv->client)) return FALSE; + if (buf->data) memcpy(buf->data + base, tx->map, size); else { @@ -306,11 +307,10 @@ nouveau_buffer_cache(struct nouveau_context *nv, struct nv04_resource *buf) if (!buf->data) return FALSE; -// if (!nouveau_transfer_staging(nv, NOUVEAU_BO_RD, nv->client, tx, FALSE)) if (!nouveau_transfer_staging(nv, NOUVEAU_BO_RD, nv->client, &tx, FALSE)) return FALSE; - ret = nouveau_buffer_download(nv, &tx); + ret = nouveau_transfer_read(nv, &tx); return ret; } @@ -323,13 +323,12 @@ nouveau_buffer_transfer_map(struct pipe_context *pipe, { struct nouveau_context *nv = nouveau_context(pipe); struct nv04_resource *buf = nv04_resource(resource); - struct nouveau_transfer *tx = CALLOC_STRUCT(nouveau_transfer); + struct nouveau_transfer *tx = MALLOC_STRUCT(nouveau_transfer); uint8_t *map; int ret; if (!tx) return NULL; - nouveau_buffer_transfer_init(tx, resource, box, usage); *ptransfer = &tx->base; @@ -343,7 +342,7 @@ nouveau_buffer_transfer_map(struct pipe_context *pipe, if (buf->status & NOUVEAU_BUFFER_STATUS_GPU_WRITING) // XXX: No error checking nouveau_transfer_staging(nv, NOUVEAU_BO_RD, nv->client, tx, TRUE); - nouveau_buffer_download(nv, tx); + nouveau_transfer_read(nv, tx); } } @@ -403,9 +402,8 @@ nouveau_buffer_transfer_unmap(struct pipe_context *pipe, struct nv04_resource *buf = nv04_resource(transfer->resource); if (tx->base.usage & PIPE_TRANSFER_WRITE) { - if (buf->domain == NOUVEAU_BO_VRAM) { + if (buf->domain == NOUVEAU_BO_VRAM) nouveau_buffer_upload(nv, buf, transfer->box.x, transfer->box.width); - } if (likely(buf->domain)) { const uint8_t bind = buf->base.bind; @@ -417,7 +415,7 @@ nouveau_buffer_transfer_unmap(struct pipe_context *pipe, } } - if (tx->base.usage & PIPE_TRANSFER_WRITE) + if (!tx->bo && (tx->base.usage & PIPE_TRANSFER_WRITE)) NOUVEAU_DRV_STAT(nv->screen, buf_write_bytes_direct, tx->base.box.width); FREE(tx); @@ -465,15 +463,13 @@ nouveau_resource_map_offset(struct nouveau_context *nv, if (unlikely(res->status & NOUVEAU_BUFFER_STATUS_USER_MEMORY)) return res->data + offset; - if (res->domain == NOUVEAU_BO_VRAM) { if (!res->data && (!(res->status & NOUVEAU_BUFFER_STATUS_GPU_WRITING))) fprintf(stderr, "%s:%d no data and NO GPU WRITING\n", __func__, __LINE__); - if (res->status & NOUVEAU_BUFFER_STATUS_GPU_WRITING) + if (!res->data || (res->status & NOUVEAU_BUFFER_STATUS_GPU_WRITING)) nouveau_buffer_cache(nv, res); } - if (res->domain != NOUVEAU_BO_GART) return res->data + offset; @@ -553,6 +549,7 @@ nouveau_buffer_create(struct pipe_screen *pscreen, goto fail; NOUVEAU_DRV_STAT(screen, buf_obj_current_count, 1); + return &buffer->base; fail: @@ -587,7 +584,6 @@ nouveau_user_buffer_create(struct pipe_screen *pscreen, void *ptr, return &buffer->base; } -/* Like download, but for GART buffers. Merge ? */ static INLINE boolean nouveau_buffer_data_fetch(struct nouveau_context *nv, struct nv04_resource *buf, struct nouveau_bo *bo, unsigned offset, unsigned size) diff --git a/src/gallium/drivers/nouveau/nouveau_screen.h b/src/gallium/drivers/nouveau/nouveau_screen.h index 2790fa8..9b6b4e9 100644 --- a/src/gallium/drivers/nouveau/nouveau_screen.h +++ b/src/gallium/drivers/nouveau/nouveau_screen.h @@ -26,7 +26,7 @@ struct nouveau_screen { unsigned sysmem_bindings; /* PIPE_BIND_* where GART placement is desired */ unsigned lowmem_bindings; /* PIPE_BIND_* that require an address < 4 GiB */ /* - * For bindings with (vidmem & sysmem) bits set set, PIPE_USAGE_* decides + * For bindings with (vidmem & sysmem) bits set, PIPE_USAGE_* decides * placement. */ _______________________________________________ mesa-commit mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-commit
