diff options
author | Bruce Cherniak <[email protected]> | 2017-06-28 13:42:03 -0500 |
---|---|---|
committer | Tim Rowley <[email protected]> | 2017-06-29 13:23:33 -0500 |
commit | 277621bbb724b0a627a0f5473bdeb82e02fdf389 (patch) | |
tree | 1e6687ad800e3ca4246f46a5312318927e5ce009 | |
parent | 2b27dcd0751e704193ceb0572447799342dd1db5 (diff) |
swr: Remove need to allocate vertex buffer scratch space all in one gocros-mesa-17.1.1-r14-vanillachadv/cros-mesa-17.1.1-r14-vanilla
Deferred deletion (via "fence_work") has obsoleted the need to allocate
all client vertex buffer scratch space in a single chunk. Scratch
allocations are now valid until the referenced fence is complete.
Reviewed-by: Tim Rowley <[email protected]>
-rw-r--r-- | src/gallium/drivers/swr/swr_state.cpp | 25 |
1 files changed, 2 insertions, 23 deletions
diff --git a/src/gallium/drivers/swr/swr_state.cpp b/src/gallium/drivers/swr/swr_state.cpp index 6dc06ed1563..7a8786d96f4 100644 --- a/src/gallium/drivers/swr/swr_state.cpp +++ b/src/gallium/drivers/swr/swr_state.cpp @@ -1219,32 +1219,12 @@ swr_update_derived(struct pipe_context *pipe, */ if (ctx->dirty & SWR_NEW_VERTEX || (p_draw_info && p_draw_info->index_size)) { - uint32_t scratch_total; - uint8_t *scratch = NULL; /* If being called by swr_draw_vbo, copy draw details */ struct pipe_draw_info info = {0}; if (p_draw_info) info = *p_draw_info; - /* We must get all the scratch space in one go */ - scratch_total = 0; - for (UINT i = 0; i < ctx->num_vertex_buffers; i++) { - struct pipe_vertex_buffer *vb = &ctx->vertex_buffer[i]; - - if (!vb->is_user_buffer) - continue; - - uint32_t elems, base, size; - swr_user_vbuf_range(&info, ctx->velems, vb, i, &elems, &base, &size); - scratch_total += AlignUp(size, 4); - } - - if (scratch_total) { - scratch = (uint8_t *)swr_copy_to_scratch_space( - ctx, &ctx->scratch->vertex_buffer, NULL, scratch_total); - } - /* vertex buffers */ SWR_VERTEX_BUFFER_STATE swrVertexBuffers[PIPE_MAX_ATTRIBS]; for (UINT i = 0; i < ctx->num_vertex_buffers; i++) { @@ -1289,9 +1269,8 @@ swr_update_derived(struct pipe_context *pipe, /* Copy only needed vertices to scratch space */ size = AlignUp(size, 4); const void *ptr = (const uint8_t *) vb->buffer.user + base; - memcpy(scratch, ptr, size); - ptr = scratch; - scratch += size; + ptr = (uint8_t *)swr_copy_to_scratch_space( + ctx, &ctx->scratch->vertex_buffer, ptr, size); p_data = (const uint8_t *)ptr - base; } |