summaryrefslogtreecommitdiffstats
path: root/src/gallium/state_trackers
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 /src/gallium/state_trackers
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).
Diffstat (limited to 'src/gallium/state_trackers')
-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();
}