BOOL DRI2FallbackCheckSupport(Display *dpy) { struct DRI2priv *priv; int fd; if (!DRI2FallbackInit(dpy, &priv)) return FALSE; DRI2FallbackDestroy(priv); if (!DRI2FallbackOpen(dpy, DefaultScreen(dpy), &fd)) return FALSE; close(fd); return TRUE; }
static HRESULT DRI3Present_new( SDL_Window* sdl_win, D3DPRESENT_PARAMETERS *params, struct DRI3Present **out ) { struct DRI3Present *This; if (!sdl_win) { ERR("No SDL_Window specified for presentation backend.\n"); return D3DERR_INVALIDCALL; } SDL_SysWMinfo info; SDL_VERSION(&info.version); SDL_bool Ok = SDL_GetWindowWMInfo(sdl_win, &info); if (!Ok) { ERR("Invalid SDL_Window specified for presentation backend.\n"); return D3DERR_INVALIDCALL; } This = calloc(1, sizeof(struct DRI3Present)); if (!This) { return E_OUTOFMEMORY; } This->vtable = &DRI3Present_vtable; This->refs = 1; This->sdl_win = sdl_win; This->x11_display = info.info.x11.display; This->x11_window = info.info.x11.window; DRI3Present_ChangePresentParameters(This, params, TRUE); PRESENTInit(info.info.x11.display, &(This->present_priv)); #if D3DADAPTER9_WITHDRI2 if (is_dri2_fallback) DRI2FallbackInit(info.info.x11.display, &(This->dri2_priv)); #endif *out = This; return D3D_OK; }