summaryrefslogtreecommitdiffstats
path: root/src/gallium/state_trackers/nine/volume9.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/state_trackers/nine/volume9.c')
-rw-r--r--src/gallium/state_trackers/nine/volume9.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/gallium/state_trackers/nine/volume9.c b/src/gallium/state_trackers/nine/volume9.c
index 29a1fcbbd03..11236a02e75 100644
--- a/src/gallium/state_trackers/nine/volume9.c
+++ b/src/gallium/state_trackers/nine/volume9.c
@@ -320,10 +320,17 @@ NineVolume9_LockBox( struct NineVolume9 *This,
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;