diff options
author | Austin Yuan <shengquan.yuan@gmail.com> | 2010-03-24 10:43:53 +0800 |
---|---|---|
committer | Austin Yuan <shengquan.yuan@gmail.com> | 2010-03-24 10:43:53 +0800 |
commit | 92e17d62fd6a9249906e284a28926010dc2c1639 (patch) | |
tree | d49e829d721dfe95bd71e446fc7ff93db6c2ccaf /va/x11/va_dricommon.c | |
parent | 5405c6ed5838af9294a17acc2140bffb2d282beb (diff) | |
parent | 11f69c8407d2d1ee68d9ca12f650a62a3b0bef64 (diff) |
Merge branch 'master' of git+ssh://AustinYuan@git.freedesktop.org/git/libva into sync-fdo-master20100324_5.3.0.0000
Diffstat (limited to 'va/x11/va_dricommon.c')
-rw-r--r-- | va/x11/va_dricommon.c | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/va/x11/va_dricommon.c b/va/x11/va_dricommon.c new file mode 100644 index 0000000..f9c3dfd --- /dev/null +++ b/va/x11/va_dricommon.c @@ -0,0 +1,62 @@ +#include "va_dricommon.h" + +static struct dri_drawable * +do_drawable_hash(VADriverContextP ctx, XID drawable) +{ + struct dri_state *dri_state = (struct dri_state *)ctx->dri_state; + int index = drawable % DRAWABLE_HASH_SZ; + struct dri_drawable *dri_drawable = dri_state->drawable_hash[index]; + + while (dri_drawable) { + if (dri_drawable->x_drawable == drawable) + return dri_drawable; + dri_drawable = dri_drawable->next; + } + + dri_drawable = dri_state->createDrawable(ctx, drawable); + dri_drawable->x_drawable = drawable; + dri_drawable->next = dri_state->drawable_hash[index]; + dri_state->drawable_hash[index] = dri_drawable; + + return dri_drawable; +} + +void +free_drawable_hashtable(VADriverContextP ctx) +{ + struct dri_state *dri_state = (struct dri_state *)ctx->dri_state; + int i; + struct dri_drawable *dri_drawable, *prev; + + for (i = 0; i < DRAWABLE_HASH_SZ; i++) { + dri_drawable = dri_state->drawable_hash[i]; + + while (dri_drawable) { + prev = dri_drawable; + dri_drawable = prev->next; + dri_state->destroyDrawable(ctx, prev); + } + } +} + +struct dri_drawable * +dri_get_drawable(VADriverContextP ctx, XID drawable) +{ + return do_drawable_hash(ctx, drawable); +} + +void +dri_swap_buffer(VADriverContextP ctx, struct dri_drawable *dri_drawable) +{ + struct dri_state *dri_state = (struct dri_state *)ctx->dri_state; + + dri_state->swapBuffer(ctx, dri_drawable); +} + +union dri_buffer * +dri_get_rendering_buffer(VADriverContextP ctx, struct dri_drawable *dri_drawable) +{ + struct dri_state *dri_state = (struct dri_state *)ctx->dri_state; + + return dri_state->getRenderingBuffer(ctx, dri_drawable); +} |