[Mesa-dev] [PATCH] st/nine: make use of common uploaders v4

Constantine Charlamov Hi-Angel at yandex.ru
Tue Feb 21 20:37:32 UTC 2017


On 21.02.2017 23:28, Axel Davy wrote:
> This looks fine to me.
>
> Reviewed-by: Axel Davy <axel.davy at ens.fr>
>
> I think the patch requires your Signed-off-by though.
>
> Axel
>

v2: fixed formatting, broken due to thunderbird configuration

v3: per Axel comment: added a comment into NineDevice9_DrawPrimitiveUP

v4: per Axel comment: changed style of the comment

Signed-off-by: Constantine Charlamov <Hi-Angel at yandex.ru>

 ---
 src/gallium/state_trackers/nine/device9.c    | 50 +++++-----------------------
 src/gallium/state_trackers/nine/device9.h    |  5 ---
 src/gallium/state_trackers/nine/nine_ff.c    |  8 ++---
 src/gallium/state_trackers/nine/nine_state.c | 48 +++++++++++++-------------
 4 files changed, 37 insertions(+), 74 deletions(-)

diff --git a/src/gallium/state_trackers/nine/device9.c b/src/gallium/state_trackers/nine/device9.c
index b9b7a637d7..86c8e38535 100644
--- a/src/gallium/state_trackers/nine/device9.c
+++ b/src/gallium/state_trackers/nine/device9.c
@@ -477,31 +477,8 @@ NineDevice9_ctor( struct NineDevice9 *This,
     This->driver_caps.user_cbufs = GET_PCAP(USER_CONSTANT_BUFFERS);
     This->driver_caps.user_sw_vbufs = This->screen_sw->get_param(This->screen_sw, PIPE_CAP_USER_VERTEX_BUFFERS);
     This->driver_caps.user_sw_cbufs = This->screen_sw->get_param(This->screen_sw, PIPE_CAP_USER_CONSTANT_BUFFERS);
-
-    /* Implicit use of context pipe for vertex and index uploaded when
-     * csmt is not active. Does not need to sync since csmt is unactive,
-     * thus no need to call NineDevice9_GetPipe at each upload. */
-    if (!This->driver_caps.user_vbufs)
-        This->vertex_uploader = u_upload_create(This->csmt_active ?
-                                                    This->pipe_secondary : This->context.pipe,
-                                                65536,
-                                                PIPE_BIND_VERTEX_BUFFER, PIPE_USAGE_STREAM);
-    This->vertex_sw_uploader = u_upload_create(This->pipe_sw, 65536,
-                                            PIPE_BIND_VERTEX_BUFFER, PIPE_USAGE_STREAM);
-    if (!This->driver_caps.user_ibufs)
-        This->index_uploader = u_upload_create(This->csmt_active ?
-                                                    This->pipe_secondary : This->context.pipe,
-                                               128 * 1024,
-                                               PIPE_BIND_INDEX_BUFFER, PIPE_USAGE_STREAM);
-    if (!This->driver_caps.user_cbufs) {
+    if (!This->driver_caps.user_cbufs)
         This->constbuf_alignment = GET_PCAP(CONSTANT_BUFFER_OFFSET_ALIGNMENT);
-        This->constbuf_uploader = u_upload_create(This->context.pipe, This->vs_const_size,
-                                                  PIPE_BIND_CONSTANT_BUFFER, PIPE_USAGE_STREAM);
-    }
-
-    This->constbuf_sw_uploader = u_upload_create(This->pipe_sw, 128 * 1024,
-                                                 PIPE_BIND_CONSTANT_BUFFER, PIPE_USAGE_STREAM);
-
     This->driver_caps.window_space_position_support = GET_PCAP(TGSI_VS_WINDOW_SPACE_POSITION);
     This->driver_caps.vs_integer = pScreen->get_shader_param(pScreen, PIPE_SHADER_VERTEX, PIPE_SHADER_CAP_INTEGERS);
     This->driver_caps.ps_integer = pScreen->get_shader_param(pScreen, PIPE_SHADER_FRAGMENT, PIPE_SHADER_CAP_INTEGERS);
@@ -552,17 +529,6 @@ NineDevice9_dtor( struct NineDevice9 *This )
     nine_state_clear(&This->state, TRUE);
     nine_context_clear(This);
 
-    if (This->vertex_uploader)
-        u_upload_destroy(This->vertex_uploader);
-    if (This->index_uploader)
-        u_upload_destroy(This->index_uploader);
-    if (This->constbuf_uploader)
-        u_upload_destroy(This->constbuf_uploader);
-    if (This->vertex_sw_uploader)
-        u_upload_destroy(This->vertex_sw_uploader);
-    if (This->constbuf_sw_uploader)
-        u_upload_destroy(This->constbuf_sw_uploader);
-
     nine_bind(&This->record, NULL);
 
     pipe_sampler_view_reference(&This->dummy_sampler_view, NULL);
@@ -2852,15 +2818,17 @@ NineDevice9_DrawPrimitiveUP( struct NineDevice9 *This,
     vtxbuf.buffer = NULL;
     vtxbuf.user_buffer = pVertexStreamZeroData;
 
+    /* csmt is unactive when user vertex or index buffers are used, thus no
+     * need to call NineDevice9_GetPipe. */
     if (!This->driver_caps.user_vbufs) {
-        u_upload_data(This->vertex_uploader,
+        u_upload_data(This->context.pipe->stream_uploader,
                       0,
                       (prim_count_to_vertex_count(PrimitiveType, PrimitiveCount)) * VertexStreamZeroStride, /* XXX */
                       4,
                       vtxbuf.user_buffer,
                       &vtxbuf.buffer_offset,
                       &vtxbuf.buffer);
-        u_upload_unmap(This->vertex_uploader);
+        u_upload_unmap(This->context.pipe->stream_uploader);
         vtxbuf.user_buffer = NULL;
     }
 
@@ -2916,27 +2884,27 @@ NineDevice9_DrawIndexedPrimitiveUP( struct NineDevice9 *This,
 
     if (!This->driver_caps.user_vbufs) {
         const unsigned base = MinVertexIndex * VertexStreamZeroStride;
-        u_upload_data(This->vertex_uploader,
+        u_upload_data(This->context.pipe->stream_uploader,
                       base,
                       NumVertices * VertexStreamZeroStride, /* XXX */
                       4,
                       (const uint8_t *)vbuf.user_buffer + base,
                       &vbuf.buffer_offset,
                       &vbuf.buffer);
-        u_upload_unmap(This->vertex_uploader);
+        u_upload_unmap(This->context.pipe->stream_uploader);
         /* Won't be used: */
         vbuf.buffer_offset -= base;
         vbuf.user_buffer = NULL;
     }
     if (!This->driver_caps.user_ibufs) {
-        u_upload_data(This->index_uploader,
+        u_upload_data(This->context.pipe->stream_uploader,
                       0,
                       (prim_count_to_vertex_count(PrimitiveType, PrimitiveCount)) * ibuf.index_size,
                       4,
                       ibuf.user_buffer,
                       &ibuf.offset,
                       &ibuf.buffer);
-        u_upload_unmap(This->index_uploader);
+        u_upload_unmap(This->context.pipe->stream_uploader);
         ibuf.user_buffer = NULL;
     }
 
diff --git a/src/gallium/state_trackers/nine/device9.h b/src/gallium/state_trackers/nine/device9.h
index 71b88a42b4..71ebbdc935 100644
--- a/src/gallium/state_trackers/nine/device9.h
+++ b/src/gallium/state_trackers/nine/device9.h
@@ -141,11 +141,6 @@ struct NineDevice9
         boolean buggy_barycentrics;
     } driver_bugs;
 
-    struct u_upload_mgr *vertex_uploader;
-    struct u_upload_mgr *index_uploader;
-    struct u_upload_mgr *constbuf_uploader;
-    struct u_upload_mgr *vertex_sw_uploader;
-    struct u_upload_mgr *constbuf_sw_uploader;
     unsigned constbuf_alignment;
 
     struct nine_range_pool range_pool;
diff --git a/src/gallium/state_trackers/nine/nine_ff.c b/src/gallium/state_trackers/nine/nine_ff.c
index 7cbe3f7d38..279ba37489 100644
--- a/src/gallium/state_trackers/nine/nine_ff.c
+++ b/src/gallium/state_trackers/nine/nine_ff.c
@@ -2063,14 +2063,14 @@ nine_ff_update(struct NineDevice9 *device)
 
         if (!device->driver_caps.user_cbufs) {
             context->pipe_data.cb_vs_ff.buffer_size = cb.buffer_size;
-            u_upload_data(device->constbuf_uploader,
+            u_upload_data(device->context.pipe->const_uploader,
                           0,
                           cb.buffer_size,
                           device->constbuf_alignment,
                           cb.user_buffer,
                           &context->pipe_data.cb_vs_ff.buffer_offset,
                           &context->pipe_data.cb_vs_ff.buffer);
-            u_upload_unmap(device->constbuf_uploader);
+            u_upload_unmap(device->context.pipe->const_uploader);
             context->pipe_data.cb_vs_ff.user_buffer = NULL;
         } else
             context->pipe_data.cb_vs_ff = cb;
@@ -2087,14 +2087,14 @@ nine_ff_update(struct NineDevice9 *device)
 
         if (!device->driver_caps.user_cbufs) {
             context->pipe_data.cb_ps_ff.buffer_size = cb.buffer_size;
-            u_upload_data(device->constbuf_uploader,
+            u_upload_data(device->context.pipe->const_uploader,
                           0,
                           cb.buffer_size,
                           device->constbuf_alignment,
                           cb.user_buffer,
                           &context->pipe_data.cb_ps_ff.buffer_offset,
                           &context->pipe_data.cb_ps_ff.buffer);
-            u_upload_unmap(device->constbuf_uploader);
+            u_upload_unmap(device->context.pipe->const_uploader);
             context->pipe_data.cb_ps_ff.user_buffer = NULL;
         } else
             context->pipe_data.cb_ps_ff = cb;
diff --git a/src/gallium/state_trackers/nine/nine_state.c b/src/gallium/state_trackers/nine/nine_state.c
index 8909692594..bdb0ba13ea 100644
--- a/src/gallium/state_trackers/nine/nine_state.c
+++ b/src/gallium/state_trackers/nine/nine_state.c
@@ -424,47 +424,47 @@ prepare_vs_constants_userbuf_swvp(struct NineDevice9 *device)
 
     if (!device->driver_caps.user_cbufs) {
         struct pipe_constant_buffer *cb = &(context->pipe_data.cb0_swvp);
-        u_upload_data(device->constbuf_uploader,
+        u_upload_data(device->context.pipe->const_uploader,
                       0,
                       cb->buffer_size,
                       device->constbuf_alignment,
                       cb->user_buffer,
                       &(cb->buffer_offset),
                       &(cb->buffer));
-        u_upload_unmap(device->constbuf_uploader);
+        u_upload_unmap(device->context.pipe->const_uploader);
         cb->user_buffer = NULL;
 
         cb = &(context->pipe_data.cb1_swvp);
-        u_upload_data(device->constbuf_uploader,
+        u_upload_data(device->context.pipe->const_uploader,
                       0,
                       cb->buffer_size,
                       device->constbuf_alignment,
                       cb->user_buffer,
                       &(cb->buffer_offset),
                       &(cb->buffer));
-        u_upload_unmap(device->constbuf_uploader);
+        u_upload_unmap(device->context.pipe->const_uploader);
         cb->user_buffer = NULL;
 
         cb = &(context->pipe_data.cb2_swvp);
-        u_upload_data(device->constbuf_uploader,
+        u_upload_data(device->context.pipe->const_uploader,
                       0,
                       cb->buffer_size,
                       device->constbuf_alignment,
                       cb->user_buffer,
                       &(cb->buffer_offset),
                       &(cb->buffer));
-        u_upload_unmap(device->constbuf_uploader);
+        u_upload_unmap(device->context.pipe->const_uploader);
         cb->user_buffer = NULL;
 
         cb = &(context->pipe_data.cb3_swvp);
-        u_upload_data(device->constbuf_uploader,
+        u_upload_data(device->context.pipe->const_uploader,
                       0,
                       cb->buffer_size,
                       device->constbuf_alignment,
                       cb->user_buffer,
                       &(cb->buffer_offset),
                       &(cb->buffer));
-        u_upload_unmap(device->constbuf_uploader);
+        u_upload_unmap(device->context.pipe->const_uploader);
         cb->user_buffer = NULL;
     }
 
@@ -523,14 +523,14 @@ prepare_vs_constants_userbuf(struct NineDevice9 *device)
 
     if (!device->driver_caps.user_cbufs) {
         context->pipe_data.cb_vs.buffer_size = cb.buffer_size;
-        u_upload_data(device->constbuf_uploader,
+        u_upload_data(device->context.pipe->const_uploader,
                       0,
                       cb.buffer_size,
                       device->constbuf_alignment,
                       cb.user_buffer,
                       &context->pipe_data.cb_vs.buffer_offset,
                       &context->pipe_data.cb_vs.buffer);
-        u_upload_unmap(device->constbuf_uploader);
+        u_upload_unmap(device->context.pipe->const_uploader);
         context->pipe_data.cb_vs.user_buffer = NULL;
     } else
         context->pipe_data.cb_vs = cb;
@@ -594,14 +594,14 @@ prepare_ps_constants_userbuf(struct NineDevice9 *device)
 
     if (!device->driver_caps.user_cbufs) {
         context->pipe_data.cb_ps.buffer_size = cb.buffer_size;
-        u_upload_data(device->constbuf_uploader,
+        u_upload_data(device->context.pipe->const_uploader,
                       0,
                       cb.buffer_size,
                       device->constbuf_alignment,
                       cb.user_buffer,
                       &context->pipe_data.cb_ps.buffer_offset,
                       &context->pipe_data.cb_ps.buffer);
-        u_upload_unmap(device->constbuf_uploader);
+        u_upload_unmap(device->context.pipe->const_uploader);
         context->pipe_data.cb_ps.user_buffer = NULL;
     } else
         context->pipe_data.cb_ps = cb;
@@ -3296,14 +3296,14 @@ update_vertex_buffers_sw(struct NineDevice9 *device, int start_vertice, int num_
                                                         &(sw_internal->transfers_so[i]));
                 vtxbuf.buffer = NULL;
                 if (!device->driver_caps.user_sw_vbufs) {
-                    u_upload_data(device->vertex_sw_uploader,
+                    u_upload_data(device->pipe_sw->stream_uploader,
                                   0,
                                   box.width,
                                   16,
                                   vtxbuf.user_buffer,
                                   &(vtxbuf.buffer_offset),
                                   &(vtxbuf.buffer));
-                    u_upload_unmap(device->vertex_sw_uploader);
+                    u_upload_unmap(device->pipe_sw->stream_uploader);
                     vtxbuf.user_buffer = NULL;
                 }
                 pipe_sw->set_vertex_buffers(pipe_sw, i, 1, &vtxbuf);
@@ -3352,14 +3352,14 @@ update_vs_constants_sw(struct NineDevice9 *device)
 
         buf = cb.user_buffer;
         if (!device->driver_caps.user_sw_cbufs) {
-            u_upload_data(device->constbuf_sw_uploader,
+            u_upload_data(device->pipe_sw->const_uploader,
                           0,
                           cb.buffer_size,
                           16,
                           cb.user_buffer,
                           &(cb.buffer_offset),
                           &(cb.buffer));
-            u_upload_unmap(device->constbuf_sw_uploader);
+            u_upload_unmap(device->pipe_sw->const_uploader);
             cb.user_buffer = NULL;
         }
 
@@ -3369,14 +3369,14 @@ update_vs_constants_sw(struct NineDevice9 *device)
 
         cb.user_buffer = (char *)buf + 4096 * sizeof(float[4]);
         if (!device->driver_caps.user_sw_cbufs) {
-            u_upload_data(device->constbuf_sw_uploader,
+            u_upload_data(device->pipe_sw->const_uploader,
                           0,
                           cb.buffer_size,
                           16,
                           cb.user_buffer,
                           &(cb.buffer_offset),
                           &(cb.buffer));
-            u_upload_unmap(device->constbuf_sw_uploader);
+            u_upload_unmap(device->pipe_sw->const_uploader);
             cb.user_buffer = NULL;
         }
 
@@ -3394,14 +3394,14 @@ update_vs_constants_sw(struct NineDevice9 *device)
         cb.user_buffer = state->vs_const_i;
 
         if (!device->driver_caps.user_sw_cbufs) {
-            u_upload_data(device->constbuf_sw_uploader,
+            u_upload_data(device->pipe_sw->const_uploader,
                           0,
                           cb.buffer_size,
                           16,
                           cb.user_buffer,
                           &(cb.buffer_offset),
                           &(cb.buffer));
-            u_upload_unmap(device->constbuf_sw_uploader);
+            u_upload_unmap(device->pipe_sw->const_uploader);
             cb.user_buffer = NULL;
         }
 
@@ -3419,14 +3419,14 @@ update_vs_constants_sw(struct NineDevice9 *device)
         cb.user_buffer = state->vs_const_b;
 
         if (!device->driver_caps.user_sw_cbufs) {
-            u_upload_data(device->constbuf_sw_uploader,
+            u_upload_data(device->pipe_sw->const_uploader,
                           0,
                           cb.buffer_size,
                           16,
                           cb.user_buffer,
                           &(cb.buffer_offset),
                           &(cb.buffer));
-            u_upload_unmap(device->constbuf_sw_uploader);
+            u_upload_unmap(device->pipe_sw->const_uploader);
             cb.user_buffer = NULL;
         }
 
@@ -3450,14 +3450,14 @@ update_vs_constants_sw(struct NineDevice9 *device)
         cb.user_buffer = viewport_data;
 
         {
-            u_upload_data(device->constbuf_sw_uploader,
+            u_upload_data(device->pipe_sw->const_uploader,
                           0,
                           cb.buffer_size,
                           16,
                           cb.user_buffer,
                           &(cb.buffer_offset),
                           &(cb.buffer));
-            u_upload_unmap(device->constbuf_sw_uploader);
+            u_upload_unmap(device->pipe_sw->const_uploader);
             cb.user_buffer = NULL;
         }
 
-- 2.11.1 _______________________________________________ mesa-dev mailing list mesa-dev at lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev




More information about the mesa-dev mailing list