mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 06:58:05 +02:00
vdpau: call texture_get_handle while the mutex is being held
The context may be used by texture_get_handle. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=99158 Reviewed-by: Christian König <christian.koenig@amd.com> Cc: 13.0 <mesa-stable@lists.freedesktop.org>
This commit is contained in:
parent
7d48a84b16
commit
dbba4e03b1
2 changed files with 13 additions and 6 deletions
|
|
@ -798,7 +798,6 @@ VdpStatus vlVdpOutputSurfaceDMABuf(VdpOutputSurface surface,
|
|||
pipe_mutex_lock(vlsurface->device->mutex);
|
||||
vlVdpResolveDelayedRendering(vlsurface->device, NULL, NULL);
|
||||
vlsurface->device->context->flush(vlsurface->device->context, NULL, 0);
|
||||
pipe_mutex_unlock(vlsurface->device->mutex);
|
||||
|
||||
memset(&whandle, 0, sizeof(struct winsys_handle));
|
||||
whandle.type = DRM_API_HANDLE_TYPE_FD;
|
||||
|
|
@ -806,8 +805,12 @@ VdpStatus vlVdpOutputSurfaceDMABuf(VdpOutputSurface surface,
|
|||
pscreen = vlsurface->surface->texture->screen;
|
||||
if (!pscreen->resource_get_handle(pscreen, vlsurface->device->context,
|
||||
vlsurface->surface->texture, &whandle,
|
||||
PIPE_HANDLE_USAGE_READ_WRITE))
|
||||
PIPE_HANDLE_USAGE_READ_WRITE)) {
|
||||
pipe_mutex_unlock(vlsurface->device->mutex);
|
||||
return VDP_STATUS_NO_IMPLEMENTATION;
|
||||
}
|
||||
|
||||
pipe_mutex_unlock(vlsurface->device->mutex);
|
||||
|
||||
result->handle = whandle.handle;
|
||||
result->width = vlsurface->surface->width;
|
||||
|
|
|
|||
|
|
@ -460,10 +460,10 @@ VdpStatus vlVdpVideoSurfaceDMABuf(VdpVideoSurface surface,
|
|||
}
|
||||
|
||||
surf = p_surf->video_buffer->get_surfaces(p_surf->video_buffer)[plane];
|
||||
pipe_mutex_unlock(p_surf->device->mutex);
|
||||
|
||||
if (!surf)
|
||||
if (!surf) {
|
||||
pipe_mutex_unlock(p_surf->device->mutex);
|
||||
return VDP_STATUS_RESOURCES;
|
||||
}
|
||||
|
||||
memset(&whandle, 0, sizeof(struct winsys_handle));
|
||||
whandle.type = DRM_API_HANDLE_TYPE_FD;
|
||||
|
|
@ -472,8 +472,12 @@ VdpStatus vlVdpVideoSurfaceDMABuf(VdpVideoSurface surface,
|
|||
pscreen = surf->texture->screen;
|
||||
if (!pscreen->resource_get_handle(pscreen, p_surf->device->context,
|
||||
surf->texture, &whandle,
|
||||
PIPE_HANDLE_USAGE_READ_WRITE))
|
||||
PIPE_HANDLE_USAGE_READ_WRITE)) {
|
||||
pipe_mutex_unlock(p_surf->device->mutex);
|
||||
return VDP_STATUS_NO_IMPLEMENTATION;
|
||||
}
|
||||
|
||||
pipe_mutex_unlock(p_surf->device->mutex);
|
||||
|
||||
result->handle = whandle.handle;
|
||||
result->width = surf->width;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue