コード例 #1
0
ファイル: eglapi.c プロジェクト: ChillyWillyGuru/RSXGL
EGLImageKHR EGLAPIENTRY
eglCreateDRMImageMESA(EGLDisplay dpy, const EGLint *attr_list)
{
   _EGLDisplay *disp = _eglLockDisplay(dpy);
   _EGLDriver *drv;
   _EGLImage *img;
   EGLImageKHR ret;

   _EGL_CHECK_DISPLAY(disp, EGL_NO_IMAGE_KHR, drv);
   if (!disp->Extensions.MESA_drm_image)
      RETURN_EGL_EVAL(disp, EGL_NO_IMAGE_KHR);

   img = drv->API.CreateDRMImageMESA(drv, disp, attr_list);
   ret = (img) ? _eglLinkImage(img) : EGL_NO_IMAGE_KHR;

   RETURN_EGL_EVAL(disp, ret);
}
コード例 #2
0
ファイル: eglapi.c プロジェクト: ChillyWillyGuru/RSXGL
EGLImageKHR EGLAPIENTRY
eglCreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum target,
                  EGLClientBuffer buffer, const EGLint *attr_list)
{
   _EGLDisplay *disp = _eglLockDisplay(dpy);
   _EGLContext *context = _eglLookupContext(ctx, disp);
   _EGLDriver *drv;
   _EGLImage *img;
   EGLImageKHR ret;

   _EGL_CHECK_DISPLAY(disp, EGL_NO_IMAGE_KHR, drv);
   if (!disp->Extensions.KHR_image_base)
      RETURN_EGL_EVAL(disp, EGL_NO_IMAGE_KHR);
   if (!context && ctx != EGL_NO_CONTEXT)
      RETURN_EGL_ERROR(disp, EGL_BAD_CONTEXT, EGL_NO_IMAGE_KHR);

   img = drv->API.CreateImageKHR(drv,
         disp, context, target, buffer, attr_list);
   ret = (img) ? _eglLinkImage(img) : EGL_NO_IMAGE_KHR;

   RETURN_EGL_EVAL(disp, ret);
}
コード例 #3
0
ファイル: platform_drm.c プロジェクト: ashmew2/kolibriosSVN
static _EGLSurface *
dri2_create_surface(_EGLDriver *drv, _EGLDisplay *disp, EGLint type,
		    _EGLConfig *conf, EGLNativeWindowType window,
		    const EGLint *attrib_list)
{
   struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
   struct dri2_egl_config *dri2_conf = dri2_egl_config(conf);
   struct dri2_egl_surface *dri2_surf;
   struct gbm_dri_surface *surf;
   struct gbm_bo       *bo;
   _EGLImage           *img;
   EGLint attr[10];

   (void) drv;

   dri2_surf = calloc(1, sizeof *dri2_surf);
   if (!dri2_surf) {
      _eglError(EGL_BAD_ALLOC, "dri2_create_surface");
      return NULL;
   }

   if (!_eglInitSurface(&dri2_surf->base, disp, type, conf, attrib_list))
      goto cleanup_surf;

   switch (type) {
   case EGL_WINDOW_BIT:
      if (!window)
         return NULL;
      surf = gbm_dri_surface((struct gbm_surface *) window);
      dri2_surf->gbm_surf = surf;
      dri2_surf->base.Width =  surf->base.width;
      dri2_surf->base.Height = surf->base.height;
      surf->dri_private = dri2_surf;
      break;
   default:
      goto cleanup_surf;
   }

   attr[0] = EGL_WIDTH;
   attr[1] = surf->base.width;
   attr[2] = EGL_HEIGHT;
   attr[3] = surf->base.height;
   attr[4] = EGL_DRM_BUFFER_FORMAT_MESA;
   attr[5] = EGL_DRM_BUFFER_FORMAT_ARGB32_MESA;
   attr[6] = EGL_DRM_BUFFER_USE_MESA;
   attr[7] = EGL_DRM_BUFFER_USE_SHARE_MESA;
   attr[8] = EGL_NONE;

   img = drv->API.CreateDRMImageMESA(drv, disp, attr);
   dri2_surf->egl_front = img;
   dri2_surf->khr_front = (img) ? _eglLinkImage(img) : EGL_NO_IMAGE_KHR;

   bo = gbm_bo_import(&dri2_dpy->gbm_dri->base.base,
                      GBM_BO_IMPORT_EGL_IMAGE, dri2_surf->khr_front, 0);
   if( bo == NULL){
      _eglError(EGL_BAD_ALLOC, "gbm_bo_create front buffer");
      goto cleanup_surf;
   }
   dri2_surf->color_buffers[1].bo = bo;

   img = drv->API.CreateDRMImageMESA(drv, disp, attr);
   dri2_surf->egl_back = img;
   dri2_surf->khr_back = (img) ? _eglLinkImage(img) : EGL_NO_IMAGE_KHR;

   bo = gbm_bo_import(&dri2_dpy->gbm_dri->base.base,
                      GBM_BO_IMPORT_EGL_IMAGE, dri2_surf->khr_back, 0);
   if( bo == NULL){
      _eglError(EGL_BAD_ALLOC, "gbm_bo_create back buffer");
      goto cleanup_surf;
   }
   dri2_surf->color_buffers[2].bo = bo;


   dri2_surf->dri_drawable =
      (*dri2_dpy->dri2->createNewDrawable) (dri2_dpy->dri_screen,
					    dri2_conf->dri_double_config,
					    dri2_surf->gbm_surf);

   if (dri2_surf->dri_drawable == NULL) {
      _eglError(EGL_BAD_ALLOC, "dri2->createNewDrawable");
      goto cleanup_surf;
   }

   return &dri2_surf->base;

 cleanup_surf:
   free(dri2_surf);

   return NULL;
}