winsys/drm: enable intra_surface_copy if HW_CAP2 is supported
authorCharmaine Lee <charmainel@vmware.com>
Fri, 27 Oct 2017 22:41:37 +0000 (15:41 -0700)
committerBrian Paul <brianp@vmware.com>
Mon, 10 Sep 2018 19:07:30 +0000 (13:07 -0600)
With drm version 2_15, we can inquire for support of HW_CAP2.
If it is supported, we can enable intra_surface_copy support.

Reviewed-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Sinclair Yeh <syeh@vmware.com>
Reviewed-by: Deepak Rawat <drawat@vmware.com>
src/gallium/winsys/svga/drm/vmw_screen_ioctl.c

index 7d5aa007572f5e416b8854081b991eb3cc5c9cfe..67d3df29c43ffc497b43e908e97f0b9032e8d5b0 100644 (file)
@@ -1018,14 +1018,9 @@ vmw_ioctl_init(struct vmw_winsys_screen *vws)
    if (vws->base.have_gb_objects && !drm_gb_capable)
       goto out_no_3d;
 
-   /*
-    * CAP2 functionality is not yet in vmwgfx. Till then, avoiding 
-    * this code path.
-    */
-   vws->base.have_intra_surface_copy = FALSE;
-
    vws->base.have_vgpu10 = FALSE;
    vws->base.have_sm4_1 = FALSE;
+   vws->base.have_intra_surface_copy = FALSE;
 
    if (vws->base.have_gb_objects) {
       memset(&gp_arg, 0, sizeof(gp_arg));
@@ -1074,6 +1069,14 @@ vmw_ioctl_init(struct vmw_winsys_screen *vws)
       }
 
       if (vws->ioctl.have_drm_2_15) {
+         memset(&gp_arg, 0, sizeof(gp_arg));
+         gp_arg.param = DRM_VMW_PARAM_HW_CAPS2;
+         ret = drmCommandWriteRead(vws->ioctl.drm_fd, DRM_VMW_GET_PARAM,
+                                   &gp_arg, sizeof(gp_arg));
+         if (ret == 0 && gp_arg.value != 0) {
+            vws->base.have_intra_surface_copy = TRUE;
+         }
+
          memset(&gp_arg, 0, sizeof(gp_arg));
          gp_arg.param = DRM_VMW_PARAM_SM4_1;
          ret = drmCommandWriteRead(vws->ioctl.drm_fd, DRM_VMW_GET_PARAM,