diff options
author | Marek Olšák <[email protected]> | 2012-01-01 17:12:35 +0100 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2012-01-05 18:29:11 +0100 |
commit | 214b87aa0469a12ea72d624cfaee0ca46179ec5f (patch) | |
tree | 1ccbe951a20a1443b21343d36749a83eae31fbfd /src | |
parent | fb0aa34fab77fe8a7fc3253d5ecf635ce37a21c7 (diff) |
gallium: fix behavior of pipe_buffer_map_range
To match what transfer_map returns. Really, subtracting the offset leads
to bugs if someone expects it to work exactly like transfer_map.
Reviewed-by: Brian Paul <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/auxiliary/util/u_inlines.h | 7 | ||||
-rw-r--r-- | src/gallium/auxiliary/util/u_upload_mgr.c | 4 | ||||
-rw-r--r-- | src/gallium/drivers/svga/svga_state_vs.c | 1 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_cb_bufferobjects.c | 4 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_draw.c | 11 |
5 files changed, 12 insertions, 15 deletions
diff --git a/src/gallium/auxiliary/util/u_inlines.h b/src/gallium/auxiliary/util/u_inlines.h index 44283909aec..9660cdc6eae 100644 --- a/src/gallium/auxiliary/util/u_inlines.h +++ b/src/gallium/auxiliary/util/u_inlines.h @@ -252,10 +252,7 @@ pipe_buffer_map_range(struct pipe_context *pipe, return NULL; } - /* Match old screen->buffer_map_range() behaviour, return pointer - * to where the beginning of the buffer would be: - */ - return (void *)((char *)map - offset); + return map; } @@ -374,7 +371,7 @@ pipe_buffer_read(struct pipe_context *pipe, &src_transfer); if (map) - memcpy(data, map + offset, size); + memcpy(data, map, size); pipe_buffer_unmap(pipe, src_transfer); } diff --git a/src/gallium/auxiliary/util/u_upload_mgr.c b/src/gallium/auxiliary/util/u_upload_mgr.c index a2319d0c436..936e881d9c0 100644 --- a/src/gallium/auxiliary/util/u_upload_mgr.c +++ b/src/gallium/auxiliary/util/u_upload_mgr.c @@ -192,6 +192,8 @@ enum pipe_error u_upload_alloc( struct u_upload_mgr *upload, *ptr = NULL; return PIPE_ERROR_OUT_OF_MEMORY; } + + upload->map -= offset; } assert(offset < upload->buffer->width0); @@ -261,7 +263,7 @@ enum pipe_error u_upload_buffer( struct u_upload_mgr *upload, ret = u_upload_data( upload, min_out_offset, size, - map + offset, + map, out_offset, outbuf, flushed ); diff --git a/src/gallium/drivers/svga/svga_state_vs.c b/src/gallium/drivers/svga/svga_state_vs.c index 3d3caea7449..b82e68556e4 100644 --- a/src/gallium/drivers/svga/svga_state_vs.c +++ b/src/gallium/drivers/svga/svga_state_vs.c @@ -228,6 +228,7 @@ update_zero_stride( struct svga_context *svga, util_format_get_blocksize(vel->src_format), PIPE_TRANSFER_READ, &transfer); + mapped_buffer = (uint8_t*)mapped_buffer - vel->src_offset; translate->set_buffer(translate, vel->vertex_buffer_index, mapped_buffer, diff --git a/src/mesa/state_tracker/st_cb_bufferobjects.c b/src/mesa/state_tracker/st_cb_bufferobjects.c index adac92f2c34..6d95d57c1b3 100644 --- a/src/mesa/state_tracker/st_cb_bufferobjects.c +++ b/src/mesa/state_tracker/st_cb_bufferobjects.c @@ -291,10 +291,6 @@ st_bufferobj_map_range(struct gl_context *ctx, flags, &st_obj->transfer); if (obj->Pointer) { - obj->Pointer = (ubyte *) obj->Pointer + offset; - } - - if (obj->Pointer) { obj->Offset = offset; obj->Length = length; obj->AccessFlags = access; diff --git a/src/mesa/state_tracker/st_draw.c b/src/mesa/state_tracker/st_draw.c index a21160c956d..6d6fc858de4 100644 --- a/src/mesa/state_tracker/st_draw.c +++ b/src/mesa/state_tracker/st_draw.c @@ -824,16 +824,17 @@ handle_fallback_primitive_restart(struct pipe_context *pipe, start * ibuffer->index_size, /* start */ count * ibuffer->index_size, /* length */ PIPE_TRANSFER_READ, &transfer); + if (!ptr) + return; + + ptr = (uint8_t*)ptr + (ibuffer->offset - start * ibuffer->index_size); } else { ptr = ib->ptr; + if (!ptr) + return; } - if (!ptr) - return; - - ptr = ADD_POINTERS(ptr, ibuffer->offset); - sub_prims = find_sub_primitives(ptr, ibuffer->index_size, 0, count, orig_info->restart_index, &num_sub_prims); |