swr: Remove need to allocate vertex buffer scratch space all in one go
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 <timothy.o.rowley@intel.com>
This commit is contained in:
parent
2b27dcd075
commit
277621bbb7
|
@ -1219,32 +1219,12 @@ swr_update_derived(struct pipe_context *pipe,
|
||||||
*/
|
*/
|
||||||
if (ctx->dirty & SWR_NEW_VERTEX ||
|
if (ctx->dirty & SWR_NEW_VERTEX ||
|
||||||
(p_draw_info && p_draw_info->index_size)) {
|
(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 */
|
/* If being called by swr_draw_vbo, copy draw details */
|
||||||
struct pipe_draw_info info = {0};
|
struct pipe_draw_info info = {0};
|
||||||
if (p_draw_info)
|
if (p_draw_info)
|
||||||
info = *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 */
|
/* vertex buffers */
|
||||||
SWR_VERTEX_BUFFER_STATE swrVertexBuffers[PIPE_MAX_ATTRIBS];
|
SWR_VERTEX_BUFFER_STATE swrVertexBuffers[PIPE_MAX_ATTRIBS];
|
||||||
for (UINT i = 0; i < ctx->num_vertex_buffers; i++) {
|
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 */
|
/* Copy only needed vertices to scratch space */
|
||||||
size = AlignUp(size, 4);
|
size = AlignUp(size, 4);
|
||||||
const void *ptr = (const uint8_t *) vb->buffer.user + base;
|
const void *ptr = (const uint8_t *) vb->buffer.user + base;
|
||||||
memcpy(scratch, ptr, size);
|
ptr = (uint8_t *)swr_copy_to_scratch_space(
|
||||||
ptr = scratch;
|
ctx, &ctx->scratch->vertex_buffer, ptr, size);
|
||||||
scratch += size;
|
|
||||||
p_data = (const uint8_t *)ptr - base;
|
p_data = (const uint8_t *)ptr - base;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue