summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristoph Bumiller <[email protected]>2011-10-12 21:08:40 +0200
committerChristoph Bumiller <[email protected]>2011-10-21 23:00:37 +0200
commitcb884262931644340507b3abdc12c3842d3e9897 (patch)
tree6846346ca344a0b4016073b6c87b4e514928e901
parent3fc2818f2b9e8a19e5349442e50dcee4858452c6 (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.h8
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();
}