From 379f46c8ac50b9b76455b1e62d6d541182339e96 Mon Sep 17 00:00:00 2001 From: Christian König Date: Mon, 27 Feb 2012 16:50:01 +0100 Subject: st/vdpau: fix default swizzle for Output/Bitmap samplers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christian König --- src/gallium/state_trackers/vdpau/bitmap.c | 3 +-- src/gallium/state_trackers/vdpau/device.c | 22 ++++++++++++++++++++-- src/gallium/state_trackers/vdpau/output.c | 3 +-- src/gallium/state_trackers/vdpau/vdpau_private.h | 2 ++ 4 files changed, 24 insertions(+), 6 deletions(-) (limited to 'src/gallium/state_trackers') diff --git a/src/gallium/state_trackers/vdpau/bitmap.c b/src/gallium/state_trackers/vdpau/bitmap.c index 0b885c8af7c..abd745ae1c6 100644 --- a/src/gallium/state_trackers/vdpau/bitmap.c +++ b/src/gallium/state_trackers/vdpau/bitmap.c @@ -84,8 +84,7 @@ vlVdpBitmapSurfaceCreate(VdpDevice device, return VDP_STATUS_RESOURCES; } - memset(&sv_templ, 0, sizeof(sv_templ)); - u_sampler_view_default_template(&sv_templ, res, res->format); + vlVdpDefaultSamplerViewTemplate(&sv_templ, res); vlsurface->sampler_view = pipe->create_sampler_view(pipe, res, &sv_templ); if (!vlsurface->sampler_view) { pipe_resource_reference(&res, NULL); diff --git a/src/gallium/state_trackers/vdpau/device.c b/src/gallium/state_trackers/vdpau/device.c index 482b71e9a0d..98106a1c702 100644 --- a/src/gallium/state_trackers/vdpau/device.c +++ b/src/gallium/state_trackers/vdpau/device.c @@ -239,6 +239,25 @@ vlVdpGetErrorString (VdpStatus status) } } +void +vlVdpDefaultSamplerViewTemplate(struct pipe_sampler_view *templ, struct pipe_resource *res) +{ + const struct util_format_description *desc; + + memset(templ, 0, sizeof(*templ)); + u_sampler_view_default_template(templ, res, res->format); + + desc = util_format_description(res->format); + if (desc->swizzle[0] == UTIL_FORMAT_SWIZZLE_0) + templ->swizzle_r = PIPE_SWIZZLE_ONE; + if (desc->swizzle[1] == UTIL_FORMAT_SWIZZLE_0) + templ->swizzle_g = PIPE_SWIZZLE_ONE; + if (desc->swizzle[2] == UTIL_FORMAT_SWIZZLE_0) + templ->swizzle_b = PIPE_SWIZZLE_ONE; + if (desc->swizzle[3] == UTIL_FORMAT_SWIZZLE_0) + templ->swizzle_a = PIPE_SWIZZLE_ONE; +} + void vlVdpResolveDelayedRendering(vlVdpDevice *dev, struct pipe_surface *surface, struct u_rect *dirty_area) { @@ -270,8 +289,7 @@ vlVdpResolveDelayedRendering(vlVdpDevice *dev, struct pipe_surface *surface, str struct pipe_resource *res = surface->texture; struct pipe_sampler_view sv_templ; - memset(&sv_templ, 0, sizeof(sv_templ)); - u_sampler_view_default_template(&sv_templ, res, res->format); + vlVdpDefaultSamplerViewTemplate(&sv_templ, res); pipe_sampler_view_reference(&vlsurface->sampler_view, dev->context->create_sampler_view(dev->context, res, &sv_templ)); } diff --git a/src/gallium/state_trackers/vdpau/output.c b/src/gallium/state_trackers/vdpau/output.c index aa636bd6568..873edac4962 100644 --- a/src/gallium/state_trackers/vdpau/output.c +++ b/src/gallium/state_trackers/vdpau/output.c @@ -85,8 +85,7 @@ vlVdpOutputSurfaceCreate(VdpDevice device, return VDP_STATUS_ERROR; } - memset(&sv_templ, 0, sizeof(sv_templ)); - u_sampler_view_default_template(&sv_templ, res, res->format); + vlVdpDefaultSamplerViewTemplate(&sv_templ, res); vlsurface->sampler_view = pipe->create_sampler_view(pipe, res, &sv_templ); if (!vlsurface->sampler_view) { pipe_resource_reference(&res, NULL); diff --git a/src/gallium/state_trackers/vdpau/vdpau_private.h b/src/gallium/state_trackers/vdpau/vdpau_private.h index ab2c4201e0f..b72a7d642ff 100644 --- a/src/gallium/state_trackers/vdpau/vdpau_private.h +++ b/src/gallium/state_trackers/vdpau/vdpau_private.h @@ -381,6 +381,8 @@ boolean vlGetFuncFTAB(VdpFuncId function_id, void **func); VdpDeviceCreateX11 vdp_imp_device_create_x11; VdpPresentationQueueTargetCreateX11 vlVdpPresentationQueueTargetCreateX11; +void vlVdpDefaultSamplerViewTemplate(struct pipe_sampler_view *templ, struct pipe_resource *res); + /* Delayed rendering funtionality */ void vlVdpResolveDelayedRendering(vlVdpDevice *dev, struct pipe_surface *surface, struct u_rect *dirty_area); void vlVdpSave4DelayedRendering(vlVdpDevice *dev, VdpOutputSurface surface, struct vl_compositor_state *cstate); -- cgit v1.2.3