Mesa (main): svga: Add support for SVGAv3
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue Apr 26 01:14:04 UTC 2022
Module: Mesa
Branch: main
Commit: 16019ff7ccfca0ffa710912b20e195bd7a4eae29
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=16019ff7ccfca0ffa710912b20e195bd7a4eae29
Author: Zack Rusin <zackr at vmware.com>
Date: Tue Feb 8 16:41:32 2022 -0500
svga: Add support for SVGAv3
SVGAv3 changes the PCI id due to differences in how PCI configuration
is handled - removal of VRAM and FIFO PCI resources, switch to MMIO
registers and MSI/MSI-X IRQ support but the 3D commands remain largely
the same.
This enables 3D/graphics acceleration support on SVGAv3.
Signed-off-by: Zack Rusin <zackr at vmware.com>
Reviewed-by: Charmaine Lee <charmainel at vmware.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16061>
---
include/pci_ids/vmwgfx_pci_ids.h | 1 +
src/gallium/drivers/svga/svga_screen.c | 6 +++++-
src/gallium/drivers/svga/svga_winsys.h | 3 +++
src/gallium/winsys/svga/drm/vmw_screen_ioctl.c | 10 ++++++++++
src/gallium/winsys/svga/drm/vmwgfx_drm.h | 9 ++++++++-
5 files changed, 27 insertions(+), 2 deletions(-)
diff --git a/include/pci_ids/vmwgfx_pci_ids.h b/include/pci_ids/vmwgfx_pci_ids.h
index 124d75b7253..6d809ea9c6c 100644
--- a/include/pci_ids/vmwgfx_pci_ids.h
+++ b/include/pci_ids/vmwgfx_pci_ids.h
@@ -1 +1,2 @@
CHIPSET(0x0405, SVGAII, SVGAII)
+CHIPSET(0x0406, SVGAv3, SVGAv3)
diff --git a/src/gallium/drivers/svga/svga_screen.c b/src/gallium/drivers/svga/svga_screen.c
index 44ab599f60e..93f98976bd7 100644
--- a/src/gallium/drivers/svga/svga_screen.c
+++ b/src/gallium/drivers/svga/svga_screen.c
@@ -432,7 +432,11 @@ svga_get_param(struct pipe_screen *screen, enum pipe_cap param)
case PIPE_CAP_VENDOR_ID:
return 0x15ad; /* VMware Inc. */
case PIPE_CAP_DEVICE_ID:
- return 0x0405; /* assume SVGA II */
+ if (sws->device_id) {
+ return sws->device_id;
+ } else {
+ return 0x0405; /* assume SVGA II */
+ }
case PIPE_CAP_ACCELERATED:
return 0; /* XXX: */
case PIPE_CAP_VIDEO_MEMORY:
diff --git a/src/gallium/drivers/svga/svga_winsys.h b/src/gallium/drivers/svga/svga_winsys.h
index 7e05b811e3a..6818c293174 100644
--- a/src/gallium/drivers/svga/svga_winsys.h
+++ b/src/gallium/drivers/svga/svga_winsys.h
@@ -824,6 +824,9 @@ struct svga_winsys_screen
/** Have GL43 capable device */
boolean have_gl43;
+
+ /** SVGA device_id version we're running on */
+ uint16_t device_id;
};
diff --git a/src/gallium/winsys/svga/drm/vmw_screen_ioctl.c b/src/gallium/winsys/svga/drm/vmw_screen_ioctl.c
index 3e952a96778..7b83cbce26d 100644
--- a/src/gallium/winsys/svga/drm/vmw_screen_ioctl.c
+++ b/src/gallium/winsys/svga/drm/vmw_screen_ioctl.c
@@ -1053,6 +1053,16 @@ vmw_ioctl_init(struct vmw_winsys_screen *vws)
vws->base.have_sm4_1 = FALSE;
vws->base.have_intra_surface_copy = FALSE;
+ memset(&gp_arg, 0, sizeof(gp_arg));
+ gp_arg.param = DRM_VMW_PARAM_DEVICE_ID;
+ ret = drmCommandWriteRead(vws->ioctl.drm_fd, DRM_VMW_GET_PARAM,
+ &gp_arg, sizeof(gp_arg));
+ if (ret || gp_arg.value == 0) {
+ vws->base.device_id = 0x0405; /* assume SVGA II */
+ } else {
+ vws->base.device_id = gp_arg.value;
+ }
+
if (vws->base.have_gb_objects) {
memset(&gp_arg, 0, sizeof(gp_arg));
gp_arg.param = DRM_VMW_PARAM_MAX_MOB_MEMORY;
diff --git a/src/gallium/winsys/svga/drm/vmwgfx_drm.h b/src/gallium/winsys/svga/drm/vmwgfx_drm.h
index 05763d834fb..26549c86a91 100644
--- a/src/gallium/winsys/svga/drm/vmwgfx_drm.h
+++ b/src/gallium/winsys/svga/drm/vmwgfx_drm.h
@@ -1,6 +1,6 @@
/**************************************************************************
*
- * Copyright © 2009-2021 VMware, Inc., Palo Alto, CA., USA
+ * Copyright © 2009-2022 VMware, Inc., Palo Alto, CA., USA
* All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
@@ -92,6 +92,12 @@ extern "C" {
*
* DRM_VMW_PARAM_SM5
* SM5 support is enabled.
+ *
+ * DRM_VMW_PARAM_GL43
+ * SM5.1+GL4.3 support is enabled.
+ *
+ * DRM_VMW_PARAM_DEVICE_ID
+ * PCI ID of the underlying SVGA device.
*/
#define DRM_VMW_PARAM_NUM_STREAMS 0
@@ -111,6 +117,7 @@ extern "C" {
#define DRM_VMW_PARAM_SM4_1 14
#define DRM_VMW_PARAM_SM5 15
#define DRM_VMW_PARAM_GL43 16
+#define DRM_VMW_PARAM_DEVICE_ID 17
/**
* enum drm_vmw_handle_type - handle type for ref ioctls
More information about the mesa-commit
mailing list