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:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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 );
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user