Re: [Mesa-dev] [PATCH 1/2] gallium/u_vbuf: split u_vbuf_get_minmax_index function (v2)

2018-07-27 Thread Eric Anholt
Marek Olšák  writes:

> From: Marek Olšák 
>
> This will be used by indirect multidraws.
>
> v2: clean up the function further, change return types to unsigned

Reviewed-by: Eric Anholt 


signature.asc
Description: PGP signature
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 1/2] gallium/u_vbuf: split u_vbuf_get_minmax_index function (v2)

2018-07-23 Thread Marek Olšák
From: Marek Olšák 

This will be used by indirect multidraws.

v2: clean up the function further, change return types to unsigned
---
 src/gallium/auxiliary/util/u_vbuf.c | 101 ++--
 1 file changed, 51 insertions(+), 50 deletions(-)

diff --git a/src/gallium/auxiliary/util/u_vbuf.c 
b/src/gallium/auxiliary/util/u_vbuf.c
index c04a18a6764..746ff1085ce 100644
--- a/src/gallium/auxiliary/util/u_vbuf.c
+++ b/src/gallium/auxiliary/util/u_vbuf.c
@@ -1015,111 +1015,111 @@ static boolean 
u_vbuf_mapping_vertex_buffer_blocks(const struct u_vbuf *mgr)
 * We could query whether each buffer is busy, but that would
 * be way more costly than this. */
return (mgr->ve->used_vb_mask &
(~mgr->user_vb_mask &
 ~mgr->incompatible_vb_mask &
 mgr->ve->compatible_vb_mask_all &
 mgr->ve->noninstance_vb_mask_any &
 mgr->nonzero_stride_vb_mask)) != 0;
 }
 
-static void u_vbuf_get_minmax_index(struct pipe_context *pipe,
-const struct pipe_draw_info *info,
-int *out_min_index, int *out_max_index)
+static void
+u_vbuf_get_minmax_index_mapped(const struct pipe_draw_info *info,
+   const void *indices, unsigned *out_min_index,
+   unsigned *out_max_index)
 {
-   struct pipe_transfer *transfer = NULL;
-   const void *indices;
-   unsigned i;
-
-   if (info->has_user_indices) {
-  indices = (uint8_t*)info->index.user +
-info->start * info->index_size;
-   } else {
-  indices = pipe_buffer_map_range(pipe, info->index.resource,
-  info->start * info->index_size,
-  info->count * info->index_size,
-  PIPE_TRANSFER_READ, );
-   }
+   unsigned max = 0;
+   unsigned min = ~0u;
 
switch (info->index_size) {
case 4: {
   const unsigned *ui_indices = (const unsigned*)indices;
-  unsigned max_ui = 0;
-  unsigned min_ui = ~0U;
   if (info->primitive_restart) {
- for (i = 0; i < info->count; i++) {
+ for (unsigned i = 0; i < info->count; i++) {
 if (ui_indices[i] != info->restart_index) {
-   if (ui_indices[i] > max_ui) max_ui = ui_indices[i];
-   if (ui_indices[i] < min_ui) min_ui = ui_indices[i];
+   if (ui_indices[i] > max) max = ui_indices[i];
+   if (ui_indices[i] < min) min = ui_indices[i];
 }
  }
   }
   else {
- for (i = 0; i < info->count; i++) {
-if (ui_indices[i] > max_ui) max_ui = ui_indices[i];
-if (ui_indices[i] < min_ui) min_ui = ui_indices[i];
+ for (unsigned i = 0; i < info->count; i++) {
+if (ui_indices[i] > max) max = ui_indices[i];
+if (ui_indices[i] < min) min = ui_indices[i];
  }
   }
-  *out_min_index = min_ui;
-  *out_max_index = max_ui;
   break;
}
case 2: {
   const unsigned short *us_indices = (const unsigned short*)indices;
-  unsigned max_us = 0;
-  unsigned min_us = ~0U;
   if (info->primitive_restart) {
- for (i = 0; i < info->count; i++) {
+ for (unsigned i = 0; i < info->count; i++) {
 if (us_indices[i] != info->restart_index) {
-   if (us_indices[i] > max_us) max_us = us_indices[i];
-   if (us_indices[i] < min_us) min_us = us_indices[i];
+   if (us_indices[i] > max) max = us_indices[i];
+   if (us_indices[i] < min) min = us_indices[i];
 }
  }
   }
   else {
- for (i = 0; i < info->count; i++) {
-if (us_indices[i] > max_us) max_us = us_indices[i];
-if (us_indices[i] < min_us) min_us = us_indices[i];
+ for (unsigned i = 0; i < info->count; i++) {
+if (us_indices[i] > max) max = us_indices[i];
+if (us_indices[i] < min) min = us_indices[i];
  }
   }
-  *out_min_index = min_us;
-  *out_max_index = max_us;
   break;
}
case 1: {
   const unsigned char *ub_indices = (const unsigned char*)indices;
-  unsigned max_ub = 0;
-  unsigned min_ub = ~0U;
   if (info->primitive_restart) {
- for (i = 0; i < info->count; i++) {
+ for (unsigned i = 0; i < info->count; i++) {
 if (ub_indices[i] != info->restart_index) {
-   if (ub_indices[i] > max_ub) max_ub = ub_indices[i];
-   if (ub_indices[i] < min_ub) min_ub = ub_indices[i];
+   if (ub_indices[i] > max) max = ub_indices[i];
+   if (ub_indices[i] < min) min = ub_indices[i];
 }
  }
   }
   else {
- for (i = 0; i < info->count; i++) {
-if (ub_indices[i] > max_ub) max_ub = ub_indices[i];
-if (ub_indices[i] < min_ub) min_ub = ub_indices[i];
+ for