mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2024-11-23 18:24:13 +08:00
crocus: fix refcnt imbalance related to crocus_create_surface()
Indeed, the objects are not freed when the function returns NULL. "psurf->texture = tex;" is redundant with "pipe_resource_reference(&psurf->texture, tex);". For instance, this issue is triggered with "piglit/bin/ext_texture_array-compressed teximage pbo -fbo -auto" while setting GALLIUM_REFCNT_LOG=refcnt.log. Fixes:f3630548f1
("crocus: initial gallium driver for Intel gfx 4-7") Signed-off-by: Patrick Lerda <patrick9876@free.fr> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22799> (cherry picked from commitd615dfca40
)
This commit is contained in:
parent
04270550a7
commit
885e2fef7c
@ -7144,7 +7144,7 @@
|
||||
"description": "crocus: fix refcnt imbalance related to crocus_create_surface()",
|
||||
"nominated": true,
|
||||
"nomination_type": 1,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"main_sha": null,
|
||||
"because_sha": "f3630548f1da904ec6c63b43ece7e68afdb8867e",
|
||||
"notes": null
|
||||
|
@ -2866,7 +2866,6 @@ crocus_create_surface(struct pipe_context *ctx,
|
||||
psurf->format = tmpl->format;
|
||||
psurf->width = tex->width0;
|
||||
psurf->height = tex->height0;
|
||||
psurf->texture = tex;
|
||||
psurf->u.tex.first_layer = tmpl->u.tex.first_layer;
|
||||
psurf->u.tex.last_layer = tmpl->u.tex.last_layer;
|
||||
psurf->u.tex.level = tmpl->u.tex.level;
|
||||
@ -2954,6 +2953,7 @@ crocus_create_surface(struct pipe_context *ctx,
|
||||
assert(view->levels == 1);
|
||||
|
||||
/* TODO: compressed pbo uploads aren't working here */
|
||||
pipe_surface_reference(&psurf, NULL);
|
||||
return NULL;
|
||||
|
||||
uint64_t offset_B = 0;
|
||||
@ -2974,8 +2974,10 @@ crocus_create_surface(struct pipe_context *ctx,
|
||||
* Return NULL to force the state tracker to take fallback paths.
|
||||
*/
|
||||
// TODO: check if the gen7 check is right, originally gen8
|
||||
if (view->array_len > 1 || GFX_VER == 7)
|
||||
if (view->array_len > 1 || GFX_VER == 7) {
|
||||
pipe_surface_reference(&psurf, NULL);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const bool is_3d = res->surf.dim == ISL_SURF_DIM_3D;
|
||||
isl_surf_get_image_surf(&screen->isl_dev, &res->surf,
|
||||
|
Loading…
Reference in New Issue
Block a user