mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-04-25 02:40:46 +02:00
iris: refcount separate screen objects for resource tracking
this screen object can never, ever be accessed like this in a resource,
as it may have previously been replaced by a wrapper (e.g., driver trace)
which will then explode when it is accessed directly
instead, keep a separate screen ref on the resource which is known to be
the actual driver object and not a wrapper
Fixes: 0a497eb130 ("iris: make resources take a ref on the screen object")
Reviewed-by: Lionel Landwerlin lionel.g.landwerlin@intel.com
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10632>
This commit is contained in:
parent
9a5c9ff342
commit
eb63c7dece
2 changed files with 8 additions and 2 deletions
|
|
@ -456,7 +456,7 @@ iris_resource_destroy(struct pipe_screen *screen,
|
|||
|
||||
threaded_resource_deinit(p_res);
|
||||
iris_bo_unreference(res->bo);
|
||||
iris_pscreen_unref(res->base.b.screen);
|
||||
iris_pscreen_unref(res->orig_screen);
|
||||
|
||||
free(res);
|
||||
}
|
||||
|
|
@ -470,7 +470,8 @@ iris_alloc_resource(struct pipe_screen *pscreen,
|
|||
return NULL;
|
||||
|
||||
res->base.b = *templ;
|
||||
res->base.b.screen = iris_pscreen_ref(pscreen);
|
||||
res->base.b.screen = pscreen;
|
||||
res->orig_screen = iris_pscreen_ref(pscreen);
|
||||
pipe_reference_init(&res->base.b.reference, 1);
|
||||
threaded_resource_init(&res->base.b);
|
||||
|
||||
|
|
|
|||
|
|
@ -168,6 +168,11 @@ struct iris_resource {
|
|||
* be DRM_FORMAT_MOD_INVALID.
|
||||
*/
|
||||
const struct isl_drm_modifier_info *mod_info;
|
||||
|
||||
/**
|
||||
* The screen the resource was originally created with, stored for refcounting.
|
||||
*/
|
||||
struct pipe_screen *orig_screen;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue