Module: Mesa Branch: master Commit: b52721e3b693e113aa537d163c8a855169e7b75d URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b52721e3b693e113aa537d163c8a855169e7b75d
Author: Nicolai Hähnle <nicolai.haeh...@amd.com> Date: Wed Apr 12 12:41:05 2017 +0200 gallium/radeon: never use staging buffers with AMD_pinned_memory Reviewed-by: Marek Olšák <marek.ol...@amd.com> Reviewed-by: Edward O'Callaghan <funfunc...@folklore1984.net> --- src/gallium/drivers/radeon/r600_buffer_common.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/radeon/r600_buffer_common.c b/src/gallium/drivers/radeon/r600_buffer_common.c index 10036afeba..0e93404c01 100644 --- a/src/gallium/drivers/radeon/r600_buffer_common.c +++ b/src/gallium/drivers/radeon/r600_buffer_common.c @@ -327,11 +327,25 @@ static void *r600_buffer_transfer_map(struct pipe_context *ctx, { struct r600_common_context *rctx = (struct r600_common_context*)ctx; struct r600_common_screen *rscreen = (struct r600_common_screen*)ctx->screen; - struct r600_resource *rbuffer = r600_resource(resource); - uint8_t *data; + struct r600_resource *rbuffer = r600_resource(resource); + uint8_t *data; assert(box->x + box->width <= resource->width0); + /* From GL_AMD_pinned_memory issues: + * + * 4) Is glMapBuffer on a shared buffer guaranteed to return the + * same system address which was specified at creation time? + * + * RESOLVED: NO. The GL implementation might return a different + * virtual mapping of that memory, although the same physical + * page will be used. + * + * So don't ever use staging buffers. + */ + if (rscreen->ws->buffer_is_user_ptr(rbuffer->buf)) + usage |= PIPE_TRANSFER_PERSISTENT; + /* See if the buffer range being mapped has never been initialized, * in which case it can be mapped unsynchronized. */ if (!(usage & PIPE_TRANSFER_UNSYNCHRONIZED) && _______________________________________________ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit