diff options
Diffstat (limited to 'radeon.c')
-rw-r--r-- | radeon.c | 85 |
1 files changed, 1 insertions, 84 deletions
@@ -37,9 +37,7 @@ typedef struct EGLDisplayNative *EGLDisplayNative; struct EGLDisplayNative { struct EGLDisplay base; -#ifdef __DRI_COPY_BUFFER __DRIcopyBufferExtension *copyBuffer; -#endif }; typedef struct EGLSurfaceNative *EGLSurfaceNative; @@ -136,83 +134,6 @@ nativeDestroySurface(EGLDisplay display, EGLSurface surface) return EGL_TRUE; } -static EGLBoolean -nativeMemcpySwapBuffers(EGLDisplay display, EGLSurface surface) -{ - EGLSurfaceNative nativeSurface = (EGLSurfaceNative) surface; - struct drm_radeon_gem_pread pread; - struct drm_radeon_gem_pwrite pwrite; - char *data; - int stride, i; - - if (!nativeSurface->backBuffer) - return EGL_TRUE; - - stride = surface->buffers[0].pitch; - - pread.handle = nativeSurface->handles[0]; - pread.pad = 0; - pread.offset = 0; - pread.size = stride * surface->height; - - data = malloc(pread.size); - if (data == NULL) { - fprintf(stderr, "swap buffers malloc failed\n"); - return EGL_FALSE; - } - - pread.data_ptr = (long) data; - - if (ioctl(display->fd, DRM_IOCTL_RADEON_GEM_PREAD, &pread)) { - fprintf(stderr, "gem pread failed\n"); - return EGL_FALSE; - } - - if (nativeSurface->frontHandle == 0) { - struct drm_gem_open open_arg; - - open_arg.name = nativeSurface->front.name; - if (ioctl(display->fd, DRM_IOCTL_GEM_OPEN, &open_arg)) { - fprintf(stderr, "failed to gem_open back buffer\n"); - return EGL_FALSE; - } - - nativeSurface->frontHandle = open_arg.handle; - } - - - for (i = 0; i < surface->height; i++) { - pwrite.handle = nativeSurface->frontHandle; - pwrite.offset = nativeSurface->front.pitch * i; - pwrite.size = surface->width * 4; - pwrite.data_ptr = (intptr_t) data + i * stride; - if (ioctl(display->fd, DRM_IOCTL_RADEON_GEM_PWRITE, &pwrite)) { - fprintf(stderr, "gem pread failed\n"); - return EGL_FALSE; - } - } - - free(data); - - return EGL_TRUE; -} - -static const struct EagleBackend radeonMemcpyBackend = { - nativeGetBuffers, - nativeMemcpySwapBuffers, - nativeDestroySurface, -}; - -static const char fb_device[] = "/dev/fb"; - -static void -nativeInitMemcpy(EGLDisplay display) -{ - display->backend = &radeonMemcpyBackend; - - printf("Using memcpy swapbuffer\n"); -} - EGLDisplay eglCreateDisplayNative(const char *device, const char *driver) { @@ -228,7 +149,7 @@ eglCreateDisplayNative(const char *device, const char *driver) } if (nativeDisplay->base.backend == NULL) - nativeInitMemcpy(&nativeDisplay->base); + return NULL; return &nativeDisplay->base; } @@ -265,8 +186,6 @@ eglCreateSurfaceForName(EGLDisplay display, EGLConfig config, return &nativeSurface->base; } -#ifdef __DRI_COPY_BUFFER - EGLBoolean eglCopyNativeBuffers(EGLDisplay display, EGLSurface dst, GLenum dstBuffer, int32_t dst_x, int32_t dst_y, @@ -300,8 +219,6 @@ eglCopyNativeBuffers(EGLDisplay display, x, y, width, height); } -#endif - void * eglReadBuffer(EGLDisplay display, EGLSurface surface, GLenum buffer, GLuint *stride) |