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 commit d615dfca40)
This commit is contained in:
Patrick Lerda 2023-04-26 01:47:43 +02:00 committed by Dylan Baker
parent 04270550a7
commit 885e2fef7c
2 changed files with 5 additions and 3 deletions

View File

@ -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

View File

@ -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,