summaryrefslogtreecommitdiff
path: root/src/gallium/winsys/egl_drm/intel/intel_egl.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/winsys/egl_drm/intel/intel_egl.c')
-rw-r--r--src/gallium/winsys/egl_drm/intel/intel_egl.c31
1 files changed, 17 insertions, 14 deletions
diff --git a/src/gallium/winsys/egl_drm/intel/intel_egl.c b/src/gallium/winsys/egl_drm/intel/intel_egl.c
index ac1825210e..3b4ab330f5 100644
--- a/src/gallium/winsys/egl_drm/intel/intel_egl.c
+++ b/src/gallium/winsys/egl_drm/intel/intel_egl.c
@@ -3,6 +3,7 @@
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
+#include <stdint.h>
#include "eglconfig.h"
#include "eglcontext.h"
@@ -13,7 +14,6 @@
#include "eglscreen.h"
#include "eglsurface.h"
-#include "glapi.h"
#include "intel_egl.h"
#include "xf86drm.h"
@@ -21,9 +21,6 @@
#include "intel_context.h"
-#include "ws_dri_bufmgr.h"
-
-#include "intel_winsys.h"
#include "state_tracker/st_public.h"
struct egl_drm_device* egl_drm_create_device(int drmFD);
@@ -114,6 +111,7 @@ drm_initialize(_EGLDriver *drv, EGLDisplay dpy, EGLint *major, EGLint *minor)
struct drm_screen *screen = NULL;
drmModeOutputPtr output = NULL;
drmModeResPtr res = NULL;
+ unsigned count_outputs = 0;
EGLint i;
int fd;
@@ -131,8 +129,10 @@ drm_initialize(_EGLDriver *drv, EGLDisplay dpy, EGLint *major, EGLint *minor)
drm_update_res(drm_drv);
res = drm_drv->res;
+ if (res)
+ count_outputs = res->count_outputs;
- for(i = 0; i < res->count_outputs; i++) {
+ for(i = 0; i < count_outputs; i++) {
output = drmModeGetOutput(fd, res->outputs[i]);
if (!output)
@@ -280,9 +280,9 @@ drm_create_context(_EGLDriver *drv, EGLDisplay dpy, EGLConfig config, EGLContext
/* generate handle and insert into hash table */
_eglSaveContext(&c->base);
- assert(c->base.Handle);
+ assert(_eglGetContextHandle(&c->base));
- return c->base.Handle;
+ return _eglGetContextHandle(&c->base);
err_gl:
free(context);
err_c:
@@ -431,10 +431,12 @@ prettyColors(int fd, unsigned int handle, size_t pitch)
{
drmBO bo;
unsigned int *ptr;
+ void *p;
int i;
drmBOReference(fd, handle, &bo);
- drmBOMap(fd, &bo, DRM_BO_FLAG_READ | DRM_BO_FLAG_WRITE, 0, (void**)&ptr);
+ drmBOMap(fd, &bo, DRM_BO_FLAG_READ | DRM_BO_FLAG_WRITE, 0, &p);
+ ptr = (unsigned int*)p;
for (i = 0; i < (bo.size / 4); i++)
ptr[i] = 0xFFFFFFFF;
@@ -457,8 +459,6 @@ drm_show_screen_surface_mesa(_EGLDriver *drv, EGLDisplay dpy,
struct drm_driver *drm_drv = (struct drm_driver *)drv;
struct drm_surface *surf = lookup_drm_surface(surface);
struct drm_screen *scrn = lookup_drm_screen(dpy, screen);
- //struct intel_framebuffer *intel_fb = NULL;
- //struct pipe_surface *front_surf = NULL;
_EGLMode *mode = _eglLookupMode(dpy, m);
size_t pitch = 2048 * 4;
size_t size = mode->Height * pitch;
@@ -466,8 +466,6 @@ drm_show_screen_surface_mesa(_EGLDriver *drv, EGLDisplay dpy,
/* TODO if allready shown take down */
- printf("setting mode to %i x %i\n", mode->Width, mode->Height);
-
ret = drmBOCreate(drm_drv->device->drmFD, size, 0, 0,
DRM_BO_FLAG_READ |
DRM_BO_FLAG_WRITE |
@@ -476,12 +474,13 @@ drm_show_screen_surface_mesa(_EGLDriver *drv, EGLDisplay dpy,
DRM_BO_FLAG_NO_EVICT,
DRM_BO_HINT_DONT_FENCE, &scrn->buffer);
- prettyColors(drm_drv->device->drmFD, scrn->buffer.handle, pitch);
if (ret) {
printf("failed to create framebuffer (ret %d)\n", ret);
return EGL_FALSE;
}
+ prettyColors(drm_drv->device->drmFD, scrn->buffer.handle, pitch);
+
ret = drmModeAddFB(drm_drv->device->drmFD, mode->Width, mode->Height,
32, 32, pitch,
scrn->buffer.handle,
@@ -550,6 +549,7 @@ drm_make_current(_EGLDriver *drv, EGLDisplay dpy, EGLSurface draw, EGLSurface re
struct drm_context *ctx = lookup_drm_context(context);
EGLBoolean b;
+ printf("drm_make_current\n");
b = _eglMakeCurrent(drv, dpy, draw, read, context);
if (!b)
return EGL_FALSE;
@@ -559,6 +559,7 @@ drm_make_current(_EGLDriver *drv, EGLDisplay dpy, EGLSurface draw, EGLSurface re
(void) readSurf;
(void) ctx;
+ printf("enter intel_make_current\n");
intel_make_current(ctx->context, drawSurf->drawable, readSurf->drawable);
return EGL_TRUE;
}
@@ -584,7 +585,7 @@ drm_swap_buffers(_EGLDriver *drv, EGLDisplay dpy, EGLSurface draw)
* plug in API functions.
*/
_EGLDriver *
-_eglMain(_EGLDisplay *dpy)
+_eglMain(_EGLDisplay *dpy, const char *args)
{
struct drm_driver *drm;
@@ -609,6 +610,8 @@ _eglMain(_EGLDisplay *dpy)
drm->base.API.ShowScreenSurfaceMESA = drm_show_screen_surface_mesa;
drm->base.API.SwapBuffers = drm_swap_buffers;
+ drm->base.ClientAPIsMask = EGL_OPENGL_BIT /*| EGL_OPENGL_ES_BIT*/;
+
/* enable supported extensions */
drm->base.Extensions.MESA_screen_surface = EGL_TRUE;
drm->base.Extensions.MESA_copy_context = EGL_TRUE;