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 | |
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).
-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(); } |