1 #include "nouveau_screen_vl.h"
2 #include <util/u_memory.h>
3 #include <nouveau_drm.h>
4 #include <common/nouveau_dri.h>
5 #include <common/nouveau_local.h>
7 #if NOUVEAU_DRM_HEADER_PATCHLEVEL != 12
8 #error nouveau_drm.h version does not match expected version
12 PUBLIC const char __driConfigOptions[] =
15 static const GLuint __driNConfigOptions = 0;
18 int nouveau_check_dri_drm_ddx(dri_version_t
*dri
, dri_version_t
*drm
, dri_version_t
*ddx
)
20 static const dri_version_t ddx_expected
= {0, 0, NOUVEAU_DRM_HEADER_PATCHLEVEL
};
21 static const dri_version_t dri_expected
= {4, 0, 0};
22 static const dri_version_t drm_expected
= {0, 0, NOUVEAU_DRM_HEADER_PATCHLEVEL
};
28 if (dri
->major
!= dri_expected
.major
|| dri
->minor
< dri_expected
.minor
)
30 NOUVEAU_ERR("Unexpected DRI version.\n");
33 if (drm
->major
!= drm_expected
.major
|| drm
->minor
< drm_expected
.minor
)
35 NOUVEAU_ERR("Unexpected DRM version.\n");
38 if (ddx
->major
!= ddx_expected
.major
|| ddx
->minor
< ddx_expected
.minor
)
40 NOUVEAU_ERR("Unexpected DDX version.\n");
48 nouveau_screen_create(dri_screen_t
*dri_screen
, dri_framebuffer_t
*dri_framebuf
)
50 struct nouveau_dri
*nv_dri
= dri_framebuf
->private;
51 struct nouveau_screen_vl
*nv_screen
;
56 if (nouveau_check_dri_drm_ddx(&dri_screen
->dri
, &dri_screen
->drm
, &dri_screen
->ddx
))
59 nv_screen
= CALLOC_STRUCT(nouveau_screen_vl
);
64 if (nouveau_screen_init(nv_dri
, dri_screen
->fd
, &nv_screen
->base
))
71 driParseOptionInfo(&nv_screen->option_cache,
72 __driConfigOptions, __driNConfigOptions);
75 nv_screen
->dri_screen
= dri_screen
;
76 dri_screen
->private = (void*)nv_screen
;
82 nouveau_screen_destroy(dri_screen_t
*dri_screen
)
84 struct nouveau_screen_vl
*nv_screen
= dri_screen
->private;
86 nouveau_screen_cleanup(&nv_screen
->base
);