util: fix MSVC signed/unsigned comparison warning in u_vbuf.c code
[mesa.git] / src / gallium / auxiliary / util / u_vbuf.c
index e60378c31c7e789720c7c97bba3e76d4fa27df19..1cc83c3dd39981da369dd66fc407a013dd7da3fa 100644 (file)
@@ -98,7 +98,7 @@ struct u_vbuf {
    /* Vertex buffers for the driver.
     * There are no user buffers. */
    struct pipe_vertex_buffer real_vertex_buffer[PIPE_MAX_ATTRIBS];
-   int nr_real_vertex_buffers;
+   unsigned nr_real_vertex_buffers;
    boolean vertex_buffers_dirty;
 
    /* The index buffer. */
@@ -225,7 +225,9 @@ u_vbuf_set_vertex_elements_internal(struct u_vbuf *mgr, unsigned count,
    }
 
    assert(ve);
-   pipe->bind_vertex_elements_state(pipe, ve->driver_cso);
+
+   if (ve != mgr->ve)
+          pipe->bind_vertex_elements_state(pipe, ve->driver_cso);
    return ve;
 }
 
@@ -307,10 +309,10 @@ u_vbuf_translate_buffers(struct u_vbuf *mgr, struct translate_key *key,
       unsigned offset = ib->offset + start_index * ib->index_size;
       uint8_t *map;
 
-      assert(ib->buffer && ib->index_size);
+      assert((ib->buffer || ib->user_buffer) && ib->index_size);
 
-      if (ib->buffer->user_ptr) {
-         map = ib->buffer->user_ptr + offset;
+      if (ib->user_buffer) {
+         map = (uint8_t*)ib->user_buffer + offset;
       } else {
          map = pipe_buffer_map_range(mgr->pipe, ib->buffer, offset,
                                      num_indices * ib->index_size,
@@ -717,6 +719,7 @@ void u_vbuf_set_vertex_buffers(struct u_vbuf *mgr, unsigned count,
 
       real_vb->buffer_offset = orig_vb->buffer_offset = vb->buffer_offset;
       real_vb->stride = orig_vb->stride = vb->stride;
+      real_vb->user_buffer = NULL;
 
       if (vb->stride) {
          mgr->nonzero_stride_vb_mask |= 1 << i;
@@ -741,6 +744,7 @@ void u_vbuf_set_vertex_buffers(struct u_vbuf *mgr, unsigned count,
       }
 
       pipe_resource_reference(&real_vb->buffer, vb->buffer);
+      real_vb->user_buffer = vb->user_buffer;
    }
 
    for (i = count; i < mgr->nr_vertex_buffers; i++) {
@@ -760,11 +764,10 @@ void u_vbuf_set_index_buffer(struct u_vbuf *mgr,
 {
    struct pipe_context *pipe = mgr->pipe;
 
-   if (ib && ib->buffer) {
+   if (ib) {
       assert(ib->offset % ib->index_size == 0);
       pipe_resource_reference(&mgr->index_buffer.buffer, ib->buffer);
-      mgr->index_buffer.offset = ib->offset;
-      mgr->index_buffer.index_size = ib->index_size;
+      memcpy(&mgr->index_buffer, ib, sizeof(*ib));
    } else {
       pipe_resource_reference(&mgr->index_buffer.buffer, NULL);
    }
@@ -887,8 +890,8 @@ static void u_vbuf_get_minmax_index(struct pipe_context *pipe,
    unsigned i;
    unsigned restart_index = info->restart_index;
 
-   if (ib->buffer->user_ptr) {
-      indices = ib->buffer->user_ptr +
+   if (ib->user_buffer) {
+      indices = (uint8_t*)ib->user_buffer +
                 ib->offset + info->start * ib->index_size;
    } else {
       indices = pipe_buffer_map_range(pipe, ib->buffer,