X-Git-Url: https://git.libre-soc.org/?p=mesa.git;a=blobdiff_plain;f=src%2Fgallium%2Fauxiliary%2Futil%2Fu_prim_restart.c;h=10e39e240dbf2b2f1e86954cda84ddff5017b083;hp=a4d7c1433d97ca8e3bc0c6b9efc76c6cb3232fa8;hb=88c4680b5a50ea8840c38aa0a80acde63ef1677b;hpb=84e71ef2ee4ab4a781aa86a7239036257e5992ce diff --git a/src/gallium/auxiliary/util/u_prim_restart.c b/src/gallium/auxiliary/util/u_prim_restart.c index a4d7c1433d9..10e39e240db 100644 --- a/src/gallium/auxiliary/util/u_prim_restart.c +++ b/src/gallium/auxiliary/util/u_prim_restart.c @@ -26,7 +26,7 @@ #include "u_inlines.h" -#include "u_memory.h" +#include "util/u_memory.h" #include "u_prim_restart.h" @@ -39,28 +39,26 @@ */ enum pipe_error util_translate_prim_restart_ib(struct pipe_context *context, - struct pipe_index_buffer *src_buffer, - struct pipe_resource **dst_buffer, - unsigned num_indexes, - unsigned restart_index) + const struct pipe_draw_info *info, + struct pipe_resource **dst_buffer) { struct pipe_screen *screen = context->screen; struct pipe_transfer *src_transfer = NULL, *dst_transfer = NULL; void *src_map = NULL, *dst_map = NULL; - const unsigned src_index_size = src_buffer->index_size; + const unsigned src_index_size = info->index_size; unsigned dst_index_size; /* 1-byte indexes are converted to 2-byte indexes, 4-byte stays 4-byte */ - dst_index_size = MAX2(2, src_buffer->index_size); + dst_index_size = MAX2(2, info->index_size); assert(dst_index_size == 2 || dst_index_size == 4); /* no user buffers for now */ - assert(src_buffer->user_buffer == NULL); + assert(!info->has_user_indices); /* Create new index buffer */ *dst_buffer = pipe_buffer_create(screen, PIPE_BIND_INDEX_BUFFER, PIPE_USAGE_STREAM, - num_indexes * dst_index_size); + info->count * dst_index_size); if (!*dst_buffer) goto error; @@ -71,9 +69,9 @@ util_translate_prim_restart_ib(struct pipe_context *context, goto error; /* Map original / src index buffer */ - src_map = pipe_buffer_map_range(context, src_buffer->buffer, - src_buffer->offset, - num_indexes * src_index_size, + src_map = pipe_buffer_map_range(context, info->index.resource, + info->start * src_index_size, + info->count * src_index_size, PIPE_TRANSFER_READ, &src_transfer); if (!src_map) @@ -83,16 +81,16 @@ util_translate_prim_restart_ib(struct pipe_context *context, uint8_t *src = (uint8_t *) src_map; uint16_t *dst = (uint16_t *) dst_map; unsigned i; - for (i = 0; i < num_indexes; i++) { - dst[i] = (src[i] == restart_index) ? 0xffff : src[i]; + for (i = 0; i < info->count; i++) { + dst[i] = (src[i] == info->restart_index) ? 0xffff : src[i]; } } else if (src_index_size == 2 && dst_index_size == 2) { uint16_t *src = (uint16_t *) src_map; uint16_t *dst = (uint16_t *) dst_map; unsigned i; - for (i = 0; i < num_indexes; i++) { - dst[i] = (src[i] == restart_index) ? 0xffff : src[i]; + for (i = 0; i < info->count; i++) { + dst[i] = (src[i] == info->restart_index) ? 0xffff : src[i]; } } else { @@ -101,8 +99,8 @@ util_translate_prim_restart_ib(struct pipe_context *context, unsigned i; assert(src_index_size == 4); assert(dst_index_size == 4); - for (i = 0; i < num_indexes; i++) { - dst[i] = (src[i] == restart_index) ? 0xffffffff : src[i]; + for (i = 0; i < info->count; i++) { + dst[i] = (src[i] == info->restart_index) ? 0xffffffff : src[i]; } } @@ -117,7 +115,7 @@ error: if (dst_transfer) pipe_buffer_unmap(context, dst_transfer); if (*dst_buffer) - screen->resource_destroy(screen, *dst_buffer); + pipe_resource_reference(dst_buffer, NULL); return PIPE_ERROR_OUT_OF_MEMORY; } @@ -177,7 +175,6 @@ add_range(struct range_info *info, unsigned start, unsigned count) */ enum pipe_error util_draw_vbo_without_prim_restart(struct pipe_context *context, - const struct pipe_index_buffer *ib, const struct pipe_draw_info *info) { const void *src_map; @@ -186,15 +183,15 @@ util_draw_vbo_without_prim_restart(struct pipe_context *context, struct pipe_transfer *src_transfer = NULL; unsigned i, start, count; - assert(info->indexed); + assert(info->index_size); assert(info->primitive_restart); /* Get pointer to the index data */ - if (ib->buffer) { + if (!info->has_user_indices) { /* map the index buffer (only the range we need to scan) */ - src_map = pipe_buffer_map_range(context, ib->buffer, - ib->offset + info->start * ib->index_size, - info->count * ib->index_size, + src_map = pipe_buffer_map_range(context, info->index.resource, + info->start * info->index_size, + info->count * info->index_size, PIPE_TRANSFER_READ, &src_transfer); if (!src_map) { @@ -202,13 +199,12 @@ util_draw_vbo_without_prim_restart(struct pipe_context *context, } } else { - if (!ib->user_buffer) { + if (!info->index.user) { debug_printf("User-space index buffer is null!"); return PIPE_ERROR_BAD_INPUT; } - src_map = (const uint8_t *) ib->user_buffer - + ib->offset - + info->start * ib->index_size; + src_map = (const uint8_t *) info->index.user + + info->start * info->index_size; } #define SCAN_INDEXES(TYPE) \ @@ -231,9 +227,9 @@ util_draw_vbo_without_prim_restart(struct pipe_context *context, } \ } - start = info->start; + start = 0; count = 0; - switch (ib->index_size) { + switch (info->index_size) { case 1: SCAN_INDEXES(uint8_t); break;