mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 18:18:06 +02:00
tegra: Use private reference count for resources
With the recent addition of the shortcuts aiming to avoid atomic
operations, the reference count on resources can become unbalanced
in the Tegra driver since they are wrapped and then proxied to the
Nouveau driver.
Fix this by keeping a private reference count.
Fixes: 7688b8ae98 ("st/mesa: eliminate all atomic ops when setting vertex buffers")
Reviewed-by: Karol Herbst <kherbst@redhat.com>
Tested-by: Karol Herbst <kherbst@redhat.com>
This commit is contained in:
parent
e8ce0a3357
commit
108e6eaa83
2 changed files with 7 additions and 0 deletions
|
|
@ -31,6 +31,7 @@ struct winsys_handle;
|
|||
struct tegra_resource {
|
||||
struct pipe_resource base;
|
||||
struct pipe_resource *gpu;
|
||||
unsigned int refcount;
|
||||
|
||||
uint64_t modifier;
|
||||
uint32_t stride;
|
||||
|
|
|
|||
|
|
@ -245,6 +245,10 @@ tegra_screen_resource_create(struct pipe_screen *pscreen,
|
|||
pipe_reference_init(&resource->base.reference, 1);
|
||||
resource->base.screen = &screen->base;
|
||||
|
||||
/* use private reference count for wrapped resources */
|
||||
resource->gpu->reference.count += 100000000;
|
||||
resource->refcount = 100000000;
|
||||
|
||||
return &resource->base;
|
||||
|
||||
destroy:
|
||||
|
|
@ -352,6 +356,8 @@ tegra_screen_resource_destroy(struct pipe_screen *pscreen,
|
|||
{
|
||||
struct tegra_resource *resource = to_tegra_resource(presource);
|
||||
|
||||
/* adjust private reference count */
|
||||
p_atomic_add(&resource->gpu->reference.count, -resource->refcount);
|
||||
pipe_resource_reference(&resource->gpu, NULL);
|
||||
free(resource);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue