mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-03-17 12:30:33 +01:00
st/vdpau: fix bogus error handling in output/bitmap creation
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu> Reviewed-by: Christian König <christian.koenig@amd.com>
This commit is contained in:
parent
00e4314f6d
commit
813ce219c8
2 changed files with 35 additions and 34 deletions
|
|
@ -45,6 +45,7 @@ vlVdpBitmapSurfaceCreate(VdpDevice device,
|
|||
struct pipe_context *pipe;
|
||||
struct pipe_resource res_tmpl, *res;
|
||||
struct pipe_sampler_view sv_templ;
|
||||
VdpStatus ret;
|
||||
|
||||
vlVdpBitmapSurface *vlsurface = NULL;
|
||||
|
||||
|
|
@ -81,30 +82,37 @@ vlVdpBitmapSurfaceCreate(VdpDevice device,
|
|||
pipe_mutex_lock(dev->mutex);
|
||||
res = pipe->screen->resource_create(pipe->screen, &res_tmpl);
|
||||
if (!res) {
|
||||
pipe_mutex_unlock(dev->mutex);
|
||||
FREE(dev);
|
||||
FREE(vlsurface);
|
||||
return VDP_STATUS_RESOURCES;
|
||||
ret = VDP_STATUS_RESOURCES;
|
||||
goto err_unlock;
|
||||
}
|
||||
|
||||
vlVdpDefaultSamplerViewTemplate(&sv_templ, res);
|
||||
vlsurface->sampler_view = pipe->create_sampler_view(pipe, res, &sv_templ);
|
||||
|
||||
pipe_resource_reference(&res, NULL);
|
||||
pipe_mutex_unlock(dev->mutex);
|
||||
|
||||
if (!vlsurface->sampler_view) {
|
||||
FREE(dev);
|
||||
return VDP_STATUS_RESOURCES;
|
||||
ret = VDP_STATUS_RESOURCES;
|
||||
goto err_unlock;
|
||||
}
|
||||
|
||||
pipe_mutex_unlock(dev->mutex);
|
||||
|
||||
*surface = vlAddDataHTAB(vlsurface);
|
||||
if (*surface == 0) {
|
||||
FREE(dev);
|
||||
return VDP_STATUS_ERROR;
|
||||
pipe_mutex_lock(dev->mutex);
|
||||
ret = VDP_STATUS_ERROR;
|
||||
goto err_sampler;
|
||||
}
|
||||
|
||||
return VDP_STATUS_OK;
|
||||
|
||||
err_sampler:
|
||||
pipe_sampler_view_reference(&vlsurface->sampler_view, NULL);
|
||||
err_unlock:
|
||||
pipe_mutex_unlock(dev->mutex);
|
||||
FREE(vlsurface);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -84,40 +84,24 @@ vlVdpOutputSurfaceCreate(VdpDevice device,
|
|||
|
||||
pipe_mutex_lock(dev->mutex);
|
||||
res = pipe->screen->resource_create(pipe->screen, &res_tmpl);
|
||||
if (!res) {
|
||||
pipe_mutex_unlock(dev->mutex);
|
||||
FREE(dev);
|
||||
FREE(vlsurface);
|
||||
return VDP_STATUS_ERROR;
|
||||
}
|
||||
if (!res)
|
||||
goto err_unlock;
|
||||
|
||||
vlVdpDefaultSamplerViewTemplate(&sv_templ, res);
|
||||
vlsurface->sampler_view = pipe->create_sampler_view(pipe, res, &sv_templ);
|
||||
if (!vlsurface->sampler_view) {
|
||||
pipe_resource_reference(&res, NULL);
|
||||
pipe_mutex_unlock(dev->mutex);
|
||||
FREE(dev);
|
||||
return VDP_STATUS_ERROR;
|
||||
}
|
||||
if (!vlsurface->sampler_view)
|
||||
goto err_resource;
|
||||
|
||||
memset(&surf_templ, 0, sizeof(surf_templ));
|
||||
surf_templ.format = res->format;
|
||||
vlsurface->surface = pipe->create_surface(pipe, res, &surf_templ);
|
||||
if (!vlsurface->surface) {
|
||||
pipe_resource_reference(&res, NULL);
|
||||
pipe_mutex_unlock(dev->mutex);
|
||||
FREE(dev);
|
||||
return VDP_STATUS_ERROR;
|
||||
}
|
||||
if (!vlsurface->surface)
|
||||
goto err_resource;
|
||||
|
||||
*surface = vlAddDataHTAB(vlsurface);
|
||||
if (*surface == 0) {
|
||||
pipe_resource_reference(&res, NULL);
|
||||
pipe_mutex_unlock(dev->mutex);
|
||||
FREE(dev);
|
||||
return VDP_STATUS_ERROR;
|
||||
}
|
||||
|
||||
if (*surface == 0)
|
||||
goto err_resource;
|
||||
|
||||
pipe_resource_reference(&res, NULL);
|
||||
|
||||
vl_compositor_init_state(&vlsurface->cstate, pipe);
|
||||
|
|
@ -125,6 +109,15 @@ vlVdpOutputSurfaceCreate(VdpDevice device,
|
|||
pipe_mutex_unlock(dev->mutex);
|
||||
|
||||
return VDP_STATUS_OK;
|
||||
|
||||
err_resource:
|
||||
pipe_sampler_view_reference(&vlsurface->sampler_view, NULL);
|
||||
pipe_surface_reference(&vlsurface->surface, NULL);
|
||||
pipe_surface_reference(&res, NULL);
|
||||
err_unlock:
|
||||
pipe_mutex_unlock(dev->mutex);
|
||||
FREE(vlsurface);
|
||||
return VDP_STATUS_ERROR;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue