diff options
Diffstat (limited to 'xserver/hw/xfree86/dri2')
-rw-r--r-- | xserver/hw/xfree86/dri2/Makefile.in | 6 | ||||
-rw-r--r-- | xserver/hw/xfree86/dri2/dri2.c | 134 | ||||
-rw-r--r-- | xserver/hw/xfree86/dri2/pci_ids/Makefile.am | 1 | ||||
-rw-r--r-- | xserver/hw/xfree86/dri2/pci_ids/Makefile.in | 7 | ||||
-rw-r--r-- | xserver/hw/xfree86/dri2/pci_ids/i915_pci_ids.h | 4 | ||||
-rw-r--r-- | xserver/hw/xfree86/dri2/pci_ids/i965_pci_ids.h | 56 | ||||
-rw-r--r-- | xserver/hw/xfree86/dri2/pci_ids/pci_id_driver_map.h | 7 | ||||
-rw-r--r-- | xserver/hw/xfree86/dri2/pci_ids/radeonsi_pci_ids.h | 10 | ||||
-rw-r--r-- | xserver/hw/xfree86/dri2/pci_ids/virtio_gpu_pci_ids.h | 2 |
9 files changed, 153 insertions, 74 deletions
diff --git a/xserver/hw/xfree86/dri2/Makefile.in b/xserver/hw/xfree86/dri2/Makefile.in index 5b335b9f7..c2899092a 100644 --- a/xserver/hw/xfree86/dri2/Makefile.in +++ b/xserver/hw/xfree86/dri2/Makefile.in @@ -58,8 +58,7 @@ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_define_dir.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/xorg-tls.m4 \ - $(top_srcdir)/configure.ac + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d @@ -283,7 +282,6 @@ GLAMOR_LIBS = @GLAMOR_LIBS@ GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_SYS_LIBS = @GLX_SYS_LIBS@ -GLX_TLS = @GLX_TLS@ GL_CFLAGS = @GL_CFLAGS@ GL_LIBS = @GL_LIBS@ GREP = @GREP@ @@ -413,8 +411,6 @@ XEPHYR_INCS = @XEPHYR_INCS@ XEPHYR_LIBS = @XEPHYR_LIBS@ XF86CONFIGDIR = @XF86CONFIGDIR@ XF86CONFIGFILE = @XF86CONFIGFILE@ -XF86VIDMODE_CFLAGS = @XF86VIDMODE_CFLAGS@ -XF86VIDMODE_LIBS = @XF86VIDMODE_LIBS@ XKB_BASE_DIRECTORY = @XKB_BASE_DIRECTORY@ XKB_BIN_DIRECTORY = @XKB_BIN_DIRECTORY@ XKB_COMPILED_DIR = @XKB_COMPILED_DIR@ diff --git a/xserver/hw/xfree86/dri2/dri2.c b/xserver/hw/xfree86/dri2/dri2.c index 0c038b3d1..d55be1913 100644 --- a/xserver/hw/xfree86/dri2/dri2.c +++ b/xserver/hw/xfree86/dri2/dri2.c @@ -90,8 +90,6 @@ typedef struct _DRI2Drawable { DRI2BufferPtr *buffers; int bufferCount; unsigned int swapsPending; - ClientPtr blockedClient; - Bool blockedOnMsc; int swap_interval; CARD64 swap_count; int64_t target_sbc; /* -1 means no SBC wait outstanding */ @@ -99,6 +97,7 @@ typedef struct _DRI2Drawable { CARD64 last_swap_msc; /* msc at completion of most recent swap */ CARD64 last_swap_ust; /* ust at completion of most recent swap */ int swap_limit; /* for N-buffering */ + unsigned blocked[3]; Bool needInvalidate; int prime_id; PixmapPtr prime_slave_pixmap; @@ -139,6 +138,44 @@ typedef struct _DRI2Screen { static void destroy_buffer(DrawablePtr pDraw, DRI2BufferPtr buffer, int prime_id); +enum DRI2WakeType { + WAKE_SBC, + WAKE_MSC, + WAKE_SWAP, +}; + +#define Wake(c, t) (void *)((uintptr_t)(c) | (t)) + +static Bool +dri2WakeClient(ClientPtr client, void *closure) +{ + ClientWakeup(client); + return TRUE; +} + +static Bool +dri2WakeAll(ClientPtr client, DRI2DrawablePtr pPriv, enum DRI2WakeType t) +{ + int count; + + if (!pPriv->blocked[t]) + return FALSE; + + count = ClientSignalAll(client, dri2WakeClient, Wake(pPriv, t)); + pPriv->blocked[t] -= count; + return count; +} + +static Bool +dri2Sleep(ClientPtr client, DRI2DrawablePtr pPriv, enum DRI2WakeType t) +{ + if (ClientSleep(client, dri2WakeClient, Wake(pPriv, t))) { + pPriv->blocked[t]++; + return TRUE; + } + return FALSE; +} + static DRI2ScreenPtr DRI2GetScreen(ScreenPtr pScreen) { @@ -210,8 +247,6 @@ DRI2AllocateDrawable(DrawablePtr pDraw) pPriv->buffers = NULL; pPriv->bufferCount = 0; pPriv->swapsPending = 0; - pPriv->blockedClient = NULL; - pPriv->blockedOnMsc = FALSE; pPriv->swap_count = 0; pPriv->target_sbc = -1; pPriv->swap_interval = 1; @@ -219,6 +254,7 @@ DRI2AllocateDrawable(DrawablePtr pDraw) if (!ds->GetMSC || !(*ds->GetMSC) (pDraw, &ust, &pPriv->last_swap_target)) pPriv->last_swap_target = 0; + memset(pPriv->blocked, 0, sizeof(pPriv->blocked)); pPriv->swap_limit = 1; /* default to double buffering */ pPriv->last_swap_msc = 0; pPriv->last_swap_ust = 0; @@ -258,13 +294,7 @@ DRI2SwapLimit(DrawablePtr pDraw, int swap_limit) if (pPriv->swapsPending >= pPriv->swap_limit) return TRUE; - if (pPriv->target_sbc == -1 && !pPriv->blockedOnMsc) { - if (pPriv->blockedClient) { - AttendClient(pPriv->blockedClient); - pPriv->blockedClient = NULL; - } - } - + dri2WakeAll(CLIENT_SIGNAL_ANY, pPriv, WAKE_SWAP); return TRUE; } @@ -413,6 +443,10 @@ DRI2DrawableGone(void *p, XID id) (*pDraw->pScreen->DestroyPixmap)(pPriv->redirectpixmap); } + dri2WakeAll(CLIENT_SIGNAL_ANY, pPriv, WAKE_SWAP); + dri2WakeAll(CLIENT_SIGNAL_ANY, pPriv, WAKE_MSC); + dri2WakeAll(CLIENT_SIGNAL_ANY, pPriv, WAKE_SBC); + free(pPriv); return Success; @@ -704,26 +738,17 @@ DRI2ThrottleClient(ClientPtr client, DrawablePtr pDraw) return FALSE; /* Throttle to swap limit */ - if ((pPriv->swapsPending >= pPriv->swap_limit) && !pPriv->blockedClient) { - ResetCurrentRequest(client); - client->sequence--; - IgnoreClient(client); - pPriv->blockedClient = client; - return TRUE; + if (pPriv->swapsPending >= pPriv->swap_limit) { + if (dri2Sleep(client, pPriv, WAKE_SWAP)) { + ResetCurrentRequest(client); + client->sequence--; + return TRUE; + } } return FALSE; } -static void -__DRI2BlockClient(ClientPtr client, DRI2DrawablePtr pPriv) -{ - if (pPriv->blockedClient == NULL) { - IgnoreClient(client); - pPriv->blockedClient = client; - } -} - void DRI2BlockClient(ClientPtr client, DrawablePtr pDraw) { @@ -733,8 +758,7 @@ DRI2BlockClient(ClientPtr client, DrawablePtr pDraw) if (pPriv == NULL) return; - __DRI2BlockClient(client, pPriv); - pPriv->blockedOnMsc = TRUE; + dri2Sleep(client, pPriv, WAKE_MSC); } static inline PixmapPtr GetDrawablePixmap(DrawablePtr drawable) @@ -967,11 +991,7 @@ DRI2WaitMSCComplete(ClientPtr client, DrawablePtr pDraw, int frame, ProcDRI2WaitMSCReply(client, ((CARD64) tv_sec * 1000000) + tv_usec, frame, pPriv->swap_count); - if (pPriv->blockedClient) - AttendClient(pPriv->blockedClient); - - pPriv->blockedClient = NULL; - pPriv->blockedOnMsc = FALSE; + dri2WakeAll(client, pPriv, WAKE_MSC); } static void @@ -997,19 +1017,14 @@ DRI2WakeClient(ClientPtr client, DrawablePtr pDraw, int frame, * - is not blocked due to an MSC wait */ if (pPriv->target_sbc != -1 && pPriv->target_sbc <= pPriv->swap_count) { - ProcDRI2WaitMSCReply(client, ((CARD64) tv_sec * 1000000) + tv_usec, - frame, pPriv->swap_count); - pPriv->target_sbc = -1; - - AttendClient(pPriv->blockedClient); - pPriv->blockedClient = NULL; - } - else if (pPriv->target_sbc == -1 && !pPriv->blockedOnMsc) { - if (pPriv->blockedClient) { - AttendClient(pPriv->blockedClient); - pPriv->blockedClient = NULL; + if (dri2WakeAll(client, pPriv, WAKE_SBC)) { + ProcDRI2WaitMSCReply(client, ((CARD64) tv_sec * 1000000) + tv_usec, + frame, pPriv->swap_count); + pPriv->target_sbc = -1; } } + + dri2WakeAll(CLIENT_SIGNAL_ANY, pPriv, WAKE_SWAP); } void @@ -1057,13 +1072,13 @@ DRI2WaitSwap(ClientPtr client, DrawablePtr pDrawable) DRI2DrawablePtr pPriv = DRI2GetDrawable(pDrawable); /* If we're currently waiting for a swap on this drawable, reset - * the request and suspend the client. We only support one - * blocked client per drawable. */ - if (pPriv && pPriv->swapsPending && pPriv->blockedClient == NULL) { - ResetCurrentRequest(client); - client->sequence--; - __DRI2BlockClient(client, pPriv); - return TRUE; + * the request and suspend the client. */ + if (pPriv && pPriv->swapsPending) { + if (dri2Sleep(client, pPriv, WAKE_SWAP)) { + ResetCurrentRequest(client); + client->sequence--; + return TRUE; + } } return FALSE; @@ -1264,6 +1279,9 @@ DRI2WaitSBC(ClientPtr client, DrawablePtr pDraw, CARD64 target_sbc) if (pPriv == NULL) return BadDrawable; + if (pPriv->target_sbc != -1) /* already in use */ + return BadDrawable; + /* target_sbc == 0 means to block until all pending swaps are * finished. Recalculate target_sbc to get that behaviour. */ @@ -1280,9 +1298,10 @@ DRI2WaitSBC(ClientPtr client, DrawablePtr pDraw, CARD64 target_sbc) return Success; } - pPriv->target_sbc = target_sbc; - __DRI2BlockClient(client, pPriv); + if (!dri2Sleep(client, pPriv, WAKE_SBC)) + return BadAlloc; + pPriv->target_sbc = target_sbc; return Success; } @@ -1385,8 +1404,7 @@ DRI2ConfigNotify(WindowPtr pWin, int x, int y, int w, int h, int bw, static void DRI2SetWindowPixmap(WindowPtr pWin, PixmapPtr pPix) { - DrawablePtr pDraw = (DrawablePtr) pWin; - ScreenPtr pScreen = pDraw->pScreen; + ScreenPtr pScreen = pWin->drawable.pScreen; DRI2ScreenPtr ds = DRI2GetScreen(pScreen); pScreen->SetWindowPixmap = ds->SetWindowPixmap; @@ -1394,7 +1412,7 @@ DRI2SetWindowPixmap(WindowPtr pWin, PixmapPtr pPix) ds->SetWindowPixmap = pScreen->SetWindowPixmap; pScreen->SetWindowPixmap = DRI2SetWindowPixmap; - DRI2InvalidateDrawableAll(pDraw); + DRI2InvalidateDrawable(&pWin->drawable); } #define MAX_PRIME DRI2DriverPrimeMask @@ -1577,7 +1595,7 @@ DRI2ScreenInit(ScreenPtr pScreen, DRI2InfoPtr info) if (info->version == 3 || info->numDrivers == 0) { /* Driver too old: use the old-style driverName field */ ds->numDrivers = info->driverName ? 1 : 2; - ds->driverNames = malloc(ds->numDrivers * sizeof(*ds->driverNames)); + ds->driverNames = xallocarray(ds->numDrivers, sizeof(*ds->driverNames)); if (!ds->driverNames) goto err_out; @@ -1591,7 +1609,7 @@ DRI2ScreenInit(ScreenPtr pScreen, DRI2InfoPtr info) } else { ds->numDrivers = info->numDrivers; - ds->driverNames = malloc(info->numDrivers * sizeof(*ds->driverNames)); + ds->driverNames = xallocarray(info->numDrivers, sizeof(*ds->driverNames)); if (!ds->driverNames) goto err_out; memcpy(ds->driverNames, info->driverNames, diff --git a/xserver/hw/xfree86/dri2/pci_ids/Makefile.am b/xserver/hw/xfree86/dri2/pci_ids/Makefile.am index c5111082b..69fe8c40d 100644 --- a/xserver/hw/xfree86/dri2/pci_ids/Makefile.am +++ b/xserver/hw/xfree86/dri2/pci_ids/Makefile.am @@ -8,4 +8,5 @@ EXTRA_DIST = \ r600_pci_ids.h \ radeon_pci_ids.h \ radeonsi_pci_ids.h \ + virtio_gpu_pci_ids.h \ vmwgfx_pci_ids.h diff --git a/xserver/hw/xfree86/dri2/pci_ids/Makefile.in b/xserver/hw/xfree86/dri2/pci_ids/Makefile.in index 8f2016d67..b39d20017 100644 --- a/xserver/hw/xfree86/dri2/pci_ids/Makefile.in +++ b/xserver/hw/xfree86/dri2/pci_ids/Makefile.in @@ -55,8 +55,7 @@ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_define_dir.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/xorg-tls.m4 \ - $(top_srcdir)/configure.ac + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d @@ -181,7 +180,6 @@ GLAMOR_LIBS = @GLAMOR_LIBS@ GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@ GLX_DEFINES = @GLX_DEFINES@ GLX_SYS_LIBS = @GLX_SYS_LIBS@ -GLX_TLS = @GLX_TLS@ GL_CFLAGS = @GL_CFLAGS@ GL_LIBS = @GL_LIBS@ GREP = @GREP@ @@ -311,8 +309,6 @@ XEPHYR_INCS = @XEPHYR_INCS@ XEPHYR_LIBS = @XEPHYR_LIBS@ XF86CONFIGDIR = @XF86CONFIGDIR@ XF86CONFIGFILE = @XF86CONFIGFILE@ -XF86VIDMODE_CFLAGS = @XF86VIDMODE_CFLAGS@ -XF86VIDMODE_LIBS = @XF86VIDMODE_LIBS@ XKB_BASE_DIRECTORY = @XKB_BASE_DIRECTORY@ XKB_BIN_DIRECTORY = @XKB_BIN_DIRECTORY@ XKB_COMPILED_DIR = @XKB_COMPILED_DIR@ @@ -446,6 +442,7 @@ EXTRA_DIST = \ r600_pci_ids.h \ radeon_pci_ids.h \ radeonsi_pci_ids.h \ + virtio_gpu_pci_ids.h \ vmwgfx_pci_ids.h all: all-am diff --git a/xserver/hw/xfree86/dri2/pci_ids/i915_pci_ids.h b/xserver/hw/xfree86/dri2/pci_ids/i915_pci_ids.h index 7d51975c3..1c43c8ec7 100644 --- a/xserver/hw/xfree86/dri2/pci_ids/i915_pci_ids.h +++ b/xserver/hw/xfree86/dri2/pci_ids/i915_pci_ids.h @@ -11,5 +11,5 @@ CHIPSET(0x27AE, I945_GME, "Intel(R) 945GME") CHIPSET(0x29B2, Q35_G, "Intel(R) Q35") CHIPSET(0x29C2, G33_G, "Intel(R) G33") CHIPSET(0x29D2, Q33_G, "Intel(R) Q33") -CHIPSET(0xA011, IGD_GM, "Intel(R) IGD") -CHIPSET(0xA001, IGD_G, "Intel(R) IGD") +CHIPSET(0xA011, PNV_GM, "Intel(R) Pineview M") +CHIPSET(0xA001, PNV_G, "Intel(R) Pineview") diff --git a/xserver/hw/xfree86/dri2/pci_ids/i965_pci_ids.h b/xserver/hw/xfree86/dri2/pci_ids/i965_pci_ids.h index 2e04301fb..5139e279b 100644 --- a/xserver/hw/xfree86/dri2/pci_ids/i965_pci_ids.h +++ b/xserver/hw/xfree86/dri2/pci_ids/i965_pci_ids.h @@ -109,7 +109,55 @@ CHIPSET(0x162A, bdw_gt3, "Intel(R) Iris Pro P6300 (Broadwell GT3e)") CHIPSET(0x162B, bdw_gt3, "Intel(R) Iris 6100 (Broadwell GT3)") CHIPSET(0x162D, bdw_gt3, "Intel(R) Broadwell GT3") CHIPSET(0x162E, bdw_gt3, "Intel(R) Broadwell GT3") -CHIPSET(0x22B0, chv, "Intel(R) Cherryview") -CHIPSET(0x22B1, chv, "Intel(R) Cherryview") -CHIPSET(0x22B2, chv, "Intel(R) Cherryview") -CHIPSET(0x22B3, chv, "Intel(R) Cherryview") +CHIPSET(0x1902, skl_gt1, "Intel(R) HD Graphics 510 (Skylake GT1)") +CHIPSET(0x1906, skl_gt1, "Intel(R) HD Graphics 510 (Skylake GT1)") +CHIPSET(0x190A, skl_gt1, "Intel(R) Skylake GT1") +CHIPSET(0x190E, skl_gt1, "Intel(R) Skylake GT1") +CHIPSET(0x1912, skl_gt2, "Intel(R) HD Graphics 530 (Skylake GT2)") +CHIPSET(0x1913, skl_gt2, "Intel(R) Skylake GT2f") +CHIPSET(0x1915, skl_gt2, "Intel(R) Skylake GT2f") +CHIPSET(0x1916, skl_gt2, "Intel(R) HD Graphics 520 (Skylake GT2)") +CHIPSET(0x1917, skl_gt2, "Intel(R) Skylake GT2f") +CHIPSET(0x191A, skl_gt2, "Intel(R) Skylake GT2") +CHIPSET(0x191B, skl_gt2, "Intel(R) HD Graphics 530 (Skylake GT2)") +CHIPSET(0x191D, skl_gt2, "Intel(R) HD Graphics P530 (Skylake GT2)") +CHIPSET(0x191E, skl_gt2, "Intel(R) HD Graphics 515 (Skylake GT2)") +CHIPSET(0x1921, skl_gt2, "Intel(R) Skylake GT2") +CHIPSET(0x1923, skl_gt3, "Intel(R) Iris Graphics 540 (Skylake GT3e)") +CHIPSET(0x1926, skl_gt3, "Intel(R) HD Graphics 535 (Skylake GT3)") +CHIPSET(0x1927, skl_gt3, "Intel(R) Iris Graphics 550 (Skylake GT3e)") +CHIPSET(0x192A, skl_gt4, "Intel(R) Skylake GT4") +CHIPSET(0x192B, skl_gt3, "Intel(R) Iris Graphics (Skylake GT3fe)") +CHIPSET(0x1932, skl_gt4, "Intel(R) Skylake GT4") +CHIPSET(0x193A, skl_gt4, "Intel(R) Skylake GT4") +CHIPSET(0x193B, skl_gt4, "Intel(R) Skylake GT4") +CHIPSET(0x193D, skl_gt4, "Intel(R) Skylake GT4") +CHIPSET(0x5902, kbl_gt1, "Intel(R) Kabylake GT1") +CHIPSET(0x5906, kbl_gt1, "Intel(R) Kabylake GT1") +CHIPSET(0x590A, kbl_gt1, "Intel(R) Kabylake GT1") +CHIPSET(0x590B, kbl_gt1, "Intel(R) Kabylake GT1") +CHIPSET(0x590E, kbl_gt1, "Intel(R) Kabylake GT1") +CHIPSET(0x5913, kbl_gt1_5, "Intel(R) Kabylake GT1.5") +CHIPSET(0x5915, kbl_gt1_5, "Intel(R) Kabylake GT1.5") +CHIPSET(0x5917, kbl_gt1_5, "Intel(R) Kabylake GT1.5") +CHIPSET(0x5912, kbl_gt2, "Intel(R) Kabylake GT2") +CHIPSET(0x5916, kbl_gt2, "Intel(R) Kabylake GT2") +CHIPSET(0x591A, kbl_gt2, "Intel(R) Kabylake GT2") +CHIPSET(0x591B, kbl_gt2, "Intel(R) Kabylake GT2") +CHIPSET(0x591D, kbl_gt2, "Intel(R) Kabylake GT2") +CHIPSET(0x591E, kbl_gt2, "Intel(R) Kabylake GT2") +CHIPSET(0x5921, kbl_gt2, "Intel(R) Kabylake GT2F") +CHIPSET(0x5926, kbl_gt3, "Intel(R) Kabylake GT3") +CHIPSET(0x592A, kbl_gt3, "Intel(R) Kabylake GT3") +CHIPSET(0x592B, kbl_gt3, "Intel(R) Kabylake GT3") +CHIPSET(0x5932, kbl_gt4, "Intel(R) Kabylake GT4") +CHIPSET(0x593A, kbl_gt4, "Intel(R) Kabylake GT4") +CHIPSET(0x593B, kbl_gt4, "Intel(R) Kabylake GT4") +CHIPSET(0x593D, kbl_gt4, "Intel(R) Kabylake GT4") +CHIPSET(0x22B0, chv, "Intel(R) HD Graphics (Cherryview)") +CHIPSET(0x22B1, chv, "Intel(R) HD Graphics (Cherryview)") +CHIPSET(0x22B2, chv, "Intel(R) HD Graphics (Cherryview)") +CHIPSET(0x22B3, chv, "Intel(R) HD Graphics (Cherryview)") +CHIPSET(0x0A84, bxt, "Intel(R) HD Graphics (Broxton)") +CHIPSET(0x1A84, bxt, "Intel(R) HD Graphics (Broxton)") +CHIPSET(0x5A84, bxt, "Intel(R) HD Graphics (Broxton)") diff --git a/xserver/hw/xfree86/dri2/pci_ids/pci_id_driver_map.h b/xserver/hw/xfree86/dri2/pci_ids/pci_id_driver_map.h index 8a97c6f31..da7ea1c1e 100644 --- a/xserver/hw/xfree86/dri2/pci_ids/pci_id_driver_map.h +++ b/xserver/hw/xfree86/dri2/pci_ids/pci_id_driver_map.h @@ -51,6 +51,12 @@ static const int radeonsi_chip_ids[] = { #undef CHIPSET }; +static const int virtio_gpu_chip_ids[] = { +#define CHIPSET(chip, name, family) chip, +#include "pci_ids/virtio_gpu_pci_ids.h" +#undef CHIPSET +}; + static const int vmwgfx_chip_ids[] = { #define CHIPSET(chip, name, family) chip, #include "pci_ids/vmwgfx_pci_ids.h" @@ -73,6 +79,7 @@ static const struct { { 0x1002, "r600", r600_chip_ids, ARRAY_SIZE(r600_chip_ids) }, { 0x1002, "radeonsi", radeonsi_chip_ids, ARRAY_SIZE(radeonsi_chip_ids) }, { 0x10de, "nouveau", NULL, -1 }, + { 0x1af4, "virtio_gpu", virtio_gpu_chip_ids, ARRAY_SIZE(virtio_gpu_chip_ids) }, { 0x15ad, "vmwgfx", vmwgfx_chip_ids, ARRAY_SIZE(vmwgfx_chip_ids) }, { 0x0000, NULL, NULL, 0 }, }; diff --git a/xserver/hw/xfree86/dri2/pci_ids/radeonsi_pci_ids.h b/xserver/hw/xfree86/dri2/pci_ids/radeonsi_pci_ids.h index bcf15a186..4df8e9d83 100644 --- a/xserver/hw/xfree86/dri2/pci_ids/radeonsi_pci_ids.h +++ b/xserver/hw/xfree86/dri2/pci_ids/radeonsi_pci_ids.h @@ -182,4 +182,14 @@ CHIPSET(0x9877, CARRIZO_, CARRIZO) CHIPSET(0x7300, FIJI_, FIJI) +CHIPSET(0x67E0, POLARIS11_, POLARIS11) +CHIPSET(0x67E1, POLARIS11_, POLARIS11) +CHIPSET(0x67E8, POLARIS11_, POLARIS11) +CHIPSET(0x67E9, POLARIS11_, POLARIS11) +CHIPSET(0x67EB, POLARIS11_, POLARIS11) +CHIPSET(0x67FF, POLARIS11_, POLARIS11) + +CHIPSET(0x67C0, POLARIS10_, POLARIS10) +CHIPSET(0x67DF, POLARIS10_, POLARIS10) + CHIPSET(0x98E4, STONEY_, STONEY) diff --git a/xserver/hw/xfree86/dri2/pci_ids/virtio_gpu_pci_ids.h b/xserver/hw/xfree86/dri2/pci_ids/virtio_gpu_pci_ids.h new file mode 100644 index 000000000..9232cd288 --- /dev/null +++ b/xserver/hw/xfree86/dri2/pci_ids/virtio_gpu_pci_ids.h @@ -0,0 +1,2 @@ +CHIPSET(0x0010, VIRTGL, VIRTGL) +CHIPSET(0x1050, VIRTGL, VIRTGL) |