diff options
author | Cooper Yuan <cooperyuan@gmail.com> | 2009-09-21 16:38:50 +0800 |
---|---|---|
committer | Cooper Yuan <cooperyuan@gmail.com> | 2009-09-21 16:38:50 +0800 |
commit | 3d97911277a764936252af0275e239bfef3848e7 (patch) | |
tree | 3c92baf71ee28f0a627b9eb3359367fe9a6dd02b | |
parent | c77966af19fcf5c7887a2cde0420dd5af86733d3 (diff) |
xvmc: move context and screen management to radeon_vl.c
-rw-r--r-- | src/gallium/winsys/g3dvl/radeon/Makefile | 5 | ||||
-rw-r--r-- | src/gallium/winsys/g3dvl/radeon/radeon_vl.c | 126 | ||||
-rw-r--r-- | src/gallium/winsys/g3dvl/radeon/radeon_vl.h | 6 |
3 files changed, 48 insertions, 89 deletions
diff --git a/src/gallium/winsys/g3dvl/radeon/Makefile b/src/gallium/winsys/g3dvl/radeon/Makefile index 464a751b5..ff7546219 100644 --- a/src/gallium/winsys/g3dvl/radeon/Makefile +++ b/src/gallium/winsys/g3dvl/radeon/Makefile @@ -14,7 +14,8 @@ CFLAGS += -g -Wall -Werror=implicit-function-declaration -fPIC \ -I${DRMDIR}/include/nouveau \ -I${GALLIUMDIR}/drivers \ -I${GALLIUMDIR}/auxiliary \ - -I${DRIDIR}/include + -I${DRIDIR}/include \ + -I${GALLIUMDIR}/drivers/r300 LDFLAGS += -L${DRMDIR}/lib \ -L${DRIDIR}/lib \ @@ -26,7 +27,7 @@ LDFLAGS += -L${DRMDIR}/lib \ -L${GALLIUMDIR}/auxiliary/cso_cache \ -L${GALLIUMDIR}/drivers/r300 -LIBS += -lradeondrm -ldriclient -ldrm_nouveau -ldrm -lradeon -ldraw -ltgsi -ltranslate -lrtasm -lcso_cache -lm +LIBS += -lradeondrm -ldriclient -ldrm -lradeon -ldraw -ltgsi -ltranslate -lrtasm -lcso_cache -lm ############################################# diff --git a/src/gallium/winsys/g3dvl/radeon/radeon_vl.c b/src/gallium/winsys/g3dvl/radeon/radeon_vl.c index acca20c8b..63cc98a94 100644 --- a/src/gallium/winsys/g3dvl/radeon/radeon_vl.c +++ b/src/gallium/winsys/g3dvl/radeon/radeon_vl.c @@ -28,95 +28,57 @@ #include <pipe/p_context.h> #include <pipe/p_screen.h> #include <util/u_memory.h> -#include <common/nouveau_dri.h> -#include <common/nouveau_local.h> -#include <common/nouveau_winsys_pipe.h> -#include "radeon_vl.h" +#include "radeon_drm.h" -static int radeon_check_dri_drm_ddx(dri_version_t *dri, dri_version_t *drm, dri_version_t *ddx) -{ - static const dri_version_t ddx_expected = {0, 0, NOUVEAU_DRM_HEADER_PATCHLEVEL}; - static const dri_version_t dri_expected = {4, 0, 0}; - static const dri_version_t drm_expected = {0, 0, NOUVEAU_DRM_HEADER_PATCHLEVEL}; - - assert(dri); - assert(drm); - assert(ddx); - - if (dri->major != dri_expected.major || dri->minor < dri_expected.minor) - { - NOUVEAU_ERR("Unexpected DRI version.\n"); - return 1; - } - if (drm->major != drm_expected.major || drm->minor < drm_expected.minor) - { - NOUVEAU_ERR("Unexpected DRM version.\n"); - return 1; - } - if (ddx->major != ddx_expected.major || ddx->minor < ddx_expected.minor) - { - NOUVEAU_ERR("Unexpected DDX version.\n"); - return 1; - } - - return 0; -} +#include "radeon_vl.h" static int radeon_vl_context_create(dri_context_t *dri_context) { - dri_screen_t *dri_screen; - struct radeon_vl_screen *rvl_screen; - struct radeon_vl_context *rvl_ctx; - - assert (dri_context); + dri_screen_t *dri_screen; + struct radeon_vl_screen *rvl_screen; + struct radeon_vl_context *rvl_ctx; - dri_screen = dri_context->dri_screen; - rvl_screen = dri_screen->private; - rvl_ctx = CALLOC_STRUCT(nouveau_context_vl); + assert (dri_context); - if (!rvl_ctx) - return 1; + dri_screen = dri_context->dri_screen; + rvl_screen = dri_screen->private; + rvl_ctx = CALLOC_STRUCT(radeon_vl_context); - if (nouveau_context_init(&nv_screen->base, dri_context->drm_context, - (drmLock*)&dri_screen->sarea->lock, NULL, &rvl_ctx->base)) - { - FREE(rvl_ctx); - return 1; - } + if (!rvl_ctx) + return 1; - dri_context->private = (void*)rvl_ctx - rvl_ctx->dri_context = dri_context; - rvl_ctx->nv_screen = rvl_screen; + /* create a r300 pipe_context. */ + //r300_create_context(screen, (struct r300_winsys*)screen->winsys); - rvl_ctx->base.nvc->pctx[rvl_ctx->base.pctx_id]->priv = rvl_ctx; + dri_context->private = (void*)rvl_ctx; + rvl_ctx->dri_context = dri_context; + rvl_ctx->rvl_screen = rvl_screen; - return 0; + return 0; } static void radeon_vl_context_destroy(dri_context_t *dri_context) { - struct radeon_vl_context *rvl_ctx = dri_context->private; - - assert(dri_context); + struct radeon_vl_context *rvl_ctx = dri_context->private; - nouveau_context_cleanup(&nv->base); + assert(dri_context); - FREE(nv); + FREE(rvl_ctx); } static int radeon_vl_context_bind(struct radeon_vl_context *rvl_ctx, dri_drawable_t *dri_drawable) { - assert(rvl_ctx); - assert(dri_drawable); + assert(rvl_ctx); + assert(dri_drawable); - if (rvl_ctx->dri_drawable != dri_drawable) - { - rvl_ctx->dri_drawable = dri_drawable; - dri_drawable->private = rvl_ctx; - } + if (rvl_ctx->dri_drawable != dri_drawable) + { + rvl_ctx->dri_drawable = dri_drawable; + dri_drawable->private = rvl_ctx; + } - return 0; + return 0; } static int radeon_vl_context_unbind(struct radeon_vl_context *rvl_ctx) @@ -130,38 +92,36 @@ static int radeon_vl_context_unbind(struct radeon_vl_context *rvl_ctx) static int radeon_vl_screen_create(dri_screen_t *dri_screen, dri_framebuffer_t *dri_framebuf) { - struct nouveau_dri *nv_dri = dri_framebuf->private; - struct nouveau_screen_vl *nv_screen; + struct radeon_vl_screen *rvl_screen; + struct radeon_winsys *winsys; + struct r300_winsys *r300; assert(dri_screen); assert(dri_framebuf); - if (nouveau_check_dri_drm_ddx(&dri_screen->dri, &dri_screen->drm, &dri_screen->ddx)) - return 1; - - nv_screen = CALLOC_STRUCT(nouveau_screen_vl); + rvl_screen = CALLOC_STRUCT(radeon_vl_screen); - if (!nv_screen) + if (!rvl_screen) return 1; - if (nouveau_screen_init(nv_dri, dri_screen->fd, &nv_screen->base)) - { - FREE(nv_screen); - return 1; - } + winsys = radeon_pipe_winsys(dri_screen->fd); + r300 = radeon_create_r300_winsys(dri_screen->fd, winsys); + r300_create_screen(r300); + + rvl_screen->dri_screen = dri_screen; + dri_screen->private = (void*)rvl_screen; - nv_screen->dri_screen = dri_screen; - dri_screen->private = (void*)nv_screen; + FREE(winsys); return 0; } static void radeon_vl_screen_destroy(dri_screen_t *dri_screen) { - struct nouveau_screen_vl *nv_screen = dri_screen->private; + struct nouveau_screen_vl *rvl_screen = dri_screen->private; - radeon_screen_cleanup(&nv_screen->base); - FREE(nv_screen); + radeon_screen_cleanup(&rvl_screen->base); + FREE(rvl_screen); } /* diff --git a/src/gallium/winsys/g3dvl/radeon/radeon_vl.h b/src/gallium/winsys/g3dvl/radeon/radeon_vl.h index 69f148f66..c02ebd3e1 100644 --- a/src/gallium/winsys/g3dvl/radeon/radeon_vl.h +++ b/src/gallium/winsys/g3dvl/radeon/radeon_vl.h @@ -28,12 +28,10 @@ #define __RADEON_VL_H__ #include <driclient.h> -#include <nouveau/radeon_winsys.h> -#include <common/radeon_context.h> struct radeon_vl_context { - struct radeon_context base; + struct pipe_context base; struct radeon_vl_screen *rvl_screen; dri_context_t *dri_context; dri_drawable_t *dri_drawable; @@ -44,7 +42,7 @@ struct radeon_vl_context struct radeon_vl_screen { - struct radeon_screen base; + struct pipe_screen base; dri_screen_t *dri_screen; }; |