mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-06 21:50:11 +01:00
st/vdpau: implement OutputSurfacePutBitsNative
Signed-off-by: Christian König <deathsimple@vodafone.de>
This commit is contained in:
parent
a0571b135e
commit
494e0025d9
3 changed files with 43 additions and 15 deletions
|
|
@ -179,20 +179,7 @@ vlVdpBitmapSurfacePutBitsNative(VdpBitmapSurface surface,
|
|||
|
||||
vlVdpResolveDelayedRendering(vlsurface->device, NULL, NULL);
|
||||
|
||||
dst_box.x = 0;
|
||||
dst_box.y = 0;
|
||||
dst_box.z = 0;
|
||||
dst_box.width = vlsurface->sampler_view->texture->width0;
|
||||
dst_box.height = vlsurface->sampler_view->texture->height0;
|
||||
dst_box.depth = 1;
|
||||
|
||||
if (destination_rect) {
|
||||
dst_box.x = MIN2(destination_rect->x0, destination_rect->x1);
|
||||
dst_box.y = MIN2(destination_rect->y0, destination_rect->y1);
|
||||
dst_box.width = abs(destination_rect->x1 - destination_rect->x0);
|
||||
dst_box.height = abs(destination_rect->y1 - destination_rect->y0);
|
||||
}
|
||||
|
||||
dst_box = RectToPipeBox(destination_rect, vlsurface->sampler_view->texture);
|
||||
pipe->transfer_inline_write(pipe, vlsurface->sampler_view->texture, 0,
|
||||
PIPE_TRANSFER_WRITE, &dst_box, *source_data,
|
||||
*source_pitches, 0);
|
||||
|
|
|
|||
|
|
@ -186,7 +186,26 @@ vlVdpOutputSurfacePutBitsNative(VdpOutputSurface surface,
|
|||
uint32_t const *source_pitches,
|
||||
VdpRect const *destination_rect)
|
||||
{
|
||||
return VDP_STATUS_NO_IMPLEMENTATION;
|
||||
vlVdpOutputSurface *vlsurface;
|
||||
struct pipe_box dst_box;
|
||||
struct pipe_context *pipe;
|
||||
|
||||
vlsurface = vlGetDataHTAB(surface);
|
||||
if (!vlsurface)
|
||||
return VDP_STATUS_INVALID_HANDLE;
|
||||
|
||||
pipe = vlsurface->device->context;
|
||||
if (!pipe)
|
||||
return VDP_STATUS_INVALID_HANDLE;
|
||||
|
||||
vlVdpResolveDelayedRendering(vlsurface->device, NULL, NULL);
|
||||
|
||||
dst_box = RectToPipeBox(destination_rect, vlsurface->sampler_view->texture);
|
||||
pipe->transfer_inline_write(pipe, vlsurface->sampler_view->texture, 0,
|
||||
PIPE_TRANSFER_WRITE, &dst_box, *source_data,
|
||||
*source_pitches, 0);
|
||||
|
||||
return VDP_STATUS_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -285,6 +285,28 @@ RectToPipe(const VdpRect *src, struct u_rect *dst)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static inline struct pipe_box
|
||||
RectToPipeBox(const VdpRect *rect, struct pipe_resource *res)
|
||||
{
|
||||
struct pipe_box box;
|
||||
|
||||
box.x = 0;
|
||||
box.y = 0;
|
||||
box.z = 0;
|
||||
box.width = res->width0;
|
||||
box.height = res->height0;
|
||||
box.depth = 1;
|
||||
|
||||
if (rect) {
|
||||
box.x = MIN2(rect->x0, rect->x1);
|
||||
box.y = MIN2(rect->y0, rect->y1);
|
||||
box.width = abs(rect->x1 - rect->x0);
|
||||
box.height = abs(rect->y1 - rect->y0);
|
||||
}
|
||||
|
||||
return box;
|
||||
}
|
||||
|
||||
typedef struct
|
||||
{
|
||||
struct vl_screen *vscreen;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue