diff options
author | Marek Olšák <[email protected]> | 2012-04-26 12:02:31 +0200 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2012-04-29 14:46:52 +0200 |
commit | 0a6120244e66494db070ce875c0a464fbc5b15a1 (patch) | |
tree | 400b5129e5ae2edbca42039224ee27a22c835816 /src/gallium/winsys | |
parent | 8e90913e9f99ff3296a3c3da36e73cd2d4730269 (diff) |
winsys/radeon: simplify buffer map/unmap functions
The idea is not to use pb_map and pb_unmap wrappers, calling straight
into the winsys.
Diffstat (limited to 'src/gallium/winsys')
-rw-r--r-- | src/gallium/winsys/radeon/drm/radeon_drm_bo.c | 52 | ||||
-rw-r--r-- | src/gallium/winsys/radeon/drm/radeon_winsys.h | 4 |
2 files changed, 16 insertions, 40 deletions
diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c index 47bbcb87513..ec33ab5196b 100644 --- a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c +++ b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c @@ -330,37 +330,20 @@ static void radeon_bo_destroy(struct pb_buffer *_buf) FREE(bo); } -static unsigned get_pb_usage_from_transfer_flags(enum pipe_transfer_usage usage) -{ - unsigned res = 0; - - if (usage & PIPE_TRANSFER_WRITE) - res |= PB_USAGE_CPU_WRITE; - - if (usage & PIPE_TRANSFER_DONTBLOCK) - res |= PB_USAGE_DONTBLOCK; - - if (usage & PIPE_TRANSFER_UNSYNCHRONIZED) - res |= PB_USAGE_UNSYNCHRONIZED; - - return res; -} - -static void *radeon_bo_map_internal(struct pb_buffer *_buf, - unsigned flags, void *flush_ctx) +static void *radeon_bo_map(struct radeon_winsys_cs_handle *buf, + struct radeon_winsys_cs *rcs, + enum pipe_transfer_usage usage) { - struct radeon_bo *bo = radeon_bo(_buf); - struct radeon_drm_cs *cs = flush_ctx; - struct drm_radeon_gem_mmap args; + struct radeon_bo *bo = (struct radeon_bo*)buf; + struct radeon_drm_cs *cs = (struct radeon_drm_cs*)rcs; + struct drm_radeon_gem_mmap args = {0}; void *ptr; - memset(&args, 0, sizeof(args)); - /* If it's not unsynchronized bo_map, flush CS if needed and then wait. */ - if (!(flags & PB_USAGE_UNSYNCHRONIZED)) { + if (!(usage & PIPE_TRANSFER_UNSYNCHRONIZED)) { /* DONTBLOCK doesn't make sense with UNSYNCHRONIZED. */ - if (flags & PB_USAGE_DONTBLOCK) { - if (!(flags & PB_USAGE_CPU_WRITE)) { + if (usage & PIPE_TRANSFER_DONTBLOCK) { + if (!(usage & PIPE_TRANSFER_WRITE)) { /* Mapping for read. * * Since we are mapping for read, we don't need to wait @@ -389,7 +372,7 @@ static void *radeon_bo_map_internal(struct pb_buffer *_buf, } } } else { - if (!(flags & PB_USAGE_CPU_WRITE)) { + if (!(usage & PIPE_TRANSFER_WRITE)) { /* Mapping for read. * * Since we are mapping for read, we don't need to wait @@ -454,7 +437,7 @@ static void *radeon_bo_map_internal(struct pb_buffer *_buf, return bo->ptr; } -static void radeon_bo_unmap_internal(struct pb_buffer *_buf) +static void radeon_bo_unmap(struct radeon_winsys_cs_handle *_buf) { /* NOP */ } @@ -482,8 +465,8 @@ static void radeon_bo_fence(struct pb_buffer *buf, const struct pb_vtbl radeon_bo_vtbl = { radeon_bo_destroy, - radeon_bo_map_internal, - radeon_bo_unmap_internal, + NULL, /* never called */ + NULL, /* never called */ radeon_bo_validate, radeon_bo_fence, radeon_bo_get_base_buffer, @@ -634,13 +617,6 @@ struct pb_manager *radeon_bomgr_create(struct radeon_drm_winsys *rws) return &mgr->base; } -static void *radeon_bo_map(struct pb_buffer *buf, - struct radeon_winsys_cs *cs, - enum pipe_transfer_usage usage) -{ - return pb_map(buf, get_pb_usage_from_transfer_flags(usage), cs); -} - static unsigned eg_tile_split(unsigned tile_split) { switch (tile_split) { @@ -909,7 +885,7 @@ void radeon_bomgr_init_functions(struct radeon_drm_winsys *ws) ws->base.buffer_set_tiling = radeon_bo_set_tiling; ws->base.buffer_get_tiling = radeon_bo_get_tiling; ws->base.buffer_map = radeon_bo_map; - ws->base.buffer_unmap = pb_unmap; + ws->base.buffer_unmap = radeon_bo_unmap; ws->base.buffer_wait = radeon_bo_wait; ws->base.buffer_is_busy = radeon_bo_is_busy; ws->base.buffer_create = radeon_winsys_bo_create; diff --git a/src/gallium/winsys/radeon/drm/radeon_winsys.h b/src/gallium/winsys/radeon/drm/radeon_winsys.h index 6eef6b16200..99768248644 100644 --- a/src/gallium/winsys/radeon/drm/radeon_winsys.h +++ b/src/gallium/winsys/radeon/drm/radeon_winsys.h @@ -158,7 +158,7 @@ struct radeon_winsys { * \param usage A bitmask of the PIPE_TRANSFER_* flags. * \return The pointer at the beginning of the buffer. */ - void *(*buffer_map)(struct pb_buffer *buf, + void *(*buffer_map)(struct radeon_winsys_cs_handle *buf, struct radeon_winsys_cs *cs, enum pipe_transfer_usage usage); @@ -167,7 +167,7 @@ struct radeon_winsys { * * \param buf A winsys buffer object to unmap. */ - void (*buffer_unmap)(struct pb_buffer *buf); + void (*buffer_unmap)(struct radeon_winsys_cs_handle *buf); /** * Return TRUE if a buffer object is being used by the GPU. |