[Mesa-dev] [PATCH 3/3] st/vdpau: check surface params before creating resources
Christian König
deathsimple at vodafone.de
Sat Jan 18 02:41:19 PST 2014
Am 18.01.2014 06:05, schrieb Ilia Mirkin:
> On Fri, Jan 17, 2014 at 11:58 PM, Ilia Mirkin <imirkin at alum.mit.edu> wrote:
>> Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
>> ---
>>
>> This seems like a function that should exist in gallium/util, but I didn't
>> find it. I guess the mesa/st does these checks far enough away from actual
>> resource creation.
>>
>> src/gallium/state_trackers/vdpau/bitmap.c | 4 ++++
>> src/gallium/state_trackers/vdpau/output.c | 7 +++++++
>> src/gallium/state_trackers/vdpau/vdpau_private.h | 8 ++++++++
>> 3 files changed, 19 insertions(+)
>>
>> diff --git a/src/gallium/state_trackers/vdpau/bitmap.c b/src/gallium/state_trackers/vdpau/bitmap.c
>> index 6110fc7..d316134 100644
>> --- a/src/gallium/state_trackers/vdpau/bitmap.c
>> +++ b/src/gallium/state_trackers/vdpau/bitmap.c
>> @@ -80,6 +80,10 @@ vlVdpBitmapSurfaceCreate(VdpDevice device,
>> res_tmpl.usage = frequently_accessed ? PIPE_USAGE_DYNAMIC : PIPE_USAGE_STATIC;
>>
>> pipe_mutex_lock(dev->mutex);
>> +
>> + if (!CheckSurfaceParams(pipe->screen, &res_tmpl))
>> + goto err_unlock;
> Ugh, and naturally I mess this up -- there should be a ret =
> VDP_STATUS_RESOURCES here. You can see the fixed version at
> https://github.com/imirkin/mesa/commits/vdpau
I was just about to complain. But it seems like this is the only remark
I can find as well.
Patches are: Reviewed-by: Christian König <christian.koenig at amd.com>
>
>> +
>> res = pipe->screen->resource_create(pipe->screen, &res_tmpl);
>> if (!res) {
>> ret = VDP_STATUS_RESOURCES;
>> diff --git a/src/gallium/state_trackers/vdpau/output.c b/src/gallium/state_trackers/vdpau/output.c
>> index 58edd37..50036ae 100644
>> --- a/src/gallium/state_trackers/vdpau/output.c
>> +++ b/src/gallium/state_trackers/vdpau/output.c
>> @@ -83,6 +83,10 @@ vlVdpOutputSurfaceCreate(VdpDevice device,
>> res_tmpl.usage = PIPE_USAGE_STATIC;
>>
>> pipe_mutex_lock(dev->mutex);
>> +
>> + if (!CheckSurfaceParams(pipe->screen, &res_tmpl))
>> + goto err_unlock;
>> +
>> res = pipe->screen->resource_create(pipe->screen, &res_tmpl);
>> if (!res)
>> goto err_unlock;
>> @@ -319,6 +323,9 @@ vlVdpOutputSurfacePutBitsIndexed(VdpOutputSurface surface,
>> pipe_mutex_lock(vlsurface->device->mutex);
>> vlVdpResolveDelayedRendering(vlsurface->device, NULL, NULL);
>>
>> + if (!CheckSurfaceParams(context->screen, &res_tmpl))
>> + goto error_resource;
>> +
>> res = context->screen->resource_create(context->screen, &res_tmpl);
>> if (!res)
>> goto error_resource;
>> diff --git a/src/gallium/state_trackers/vdpau/vdpau_private.h b/src/gallium/state_trackers/vdpau/vdpau_private.h
>> index 60196ac..6c2c019 100644
>> --- a/src/gallium/state_trackers/vdpau/vdpau_private.h
>> +++ b/src/gallium/state_trackers/vdpau/vdpau_private.h
>> @@ -332,6 +332,14 @@ RectToPipeBox(const VdpRect *rect, struct pipe_resource *res)
>> return box;
>> }
>>
>> +static inline bool
>> +CheckSurfaceParams(struct pipe_screen *screen,
>> + const struct pipe_resource *templ)
>> +{
>> + return screen->is_format_supported(
>> + screen, templ->format, templ->target, templ->nr_samples, templ->bind);
>> +}
>> +
>> typedef struct
>> {
>> struct vl_screen *vscreen;
>> --
>> 1.8.3.2
>>
More information about the mesa-dev
mailing list