gallium/u_index_modify: don't add PIPE_TRANSFER_UNSYNCHRONIZED unconditionally

It's OK for r300g (because r300g can't write to buffers via the GPU), but
not later hardware. This issue was spotted randomly.

Cc: mesa-stable@lists.freedesktop.org
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
(cherry picked from commit c8ef5123980f9f538c79e626b0092660a2256ae6)
diff --git a/src/gallium/auxiliary/util/u_index_modify.c b/src/gallium/auxiliary/util/u_index_modify.c
index 5c4fc3c..7b072b2 100644
--- a/src/gallium/auxiliary/util/u_index_modify.c
+++ b/src/gallium/auxiliary/util/u_index_modify.c
@@ -28,6 +28,7 @@
 
 void util_shorten_ubyte_elts_to_userptr(struct pipe_context *context,
 					struct pipe_index_buffer *ib,
+                                        unsigned add_transfer_flags,
 					int index_bias,
 					unsigned start,
 					unsigned count,
@@ -43,7 +44,7 @@
     } else {
        in_map = pipe_buffer_map(context, ib->buffer,
                                 PIPE_TRANSFER_READ |
-                                PIPE_TRANSFER_UNSYNCHRONIZED,
+                                add_transfer_flags,
                                 &src_transfer);
     }
     in_map += start;
@@ -62,6 +63,7 @@
 
 void util_rebuild_ushort_elts_to_userptr(struct pipe_context *context,
 					 struct pipe_index_buffer *ib,
+                                         unsigned add_transfer_flags,
 					 int index_bias,
 					 unsigned start, unsigned count,
 					 void *out)
@@ -76,7 +78,7 @@
     } else {
        in_map = pipe_buffer_map(context, ib->buffer,
                                 PIPE_TRANSFER_READ |
-                                PIPE_TRANSFER_UNSYNCHRONIZED,
+                                add_transfer_flags,
                                 &in_transfer);
     }
     in_map += start;
@@ -95,6 +97,7 @@
 
 void util_rebuild_uint_elts_to_userptr(struct pipe_context *context,
 				       struct pipe_index_buffer *ib,
+                                       unsigned add_transfer_flags,
 				       int index_bias,
 				       unsigned start, unsigned count,
 				       void *out)
@@ -109,7 +112,7 @@
     } else {
        in_map = pipe_buffer_map(context, ib->buffer,
                                 PIPE_TRANSFER_READ |
-                                PIPE_TRANSFER_UNSYNCHRONIZED,
+                                add_transfer_flags,
                                 &in_transfer);
     }
     in_map += start;
diff --git a/src/gallium/auxiliary/util/u_index_modify.h b/src/gallium/auxiliary/util/u_index_modify.h
index 1d34b12..0cfc189 100644
--- a/src/gallium/auxiliary/util/u_index_modify.h
+++ b/src/gallium/auxiliary/util/u_index_modify.h
@@ -29,6 +29,7 @@
 
 void util_shorten_ubyte_elts_to_userptr(struct pipe_context *context,
 					struct pipe_index_buffer *ib,
+                                        unsigned add_transfer_flags,
 					int index_bias,
 					unsigned start,
 					unsigned count,
@@ -36,12 +37,14 @@
 
 void util_rebuild_ushort_elts_to_userptr(struct pipe_context *context,
 					 struct pipe_index_buffer *ib,
+                                         unsigned add_transfer_flags,
 					 int index_bias,
 					 unsigned start, unsigned count,
 					 void *out);
 
 void util_rebuild_uint_elts_to_userptr(struct pipe_context *context,
 				       struct pipe_index_buffer *ib,
+                                       unsigned add_transfer_flags,
 				       int index_bias,
 				       unsigned start, unsigned count,
 				       void *out);
diff --git a/src/gallium/drivers/r300/r300_render_translate.c b/src/gallium/drivers/r300/r300_render_translate.c
index 7221211..7800f6e 100644
--- a/src/gallium/drivers/r300/r300_render_translate.c
+++ b/src/gallium/drivers/r300/r300_render_translate.c
@@ -41,7 +41,7 @@
                        &out_offset, out_buffer, &ptr);
 
         util_shorten_ubyte_elts_to_userptr(
-                &r300->context, ib, index_offset,
+                &r300->context, ib, PIPE_TRANSFER_UNSYNCHRONIZED, index_offset,
                 *start, count, ptr);
 
         *index_size = 2;
@@ -55,6 +55,7 @@
                            &out_offset, out_buffer, &ptr);
 
             util_rebuild_ushort_elts_to_userptr(&r300->context, ib,
+                                                PIPE_TRANSFER_UNSYNCHRONIZED,
                                                 index_offset, *start,
                                                 count, ptr);
 
@@ -69,6 +70,7 @@
                            &out_offset, out_buffer, &ptr);
 
             util_rebuild_uint_elts_to_userptr(&r300->context, ib,
+                                              PIPE_TRANSFER_UNSYNCHRONIZED,
                                               index_offset, *start,
                                               count, ptr);
 
diff --git a/src/gallium/drivers/r600/r600_state_common.c b/src/gallium/drivers/r600/r600_state_common.c
index a9dbc8b..bfeaadc 100644
--- a/src/gallium/drivers/r600/r600_state_common.c
+++ b/src/gallium/drivers/r600/r600_state_common.c
@@ -1740,7 +1740,7 @@
 				       &out_offset, &out_buffer, &ptr);
 
 			util_shorten_ubyte_elts_to_userptr(
-						&rctx->b.b, &ib, 0, ib.offset + start, count, ptr);
+						&rctx->b.b, &ib, 0, 0, ib.offset + start, count, ptr);
 
 			pipe_resource_reference(&ib.buffer, NULL);
 			ib.user_buffer = NULL;
diff --git a/src/gallium/drivers/radeonsi/si_state_draw.c b/src/gallium/drivers/radeonsi/si_state_draw.c
index 4bd087c..2ea1168 100644
--- a/src/gallium/drivers/radeonsi/si_state_draw.c
+++ b/src/gallium/drivers/radeonsi/si_state_draw.c
@@ -1069,7 +1069,7 @@
 				return;
 			}
 
-			util_shorten_ubyte_elts_to_userptr(&sctx->b.b, &ib, 0,
+			util_shorten_ubyte_elts_to_userptr(&sctx->b.b, &ib, 0, 0,
 							   ib.offset + start,
 							   count, ptr);