EGLBoolean _eglQueryScreenMESA(_EGLDriver *drv, EGLDisplay dpy, EGLScreenMESA screen, EGLint attribute, EGLint *value) { const _EGLScreen *scrn = _eglLookupScreen(dpy, screen); if (!scrn) { _eglError(EGL_BAD_SCREEN_MESA, "eglQueryScreenMESA"); return EGL_FALSE; } switch (attribute) { case EGL_SCREEN_POSITION_MESA: value[0] = scrn->OriginX; value[1] = scrn->OriginY; break; case EGL_SCREEN_POSITION_GRANULARITY_MESA: value[0] = scrn->StepX; value[1] = scrn->StepY; break; default: _eglError(EGL_BAD_ATTRIBUTE, "eglQueryScreenMESA"); return EGL_FALSE; } return EGL_TRUE; }
/** * Return all possible modes for the given screen. No sorting of results. * Called via eglGetModesMESA() API function. */ EGLBoolean _eglGetModesMESA(_EGLDriver *drv, EGLDisplay dpy, EGLScreenMESA screen, EGLModeMESA *modes, EGLint modes_size, EGLint *num_modes) { _EGLScreen *scrn = _eglLookupScreen(dpy, screen); if (!scrn) { _eglError(EGL_BAD_SCREEN_MESA, "eglGetModesMESA"); return EGL_FALSE; } if (modes) { EGLint i; *num_modes = MIN2(scrn->NumModes, modes_size); for (i = 0; i < *num_modes; i++) { modes[i] = scrn->Modes[i].Handle; } } else { /* just return total number of supported modes */ *num_modes = scrn->NumModes; } return EGL_TRUE; }
/** * Query a screen's current mode. */ EGLBoolean _eglQueryScreenModeMESA(_EGLDriver *drv, EGLDisplay dpy, EGLScreenMESA screen, EGLModeMESA *mode) { const _EGLScreen *scrn = _eglLookupScreen(dpy, screen); if (scrn->CurrentMode) *mode = scrn->CurrentMode->Handle; else *mode = EGL_NO_MODE_MESA; return EGL_TRUE; }
/** * Query a screen's current surface. */ EGLBoolean _eglQueryScreenSurfaceMESA(_EGLDriver *drv, EGLDisplay dpy, EGLScreenMESA screen, EGLSurface *surface) { const _EGLScreen *scrn = _eglLookupScreen(dpy, screen); if (scrn->CurrentSurface) *surface = scrn->CurrentSurface->Handle; else *surface = EGL_NO_SURFACE; return EGL_TRUE; }
EGLBoolean EGLAPIENTRY eglScreenPositionMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLint x, EGLint y) { _EGLDisplay *disp = _eglLockDisplay(dpy); _EGLScreen *scrn = _eglLookupScreen(screen, disp); _EGLDriver *drv; EGLBoolean ret; _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); ret = drv->API.ScreenPositionMESA(drv, disp, scrn, x, y); RETURN_EGL_EVAL(disp, ret); }
EGLBoolean EGLAPIENTRY eglGetModesMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLModeMESA *modes, EGLint mode_size, EGLint *num_mode) { _EGLDisplay *disp = _eglLockDisplay(dpy); _EGLScreen *scrn = _eglLookupScreen(screen, disp); _EGLDriver *drv; EGLBoolean ret; _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); ret = drv->API.GetModesMESA(drv, disp, scrn, modes, mode_size, num_mode); RETURN_EGL_EVAL(disp, ret); }
EGLBoolean EGLAPIENTRY eglQueryScreenMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLint attribute, EGLint *value) { _EGLDisplay *disp = _eglLockDisplay(dpy); _EGLScreen *scrn = _eglLookupScreen(screen, disp); _EGLDriver *drv; EGLBoolean ret; _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); ret = drv->API.QueryScreenMESA(drv, disp, scrn, attribute, value); RETURN_EGL_EVAL(disp, ret); }
/** * Set a screen's surface origin. */ EGLBoolean _eglScreenPositionMESA(_EGLDriver *drv, EGLDisplay dpy, EGLScreenMESA screen, EGLint x, EGLint y) { _EGLScreen *scrn = _eglLookupScreen(dpy, screen); if (!scrn) { _eglError(EGL_BAD_SCREEN_MESA, "eglScreenPositionMESA"); return EGL_FALSE; } scrn->OriginX = x; scrn->OriginY = y; return EGL_TRUE; }
/** * Set a screen's current display mode. * Note: mode = EGL_NO_MODE is valid (turns off the screen) * * This is just a placeholder function; drivers will always override * this with code that _really_ sets the mode. */ EGLBoolean _eglScreenModeMESA(_EGLDriver *drv, EGLDisplay dpy, EGLScreenMESA screen, EGLModeMESA mode) { _EGLScreen *scrn = _eglLookupScreen(dpy, screen); if (!scrn) { _eglError(EGL_BAD_SCREEN_MESA, "eglScreenModeMESA"); return EGL_FALSE; } scrn->CurrentMode = _eglLookupMode(dpy, mode); return EGL_TRUE; }
EGLBoolean EGLAPIENTRY eglChooseModeMESA(EGLDisplay dpy, EGLScreenMESA screen, const EGLint *attrib_list, EGLModeMESA *modes, EGLint modes_size, EGLint *num_modes) { _EGLDisplay *disp = _eglLockDisplay(dpy); _EGLScreen *scrn = _eglLookupScreen(screen, disp); _EGLDriver *drv; EGLBoolean ret; _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); ret = drv->API.ChooseModeMESA(drv, disp, scrn, attrib_list, modes, modes_size, num_modes); RETURN_EGL_EVAL(disp, ret); }
EGLBoolean EGLAPIENTRY eglQueryScreenModeMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLModeMESA *mode) { _EGLDisplay *disp = _eglLockDisplay(dpy); _EGLScreen *scrn = _eglLookupScreen((EGLScreenMESA) screen, disp); _EGLDriver *drv; _EGLMode *m; EGLBoolean ret; _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); ret = drv->API.QueryScreenModeMESA(drv, disp, scrn, &m); if (ret && mode) *mode = m->Handle; RETURN_EGL_EVAL(disp, ret); }
/** * Search for EGLModes which match the given attribute list. * Called via eglChooseModeMESA API function. */ EGLBoolean _eglChooseModeMESA(_EGLDriver *drv, EGLDisplay dpy, EGLScreenMESA screen, const EGLint *attrib_list, EGLModeMESA *modes, EGLint modes_size, EGLint *num_modes) { const _EGLScreen *scrn = _eglLookupScreen(dpy, screen); _EGLMode **modeList, min; EGLint i, count; if (!scrn) { _eglError(EGL_BAD_SCREEN_MESA, "eglChooseModeMESA"); return EGL_FALSE; } if (!_eglParseModeAttribs(&min, attrib_list)) { /* error code will have been recorded */ return EGL_FALSE; } /* allocate array of mode pointers */ modeList = (_EGLMode **) malloc(modes_size * sizeof(_EGLMode *)); if (!modeList) { _eglError(EGL_BAD_MODE_MESA, "eglChooseModeMESA(out of memory)"); return EGL_FALSE; } /* make array of pointers to qualifying modes */ for (i = count = 0; i < scrn->NumModes && count < modes_size; i++) { if (_eglModeQualifies(scrn->Modes + i, &min)) { modeList[count++] = scrn->Modes + i; } } /* sort array of pointers */ qsort(modeList, count, sizeof(_EGLMode *), _eglCompareModes); /* copy mode handles to output array */ for (i = 0; i < count; i++) { modes[i] = modeList[i]->Handle; } free(modeList); *num_modes = count; return EGL_TRUE; }
EGLBoolean EGLAPIENTRY eglQueryScreenSurfaceMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLSurface *surface) { _EGLDisplay *disp = _eglLockDisplay(dpy); _EGLScreen *scrn = _eglLookupScreen((EGLScreenMESA) screen, disp); _EGLDriver *drv; _EGLSurface *surf; EGLBoolean ret; _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); ret = drv->API.QueryScreenSurfaceMESA(drv, disp, scrn, &surf); if (ret && surface) *surface = _eglGetSurfaceHandle(surf); RETURN_EGL_EVAL(disp, ret); }
EGLBoolean EGLAPIENTRY eglShowScreenSurfaceMESA(EGLDisplay dpy, EGLint screen, EGLSurface surface, EGLModeMESA mode) { _EGLDisplay *disp = _eglLockDisplay(dpy); _EGLScreen *scrn = _eglLookupScreen((EGLScreenMESA) screen, disp); _EGLSurface *surf = _eglLookupSurface(surface, disp); _EGLMode *m = _eglLookupMode(mode, disp); _EGLDriver *drv; EGLBoolean ret; _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); if (!surf && surface != EGL_NO_SURFACE) RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE); if (!m && mode != EGL_NO_MODE_MESA) RETURN_EGL_ERROR(disp, EGL_BAD_MODE_MESA, EGL_FALSE); ret = drv->API.ShowScreenSurfaceMESA(drv, disp, scrn, surf, m); RETURN_EGL_EVAL(disp, ret); }
/** * Show the given surface on the named screen. * If surface is EGL_NO_SURFACE, disable the screen's output. * * This is just a placeholder function; drivers will always override * this with code that _really_ shows the surface. */ EGLBoolean _eglShowScreenSurfaceMESA(_EGLDriver *drv, EGLDisplay dpy, EGLScreenMESA screen, EGLSurface surface, EGLModeMESA m) { _EGLScreen *scrn = _eglLookupScreen(dpy, screen); _EGLMode *mode = _eglLookupMode(dpy, m); if (!scrn) { _eglError(EGL_BAD_SCREEN_MESA, "eglShowSurfaceMESA"); return EGL_FALSE; } if (!mode && (m != EGL_NO_MODE_MESA )) { _eglError(EGL_BAD_MODE_MESA, "eglShowSurfaceMESA"); return EGL_FALSE; } if (surface == EGL_NO_SURFACE) { scrn->CurrentSurface = NULL; } else { _EGLSurface *surf = _eglLookupSurface(surface); if (!surf || surf->Type != EGL_SCREEN_BIT_MESA) { _eglError(EGL_BAD_SURFACE, "eglShowSurfaceMESA"); return EGL_FALSE; } if (surf->Width < mode->Width || surf->Height < mode->Height) { _eglError(EGL_BAD_SURFACE, "eglShowSurfaceMESA(surface smaller than screen size)"); return EGL_FALSE; } scrn->CurrentSurface = surf; scrn->CurrentMode = mode; } return EGL_TRUE; }
static fbScreen * Lookup_fbScreen(EGLDisplay dpy, EGLScreenMESA screen) { _EGLScreen *s = _eglLookupScreen(dpy, screen); return (fbScreen *) s; }