diff options
author | Jonathan Gray <jsg@cvs.openbsd.org> | 2015-11-22 02:46:45 +0000 |
---|---|---|
committer | Jonathan Gray <jsg@cvs.openbsd.org> | 2015-11-22 02:46:45 +0000 |
commit | 3e40341f9dcd7c1bbc9afb8ddb812304820396cf (patch) | |
tree | 274b3f522afe1da16ab2b5347758c908bc23fac4 /lib/mesa/src/gallium/auxiliary/util/u_index_modify.c | |
parent | 7b644ad52b574bec410d557155d666ac17fdf51a (diff) |
import Mesa 11.0.6
Diffstat (limited to 'lib/mesa/src/gallium/auxiliary/util/u_index_modify.c')
-rw-r--r-- | lib/mesa/src/gallium/auxiliary/util/u_index_modify.c | 93 |
1 files changed, 84 insertions, 9 deletions
diff --git a/lib/mesa/src/gallium/auxiliary/util/u_index_modify.c b/lib/mesa/src/gallium/auxiliary/util/u_index_modify.c index d86be24bc..e13489482 100644 --- a/lib/mesa/src/gallium/auxiliary/util/u_index_modify.c +++ b/lib/mesa/src/gallium/auxiliary/util/u_index_modify.c @@ -27,8 +27,7 @@ /* Ubyte indices. */ void util_shorten_ubyte_elts_to_userptr(struct pipe_context *context, - const struct pipe_index_buffer *ib, - unsigned add_transfer_flags, + struct pipe_index_buffer *ib, int index_bias, unsigned start, unsigned count, @@ -44,7 +43,7 @@ void util_shorten_ubyte_elts_to_userptr(struct pipe_context *context, } else { in_map = pipe_buffer_map(context, ib->buffer, PIPE_TRANSFER_READ | - add_transfer_flags, + PIPE_TRANSFER_UNSYNCHRONIZED, &src_transfer); } in_map += start; @@ -59,11 +58,37 @@ void util_shorten_ubyte_elts_to_userptr(struct pipe_context *context, pipe_buffer_unmap(context, src_transfer); } +void util_shorten_ubyte_elts(struct pipe_context *context, + struct pipe_index_buffer *ib, + struct pipe_resource **out_buf, + int index_bias, + unsigned start, + unsigned count) +{ + struct pipe_resource* new_elts; + unsigned short *out_map; + struct pipe_transfer *dst_transfer; + + new_elts = pipe_buffer_create(context->screen, + PIPE_BIND_INDEX_BUFFER, + PIPE_USAGE_DEFAULT, + 2 * count); + + out_map = pipe_buffer_map(context, new_elts, PIPE_TRANSFER_WRITE, + &dst_transfer); + util_shorten_ubyte_elts_to_userptr(context, ib, index_bias, + start, count, out_map); + pipe_buffer_unmap(context, dst_transfer); + + pipe_resource_reference(out_buf, NULL); + *out_buf = new_elts; +} + + /* Ushort indices. */ void util_rebuild_ushort_elts_to_userptr(struct pipe_context *context, - const struct pipe_index_buffer *ib, - unsigned add_transfer_flags, + struct pipe_index_buffer *ib, int index_bias, unsigned start, unsigned count, void *out) @@ -78,7 +103,7 @@ void util_rebuild_ushort_elts_to_userptr(struct pipe_context *context, } else { in_map = pipe_buffer_map(context, ib->buffer, PIPE_TRANSFER_READ | - add_transfer_flags, + PIPE_TRANSFER_UNSYNCHRONIZED, &in_transfer); } in_map += start; @@ -93,11 +118,36 @@ void util_rebuild_ushort_elts_to_userptr(struct pipe_context *context, pipe_buffer_unmap(context, in_transfer); } +void util_rebuild_ushort_elts(struct pipe_context *context, + struct pipe_index_buffer *ib, + struct pipe_resource **out_buf, + int index_bias, + unsigned start, unsigned count) +{ + struct pipe_transfer *out_transfer = NULL; + struct pipe_resource *new_elts; + unsigned short *out_map; + + new_elts = pipe_buffer_create(context->screen, + PIPE_BIND_INDEX_BUFFER, + PIPE_USAGE_DEFAULT, + 2 * count); + + out_map = pipe_buffer_map(context, new_elts, + PIPE_TRANSFER_WRITE, &out_transfer); + util_rebuild_ushort_elts_to_userptr(context, ib, index_bias, + start, count, out_map); + pipe_buffer_unmap(context, out_transfer); + + pipe_resource_reference(out_buf, NULL); + *out_buf = new_elts; +} + + /* Uint indices. */ void util_rebuild_uint_elts_to_userptr(struct pipe_context *context, - const struct pipe_index_buffer *ib, - unsigned add_transfer_flags, + struct pipe_index_buffer *ib, int index_bias, unsigned start, unsigned count, void *out) @@ -112,7 +162,7 @@ void util_rebuild_uint_elts_to_userptr(struct pipe_context *context, } else { in_map = pipe_buffer_map(context, ib->buffer, PIPE_TRANSFER_READ | - add_transfer_flags, + PIPE_TRANSFER_UNSYNCHRONIZED, &in_transfer); } in_map += start; @@ -126,3 +176,28 @@ void util_rebuild_uint_elts_to_userptr(struct pipe_context *context, if (in_transfer) pipe_buffer_unmap(context, in_transfer); } + +void util_rebuild_uint_elts(struct pipe_context *context, + struct pipe_index_buffer *ib, + struct pipe_resource **out_buf, + int index_bias, + unsigned start, unsigned count) +{ + struct pipe_transfer *out_transfer = NULL; + struct pipe_resource *new_elts; + unsigned int *out_map; + + new_elts = pipe_buffer_create(context->screen, + PIPE_BIND_INDEX_BUFFER, + PIPE_USAGE_DEFAULT, + 2 * count); + + out_map = pipe_buffer_map(context, new_elts, + PIPE_TRANSFER_WRITE, &out_transfer); + util_rebuild_uint_elts_to_userptr(context, ib, index_bias, + start, count, out_map); + pipe_buffer_unmap(context, out_transfer); + + pipe_resource_reference(out_buf, NULL); + *out_buf = new_elts; +} |