From a5be0385c7c7f3eb380c4677b17b012ab9640ce0 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Thu, 14 Sep 2023 11:41:42 -0400 Subject: [PATCH] aux/tc: don't use pipe_buffer_create_with_data() for rp-optimized subdata MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit this function doesn't use the correct tc map flags, which causes drivers to (potentially) use the wrong slab for transfer allocation and then crash Fixes: 51ad269198e ("aux/tc: handle stride mismatch during rp-optimized subdata") Acked-by: Marek Olšák Reviewed-by: Dave Airlie Part-of: --- src/gallium/auxiliary/util/u_threaded_context.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gallium/auxiliary/util/u_threaded_context.c b/src/gallium/auxiliary/util/u_threaded_context.c index 9a3d85fb895..dba12e03856 100644 --- a/src/gallium/auxiliary/util/u_threaded_context.c +++ b/src/gallium/auxiliary/util/u_threaded_context.c @@ -3165,7 +3165,8 @@ tc_texture_subdata(struct pipe_context *_pipe, uint64_t fmt_layer_stride = util_format_get_2d_size(format, stride, box->height); assert(fmt_layer_stride * box->depth <= UINT32_MAX); - struct pipe_resource *pres = pipe_buffer_create_with_data(pipe, 0, PIPE_USAGE_STREAM, layer_stride * box->depth, data); + struct pipe_resource *pres = pipe_buffer_create(pipe->screen, 0, PIPE_USAGE_STREAM, layer_stride * box->depth); + pipe->buffer_subdata(pipe, pres, PIPE_MAP_WRITE | TC_TRANSFER_MAP_THREADED_UNSYNC, 0, layer_stride * box->depth, data); struct pipe_box src_box = *box; src_box.x = src_box.y = src_box.z = 0;