st/nine: Do not wait for DEFAULT lock for volumes when we can

If the volumes (and the texture container) are not referenced,
then they are no pending operations on them. We can lock directly.

Signed-off-by: Axel Davy <axel.davy@ens.fr>
diff --git a/src/gallium/state_trackers/nine/volume9.c b/src/gallium/state_trackers/nine/volume9.c
index 29a1fcb..11236a0 100644
--- a/src/gallium/state_trackers/nine/volume9.c
+++ b/src/gallium/state_trackers/nine/volume9.c
@@ -320,10 +320,17 @@
         pLockedVolume->pBits =
             NineVolume9_GetSystemMemPointer(This, box.x, box.y, box.z);
     } else {
-        pipe = NineDevice9_GetPipe(This->base.device);
+        bool no_refs = !p_atomic_read(&This->base.bind) &&
+            !p_atomic_read(&This->base.container->bind);
+        if (no_refs)
+            pipe = nine_context_get_pipe_acquire(This->base.device);
+        else
+            pipe = NineDevice9_GetPipe(This->base.device);
         pLockedVolume->pBits =
             pipe->transfer_map(pipe, resource, This->level, usage,
                                &box, &This->transfer);
+        if (no_refs)
+            nine_context_get_pipe_release(This->base.device);
         if (!This->transfer) {
             if (Flags & D3DLOCK_DONOTWAIT)
                 return D3DERR_WASSTILLDRAWING;