summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBruce Cherniak <[email protected]>2017-06-28 13:42:03 -0500
committerTim Rowley <[email protected]>2017-06-29 13:23:33 -0500
commit277621bbb724b0a627a0f5473bdeb82e02fdf389 (patch)
tree1e6687ad800e3ca4246f46a5312318927e5ce009
parent2b27dcd0751e704193ceb0572447799342dd1db5 (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.cpp25
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;
}