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 <brianp@vmware.com>
This commit is contained in:
Marek Olšák
2012-01-01 17:12:35 +01:00
parent fb0aa34fab
commit 214b87aa04
5 changed files with 12 additions and 15 deletions
+2 -5
View File
@@ -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);
}
+3 -1
View File
@@ -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 );
+1
View File
@@ -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,
@@ -290,10 +290,6 @@ st_bufferobj_map_range(struct gl_context *ctx,
offset, length,
flags,
&st_obj->transfer);
if (obj->Pointer) {
obj->Pointer = (ubyte *) obj->Pointer + offset;
}
if (obj->Pointer) {
obj->Offset = offset;
obj->Length = length;
+6 -5
View File
@@ -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);