mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 18:18:06 +02:00
radeonsi: fix error paths of si_texture_transfer_map
trans is zero-initialized, but trans->resource is setup immediately so needs to be dereferenced. Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
This commit is contained in:
parent
68ee1d5796
commit
e788b987d8
1 changed files with 12 additions and 13 deletions
|
|
@ -1740,16 +1740,14 @@ static void *si_texture_transfer_map(struct pipe_context *ctx,
|
|||
|
||||
if (!si_init_flushed_depth_texture(ctx, &resource, &staging_depth)) {
|
||||
PRINT_ERR("failed to create temporary texture to hold untiled copy\n");
|
||||
FREE(trans);
|
||||
return NULL;
|
||||
goto fail_trans;
|
||||
}
|
||||
|
||||
if (usage & PIPE_TRANSFER_READ) {
|
||||
struct pipe_resource *temp = ctx->screen->resource_create(ctx->screen, &resource);
|
||||
if (!temp) {
|
||||
PRINT_ERR("failed to create a temporary depth texture\n");
|
||||
FREE(trans);
|
||||
return NULL;
|
||||
goto fail_trans;
|
||||
}
|
||||
|
||||
si_copy_region_with_blit(ctx, temp, 0, 0, 0, 0, texture, level, box);
|
||||
|
|
@ -1767,8 +1765,7 @@ static void *si_texture_transfer_map(struct pipe_context *ctx,
|
|||
/* XXX: when discard is true, no need to read back from depth texture */
|
||||
if (!si_init_flushed_depth_texture(ctx, texture, &staging_depth)) {
|
||||
PRINT_ERR("failed to create temporary texture to hold untiled copy\n");
|
||||
FREE(trans);
|
||||
return NULL;
|
||||
goto fail_trans;
|
||||
}
|
||||
|
||||
si_blit_decompress_depth(ctx, rtex, staging_depth,
|
||||
|
|
@ -1797,8 +1794,7 @@ static void *si_texture_transfer_map(struct pipe_context *ctx,
|
|||
staging = (struct r600_texture*)ctx->screen->resource_create(ctx->screen, &resource);
|
||||
if (!staging) {
|
||||
PRINT_ERR("failed to create temporary texture to hold untiled copy\n");
|
||||
FREE(trans);
|
||||
return NULL;
|
||||
goto fail_trans;
|
||||
}
|
||||
trans->staging = &staging->resource;
|
||||
|
||||
|
|
@ -1821,14 +1817,17 @@ static void *si_texture_transfer_map(struct pipe_context *ctx,
|
|||
buf = &rtex->resource;
|
||||
}
|
||||
|
||||
if (!(map = si_buffer_map_sync_with_rings(sctx, buf, usage))) {
|
||||
r600_resource_reference(&trans->staging, NULL);
|
||||
FREE(trans);
|
||||
return NULL;
|
||||
}
|
||||
if (!(map = si_buffer_map_sync_with_rings(sctx, buf, usage)))
|
||||
goto fail_trans;
|
||||
|
||||
*ptransfer = &trans->b.b;
|
||||
return map + offset;
|
||||
|
||||
fail_trans:
|
||||
r600_resource_reference(&trans->staging, NULL);
|
||||
pipe_resource_reference(&trans->b.b.resource, NULL);
|
||||
FREE(trans);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void si_texture_transfer_unmap(struct pipe_context *ctx,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue