Rev 4401 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4401 | Rev 4494 | ||
---|---|---|---|
Line 105... | Line 105... | ||
105 | { |
105 | { |
106 | struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); |
106 | struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); |
107 | struct dri2_egl_config *dri2_conf = dri2_egl_config(conf); |
107 | struct dri2_egl_config *dri2_conf = dri2_egl_config(conf); |
108 | struct dri2_egl_surface *dri2_surf; |
108 | struct dri2_egl_surface *dri2_surf; |
109 | struct gbm_dri_surface *surf; |
109 | struct gbm_dri_surface *surf; |
- | 110 | struct gbm_bo *bo; |
|
- | 111 | _EGLImage *img; |
|
- | 112 | EGLint attr[10]; |
|
Line 110... | Line 113... | ||
110 | 113 | ||
Line 111... | Line 114... | ||
111 | (void) drv; |
114 | (void) drv; |
112 | 115 | ||
Line 131... | Line 134... | ||
131 | break; |
134 | break; |
132 | default: |
135 | default: |
133 | goto cleanup_surf; |
136 | goto cleanup_surf; |
134 | } |
137 | } |
Line -... | Line 138... | ||
- | 138 | ||
- | 139 | attr[0] = EGL_WIDTH; |
|
- | 140 | attr[1] = surf->base.width; |
|
- | 141 | attr[2] = EGL_HEIGHT; |
|
- | 142 | attr[3] = surf->base.height; |
|
- | 143 | attr[4] = EGL_DRM_BUFFER_FORMAT_MESA; |
|
- | 144 | attr[5] = EGL_DRM_BUFFER_FORMAT_ARGB32_MESA; |
|
- | 145 | attr[6] = EGL_DRM_BUFFER_USE_MESA; |
|
- | 146 | attr[7] = EGL_DRM_BUFFER_USE_SHARE_MESA; |
|
- | 147 | attr[8] = EGL_NONE; |
|
- | 148 | ||
- | 149 | img = drv->API.CreateDRMImageMESA(drv, disp, attr); |
|
- | 150 | dri2_surf->egl_front = img; |
|
- | 151 | dri2_surf->khr_front = (img) ? _eglLinkImage(img) : EGL_NO_IMAGE_KHR; |
|
- | 152 | ||
- | 153 | bo = gbm_bo_import(&dri2_dpy->gbm_dri->base.base, |
|
- | 154 | GBM_BO_IMPORT_EGL_IMAGE, dri2_surf->khr_front, 0); |
|
- | 155 | if( bo == NULL){ |
|
- | 156 | _eglError(EGL_BAD_ALLOC, "gbm_bo_create front buffer"); |
|
- | 157 | goto cleanup_surf; |
|
- | 158 | } |
|
- | 159 | dri2_surf->color_buffers[1].bo = bo; |
|
- | 160 | ||
- | 161 | img = drv->API.CreateDRMImageMESA(drv, disp, attr); |
|
- | 162 | dri2_surf->egl_back = img; |
|
- | 163 | dri2_surf->khr_back = (img) ? _eglLinkImage(img) : EGL_NO_IMAGE_KHR; |
|
- | 164 | ||
- | 165 | bo = gbm_bo_import(&dri2_dpy->gbm_dri->base.base, |
|
- | 166 | GBM_BO_IMPORT_EGL_IMAGE, dri2_surf->khr_back, 0); |
|
- | 167 | if( bo == NULL){ |
|
- | 168 | _eglError(EGL_BAD_ALLOC, "gbm_bo_create back buffer"); |
|
- | 169 | goto cleanup_surf; |
|
- | 170 | } |
|
- | 171 | dri2_surf->color_buffers[2].bo = bo; |
|
- | 172 | ||
135 | 173 | ||
136 | dri2_surf->dri_drawable = |
174 | dri2_surf->dri_drawable = |
137 | (*dri2_dpy->dri2->createNewDrawable) (dri2_dpy->dri_screen, |
175 | (*dri2_dpy->dri2->createNewDrawable) (dri2_dpy->dri_screen, |
138 | dri2_conf->dri_double_config, |
176 | dri2_conf->dri_double_config, |
Line 149... | Line 187... | ||
149 | free(dri2_surf); |
187 | free(dri2_surf); |
Line 150... | Line 188... | ||
150 | 188 | ||
151 | return NULL; |
189 | return NULL; |
Line -... | Line 190... | ||
- | 190 | } |
|
- | 191 | ||
- | 192 | static EGLImageKHR |
|
- | 193 | dri2_get_fb_image(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *draw, EGLint type) |
|
- | 194 | { |
|
- | 195 | struct dri2_egl_surface *dri2_surf = dri2_egl_surface(draw); |
|
- | 196 | ||
- | 197 | return (type == EGL_DRM_BUFFER_FRONT) ? dri2_surf->khr_front:dri2_surf->khr_back; |
|
- | 198 | } |
|
152 | } |
199 | |
153 | 200 | ||
154 | static _EGLSurface * |
201 | static _EGLSurface * |
155 | dri2_create_window_surface(_EGLDriver *drv, _EGLDisplay *disp, |
202 | dri2_create_window_surface(_EGLDriver *drv, _EGLDisplay *disp, |
156 | _EGLConfig *conf, EGLNativeWindowType window, |
203 | _EGLConfig *conf, EGLNativeWindowType window, |
Line 563... | Line 610... | ||
563 | drv->API.CreateWindowSurface = dri2_create_window_surface; |
610 | drv->API.CreateWindowSurface = dri2_create_window_surface; |
564 | drv->API.DestroySurface = dri2_destroy_surface; |
611 | drv->API.DestroySurface = dri2_destroy_surface; |
565 | drv->API.SwapBuffers = dri2_swap_buffers; |
612 | drv->API.SwapBuffers = dri2_swap_buffers; |
566 | drv->API.CreateImageKHR = dri2_drm_create_image_khr; |
613 | drv->API.CreateImageKHR = dri2_drm_create_image_khr; |
567 | drv->API.QueryBufferAge = dri2_query_buffer_age; |
614 | drv->API.QueryBufferAge = dri2_query_buffer_age; |
- | 615 | drv->API.GetImageFB = dri2_get_fb_image; |
|
Line 568... | Line 616... | ||
568 | 616 | ||
Line 569... | Line 617... | ||
569 | disp->Extensions.EXT_buffer_age = EGL_TRUE; |
617 | disp->Extensions.EXT_buffer_age = EGL_TRUE; |
570 | 618 |