st/nine: Do not bind the container if forward is false
authorAxel Davy <axel.davy@ens.fr>
Sat, 3 Dec 2016 18:41:40 +0000 (19:41 +0100)
committerAxel Davy <axel.davy@ens.fr>
Tue, 20 Dec 2016 22:47:08 +0000 (23:47 +0100)
This doesn't make sense to bind the container in that specific case.

Signed-off-by: Axel Davy <axel.davy@ens.fr>
src/gallium/state_trackers/nine/iunknown.h

index f827b138b52b500c0a2cbd8c879213eb655123ac..4b9edaa355e45b342f63f79fc25b363112e17238 100644 (file)
@@ -52,8 +52,8 @@ struct NineUnknown
     /* container: for surfaces and volumes only.
      * Can be a texture, a volume texture or a swapchain.
      * forward is set to false for the swapchain case.
-     * Refs are passed to the container if forward is set.
-     * The container has bind increased if the object has non null bind. */
+     * If forward is set, refs are passed to the container if forward is set
+     * and the container has bind increased if the object has non null bind. */
     struct NineUnknown *container;
     struct NineDevice9 *device;    /* referenced if (refs) */
 
@@ -136,7 +136,7 @@ NineUnknown_Bind( struct NineUnknown *This )
     UINT b = p_atomic_inc_return(&This->bind);
     assert(b);
 
-    if (b == 1 && This->container)
+    if (b == 1 && This->forward)
         NineUnknown_Bind(This->container);
 
     return b;
@@ -147,9 +147,9 @@ NineUnknown_Unbind( struct NineUnknown *This )
 {
     UINT b = p_atomic_dec_return(&This->bind);
 
-    if (b == 0 && This->container)
+    if (b == 0 && This->forward)
         NineUnknown_Unbind(This->container);
-    else if (b == 0 && This->refs == 0)
+    else if (b == 0 && This->refs == 0 && !This->container)
         This->dtor(This);
 
     return b;
@@ -168,8 +168,6 @@ NineUnknown_Detach( struct NineUnknown *This )
 {
     assert(This->container && !This->forward);
 
-    if (This->bind)
-        NineUnknown_Unbind(This->container);
     This->container = NULL;
     if (!(This->refs | This->bind))
         This->dtor(This);