diff options
author | Christoph Bumiller <[email protected]> | 2011-10-12 21:08:40 +0200 |
---|---|---|
committer | Christoph Bumiller <[email protected]> | 2011-10-21 23:00:37 +0200 |
commit | cb884262931644340507b3abdc12c3842d3e9897 (patch) | |
tree | 6846346ca344a0b4016073b6c87b4e514928e901 /src/gallium/state_trackers | |
parent | 3fc2818f2b9e8a19e5349442e50dcee4858452c6 (diff) |
d3d1x: fix refcounting of GalliumD3D11DeviceChild objects
An external Release would have lowered the device reference count,
but an internal reference in the context does not raise it (by
design).
Diffstat (limited to 'src/gallium/state_trackers')
-rw-r--r-- | src/gallium/state_trackers/d3d1x/gd3d11/d3d11_objects.h | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/gallium/state_trackers/d3d1x/gd3d11/d3d11_objects.h b/src/gallium/state_trackers/d3d1x/gd3d11/d3d11_objects.h index 488539f1bbe..7e4ea1385bc 100644 --- a/src/gallium/state_trackers/d3d1x/gd3d11/d3d11_objects.h +++ b/src/gallium/state_trackers/d3d1x/gd3d11/d3d11_objects.h @@ -42,6 +42,12 @@ struct GalliumD3D11DeviceChild : public GalliumPrivateDataComObject<Base, dual_r device->AddRef(); } + virtual ~GalliumD3D11DeviceChild() + { + if(device) + device->Release(); + } + /* The purpose of this is to avoid cyclic garbage, since this won't hold * a pointer to the device if it is only held by a pipeline binding in the immediate context * @@ -50,13 +56,11 @@ struct GalliumD3D11DeviceChild : public GalliumPrivateDataComObject<Base, dual_r */ inline ULONG add_ref() { - device->AddRef(); return GalliumPrivateDataComObject<Base, dual_refcnt_t>::add_ref(); } inline ULONG release() { - device->Release(); return GalliumPrivateDataComObject<Base, dual_refcnt_t>::release(); } |