gallium: add pipe cap for scissored clears and pass scissor state to clear() hook
[mesa.git] / src / gallium / drivers / r300 / r300_render_translate.c
index f8c7558f4b4ef8795b8c4f810ee305b0a2bb147b..7dc49d35298335441c1eec62e28ac0c016dca0a0 100644 (file)
 
 
 void r300_translate_index_buffer(struct r300_context *r300,
-                                 struct pipe_resource **index_buffer,
+                                 const struct pipe_draw_info *info,
+                                 struct pipe_resource **out_buffer,
                                  unsigned *index_size, unsigned index_offset,
                                  unsigned *start, unsigned count)
 {
-    struct pipe_resource *out_buffer = NULL;
     unsigned out_offset;
     void *ptr;
-    boolean flushed;
 
     switch (*index_size) {
     case 1:
-        u_upload_alloc(r300->vbuf_mgr->uploader, 0, count * 2,
-                       &out_offset, &out_buffer, &flushed, &ptr);
+        *out_buffer = NULL;
+        u_upload_alloc(r300->uploader, 0, count * 2, 4,
+                       &out_offset, out_buffer, &ptr);
 
         util_shorten_ubyte_elts_to_userptr(
-                &r300->context, *index_buffer, index_offset,
+                &r300->context, info, PIPE_TRANSFER_UNSYNCHRONIZED, index_offset,
                 *start, count, ptr);
 
-       *index_buffer = NULL;
-        pipe_resource_reference(index_buffer, out_buffer);
         *index_size = 2;
         *start = out_offset / 2;
         break;
 
     case 2:
         if (index_offset) {
-            u_upload_alloc(r300->vbuf_mgr->uploader, 0, count * 2,
-                           &out_offset, &out_buffer, &flushed, &ptr);
+            *out_buffer = NULL;
+            u_upload_alloc(r300->uploader, 0, count * 2, 4,
+                           &out_offset, out_buffer, &ptr);
 
-            util_rebuild_ushort_elts_to_userptr(&r300->context, *index_buffer,
+            util_rebuild_ushort_elts_to_userptr(&r300->context, info,
+                                                PIPE_TRANSFER_UNSYNCHRONIZED,
                                                 index_offset, *start,
                                                 count, ptr);
 
-           *index_buffer = NULL;
-            pipe_resource_reference(index_buffer, out_buffer);
             *start = out_offset / 2;
         }
         break;
 
     case 4:
         if (index_offset) {
-            u_upload_alloc(r300->vbuf_mgr->uploader, 0, count * 4,
-                           &out_offset, &out_buffer, &flushed, &ptr);
+            *out_buffer = NULL;
+            u_upload_alloc(r300->uploader, 0, count * 4, 4,
+                           &out_offset, out_buffer, &ptr);
 
-            util_rebuild_uint_elts_to_userptr(&r300->context, *index_buffer,
+            util_rebuild_uint_elts_to_userptr(&r300->context, info,
+                                              PIPE_TRANSFER_UNSYNCHRONIZED,
                                               index_offset, *start,
                                               count, ptr);
 
-           *index_buffer = NULL;
-            pipe_resource_reference(index_buffer, out_buffer);
             *start = out_offset / 4;
         }
         break;