Commit 1bf70ad4 authored by Xiang, Haihao's avatar Xiang, Haihao

libva: render front buffer for Pixmap.

The way to get drawable type is proposed by Gwenole Beauchesne <gbeauchesne@splitted-desktop.com>
parent 2e719ae5
......@@ -98,7 +98,11 @@ dri2GetRenderingBuffer(VADriverContextP ctx, struct dri_drawable *dri_drawable)
VA_DRI2Buffer *buffers;
i = 0;
if (dri_drawable->is_window)
attachments[i++] = __DRI_BUFFER_BACK_LEFT;
else
attachments[i++] = __DRI_BUFFER_FRONT_LEFT;
buffers = VA_DRI2GetBuffers(ctx->native_dpy, dri_drawable->x_drawable,
&dri2_drawable->width, &dri2_drawable->height,
attachments, i, &count);
......
#include "va_dricommon.h"
// X error trap
static int x11_error_code = 0;
static int (*old_error_handler)(Display *, XErrorEvent *);
static int
error_handler(Display *dpy, XErrorEvent *error)
{
x11_error_code = error->error_code;
return 0;
}
static void
x11_trap_errors(void)
{
x11_error_code = 0;
old_error_handler = XSetErrorHandler(error_handler);
}
static int
x11_untrap_errors(void)
{
XSetErrorHandler(old_error_handler);
return x11_error_code;
}
static int
is_window(Display *dpy, Drawable drawable)
{
XWindowAttributes wattr;
x11_trap_errors();
XGetWindowAttributes(dpy, drawable, &wattr);
return x11_untrap_errors() == 0;
}
static struct dri_drawable *
do_drawable_hash(VADriverContextP ctx, XID drawable)
{
......@@ -15,6 +50,7 @@ do_drawable_hash(VADriverContextP ctx, XID drawable)
dri_drawable = dri_state->createDrawable(ctx, drawable);
dri_drawable->x_drawable = drawable;
dri_drawable->is_window = is_window((Display *)ctx->native_dpy, drawable);
dri_drawable->next = dri_state->drawable_hash[index];
dri_state->drawable_hash[index] = dri_drawable;
......
......@@ -40,6 +40,7 @@ union dri_buffer
struct dri_drawable
{
XID x_drawable;
int is_window;
int x;
int y;
unsigned int width;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment