aux/tc: don't use pipe_buffer_create_with_data() for rp-optimized subdata

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: 51ad269198 ("aux/tc: handle stride mismatch during rp-optimized subdata")

Acked-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Dave Airlie <airlied@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25227>
(cherry picked from commit a5be0385c7)
This commit is contained in:
Mike Blumenkrantz 2023-09-14 11:41:42 -04:00 committed by Dylan Baker
parent 3fac6fa023
commit 7932c7a090
2 changed files with 3 additions and 2 deletions

View file

@ -2224,7 +2224,7 @@
"description": "aux/tc: don't use pipe_buffer_create_with_data() for rp-optimized subdata",
"nominated": true,
"nomination_type": 1,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": "51ad269198e425fae719a37f169b365a8b52e7f3",
"notes": null

View file

@ -3170,7 +3170,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;