gallium: add PIPE_SHADER_CAP_GLSL_16BIT_TEMPS for LowerPrecisionTemporaries
[mesa.git] / src / gallium / drivers / svga / svga_swtnl_draw.c
index a7db73e02ee109df741321e6cd67bed95e88e5ea..b719dd400c6f08329813cb0d01b64450904d535c 100644 (file)
@@ -44,10 +44,10 @@ svga_swtnl_draw_vbo(struct svga_context *svga,
    struct pipe_transfer *ib_transfer = NULL;
    struct pipe_transfer *cb_transfer[SVGA_MAX_CONST_BUFS] = { 0 };
    struct draw_context *draw = svga->swtnl.draw;
-   MAYBE_UNUSED unsigned old_num_vertex_buffers;
+   ASSERTED unsigned old_num_vertex_buffers;
    unsigned i;
    const void *map;
-   enum pipe_error ret;
+   boolean retried;
 
    SVGA_STATS_TIME_PUSH(svga_sws(svga), SVGA_STATS_TIME_SWTNLDRAWVBO);
 
@@ -58,12 +58,9 @@ svga_swtnl_draw_vbo(struct svga_context *svga,
    /* Make sure that the need_swtnl flag does not go away */
    svga->state.sw.in_swtnl_draw = TRUE;
 
-   ret = svga_update_state(svga, SVGA_STATE_SWTNL_DRAW);
-   if (ret != PIPE_OK) {
-      svga_context_flush(svga, NULL);
-      ret = svga_update_state(svga, SVGA_STATE_SWTNL_DRAW);
+   SVGA_RETRY_CHECK(svga, svga_update_state(svga, SVGA_STATE_SWTNL_DRAW), retried);
+   if (retried) {
       svga->swtnl.new_vbuf = TRUE;
-      assert(ret == PIPE_OK);
    }
 
    /*
@@ -73,7 +70,8 @@ svga_swtnl_draw_vbo(struct svga_context *svga,
       if (svga->curr.vb[i].buffer.resource) {
          map = pipe_buffer_map(&svga->pipe,
                                svga->curr.vb[i].buffer.resource,
-                               PIPE_TRANSFER_READ,
+                               PIPE_TRANSFER_READ |
+                               PIPE_TRANSFER_UNSYNCHRONIZED,
                                &vb_transfer[i]);
 
          draw_set_mapped_vertex_buffer(draw, i, map, ~0);
@@ -88,7 +86,8 @@ svga_swtnl_draw_vbo(struct svga_context *svga,
          map = (ubyte *) info->index.user;
       } else {
          map = pipe_buffer_map(&svga->pipe, info->index.resource,
-                               PIPE_TRANSFER_READ, &ib_transfer);
+                               PIPE_TRANSFER_READ |
+                               PIPE_TRANSFER_UNSYNCHRONIZED, &ib_transfer);
       }
       draw_set_indexes(draw,
                        (const ubyte *) map,
@@ -103,7 +102,8 @@ svga_swtnl_draw_vbo(struct svga_context *svga,
 
       map = pipe_buffer_map(&svga->pipe,
                             svga->curr.constbufs[PIPE_SHADER_VERTEX][i].buffer,
-                            PIPE_TRANSFER_READ,
+                            PIPE_TRANSFER_READ |
+                            PIPE_TRANSFER_UNSYNCHRONIZED,
                             &cb_transfer[i]);
       assert(map);
       draw_set_mapped_constant_buffer(
@@ -145,7 +145,7 @@ svga_swtnl_draw_vbo(struct svga_context *svga,
    svga->dirty |= SVGA_NEW_NEED_PIPELINE | SVGA_NEW_NEED_SWVFETCH;
 
    SVGA_STATS_TIME_POP(svga_sws(svga));
-   return ret;
+   return PIPE_OK;
 }