drm/vmware: Latest interface changes are backwards incopatible
[mesa.git] / src / gallium / winsys / drm / vmware / core / vmw_screen_dri.c
index 454e9a5236d5bc52ae2810f1056b6c2e8901779d..a7c6e88b9ebc55c3696228bbece8c0e5ae568494 100644 (file)
@@ -27,6 +27,7 @@
 #include "pipe/p_compiler.h"
 #include "util/u_inlines.h"
 #include "util/u_memory.h"
+#include "util/u_format.h"
 #include "vmw_screen.h"
 
 #include "trace/tr_drm.h"
@@ -48,8 +49,9 @@ static struct dri1_api_version ddx_required = { 0, 1, 0 };
 static struct dri1_api_version ddx_compat = { 0, 0, 0 };
 static struct dri1_api_version dri_required = { 4, 0, 0 };
 static struct dri1_api_version dri_compat = { 4, 0, 0 };
-static struct dri1_api_version drm_required = { 0, 1, 0 };
-static struct dri1_api_version drm_compat = { 0, 0, 0 };
+static struct dri1_api_version drm_required = { 1, 0, 0 };
+static struct dri1_api_version drm_compat = { 1, 0, 0 };
+static struct dri1_api_version drm_scanout = { 0, 9, 0 };
 
 static boolean
 vmw_dri1_check_version(const struct dri1_api_version *cur,
@@ -84,6 +86,7 @@ vmw_drm_create_screen(struct drm_api *drm_api,
    struct vmw_winsys_screen *vws;
    struct pipe_screen *screen;
    struct dri1_create_screen_arg *dri1;
+   boolean use_old_scanout_flag = FALSE;
 
    if (!arg || arg->mode == DRM_CREATE_NORMAL) {
       struct dri1_api_version drm_ver;
@@ -95,11 +98,16 @@ vmw_drm_create_screen(struct drm_api *drm_api,
 
       drm_ver.major = ver->version_major;
       drm_ver.minor = ver->version_minor;
+      drm_ver.patch_level = 0; /* ??? */
 
       drmFreeVersion(ver);
       if (!vmw_dri1_check_version(&drm_ver, &drm_required,
                                  &drm_compat, "vmwgfx drm driver"))
         return NULL;
+
+      if (!vmw_dri1_check_version(&drm_ver, &drm_scanout,
+                                 &drm_compat, "use old scanout field (not a error)"))
+         use_old_scanout_flag = TRUE;
    }
 
    if (arg != NULL) {
@@ -117,6 +125,9 @@ vmw_drm_create_screen(struct drm_api *drm_api,
         if (!vmw_dri1_check_version(&dri1->drm_version, &drm_required,
                                     &drm_compat, "vmwgfx drm driver"))
            return NULL;
+        if (!vmw_dri1_check_version(&dri1->drm_version, &drm_scanout,
+                                    &drm_compat, "use old scanout field (not a error)"))
+           use_old_scanout_flag = TRUE;
         dri1->api = &dri1_api_hooks;
         break;
       default:
@@ -124,7 +135,7 @@ vmw_drm_create_screen(struct drm_api *drm_api,
       }
    }
 
-   vws = vmw_winsys_create( fd );
+   vws = vmw_winsys_create( fd, use_old_scanout_flag );
    if (!vws)
       goto out_no_vws;
 
@@ -332,12 +343,6 @@ vmw_drm_handle_from_texture(struct drm_api *drm_api,
     return TRUE;
 }
 
-static struct pipe_context*
-vmw_drm_create_context(struct drm_api *drm_api,
-                       struct pipe_screen *screen)
-{
-   return vmw_svga_context_create(screen);
-}
 
 static struct dri1_api dri1_api_hooks = {
    .front_srf_locked = NULL,
@@ -348,7 +353,6 @@ static struct drm_api vmw_drm_api_hooks = {
    .name = "vmwgfx",
    .driver_name = "vmwgfx",
    .create_screen = vmw_drm_create_screen,
-   .create_context = vmw_drm_create_context,
    .texture_from_shared_handle = vmw_drm_texture_from_handle,
    .shared_handle_from_texture = vmw_drm_handle_from_texture,
    .local_handle_from_texture = vmw_drm_handle_from_texture,