From abb1c645c476b5dd289ce3efae0594f8796f9cf8 Mon Sep 17 00:00:00 2001 From: Constantine Charlamov Date: Tue, 21 Feb 2017 07:31:30 +0300 Subject: [PATCH] st/nine: make use of common uploaders v4 Make use of common uploaders that landed recently to Mesa 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 --- 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 b9b7a637d70..c3924a21e22 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 71b88a42b4b..71ebbdc935b 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 7cbe3f7d38c..279ba374896 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 89096925943..bdb0ba13ea0 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.30.2