radeonsi: allocate filled_size for streamout targets in set_streamout_buffers

so that create_stream_output_target doesn't use the context and can be
called from any thread. This is for u_threaded_context.

Reviewed-by: Zoltán Böszörményi <zboszor@gmail.com>
Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9028>
This commit is contained in:
Marek Olšák 2021-02-11 17:41:01 -05:00
parent 9db4b331f9
commit 33ac9dec91
1 changed files with 9 additions and 9 deletions

View File

@ -39,7 +39,6 @@ static struct pipe_stream_output_target *si_create_so_target(struct pipe_context
unsigned buffer_offset,
unsigned buffer_size)
{
struct si_context *sctx = (struct si_context *)ctx;
struct si_streamout_target *t;
struct si_resource *buf = si_resource(buffer);
@ -48,14 +47,6 @@ static struct pipe_stream_output_target *si_create_so_target(struct pipe_context
return NULL;
}
unsigned buf_filled_size_size = sctx->screen->use_ngg_streamout ? 8 : 4;
u_suballocator_alloc(&sctx->allocator_zeroed_memory, buf_filled_size_size, 4,
&t->buf_filled_size_offset, (struct pipe_resource **)&t->buf_filled_size);
if (!t->buf_filled_size) {
FREE(t);
return NULL;
}
t->b.reference.count = 1;
t->b.context = ctx;
pipe_resource_reference(&t->b.buffer, buffer);
@ -166,6 +157,15 @@ static void si_set_streamout_targets(struct pipe_context *ctx, unsigned num_targ
if (offsets[i] == ((unsigned)-1))
append_bitmask |= 1 << i;
/* Allocate space for the filled buffer size. */
struct si_streamout_target *t = sctx->streamout.targets[i];
if (!t->buf_filled_size) {
unsigned buf_filled_size_size = sctx->screen->use_ngg_streamout ? 8 : 4;
u_suballocator_alloc(&sctx->allocator_zeroed_memory, buf_filled_size_size, 4,
&t->buf_filled_size_offset,
(struct pipe_resource **)&t->buf_filled_size);
}
}
for (; i < sctx->streamout.num_targets; i++)