From: Marek Olšák Date: Thu, 11 Feb 2021 22:41:01 +0000 (-0500) Subject: radeonsi: allocate filled_size for streamout targets in set_streamout_buffers X-Git-Tag: upstream/21.2.3~7753 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=33ac9dec91d07ef353e110ac376842d84ec539b4;p=platform%2Fupstream%2Fmesa.git 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 Reviewed-by: Pierre-Eric Pelloux-Prayer Part-of: --- diff --git a/src/gallium/drivers/radeonsi/si_state_streamout.c b/src/gallium/drivers/radeonsi/si_state_streamout.c index 2d8fb98..5303ad5 100644 --- a/src/gallium/drivers/radeonsi/si_state_streamout.c +++ b/src/gallium/drivers/radeonsi/si_state_streamout.c @@ -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++)