Open Bug 1731480 Opened 3 years ago Updated 4 months ago

libglvnd: If second, unused, Nvidia GPU is present with the Nvidia driver installed, the Intel APU does not have correct vendorID, deviceID, driverVendor, is thus not qualified for HW WR.

Categories

(Core :: Graphics: WebRender, defect)

x86_64
Linux
defect

Tracking

()

Tracking Status
firefox-esr78 --- unaffected
firefox-esr91 --- wontfix
firefox92 --- wontfix
firefox93 --- wontfix
firefox94 --- wontfix
firefox95 --- fix-optional

People

(Reporter: jan, Unassigned)

References

(Blocks 1 open bug, Regression, )

Details

(Keywords: leave-open, nightly-community, regression)

Attachments

(8 files, 1 obsolete file)

Ubuntu 21.04, Nvidia driver 470

  1. Shutdown
  2. Booted into UEFI: Configured Intel APU as primary graphics controller. Saved. Rebooted.
  3. Removed HDMI cable from Nvidia card and plugged it into the mainboard
  4. Booted into KDE, started Nightly, noticed it's still using Nvidia.
  5. Nvidia X Server settings said PRIME offload is active. Selected "Intel (Power Saving Mode)", saved. It wanted a reboot. Rebooted.
  6. Started Nightly and found out it's not qualified for hardware WebRender. GLX/EGL do not matter.

glxinfo

Vendor: Intel (0x8086)
Device: Mesa Intel(R) HD Graphics 630 (KBL GT2) (0x5912)
Version: 21.0.3
Accelerated: yes
Video memory: 3072MB

after second regression: 2021-09-18

gfx.adapters.[0].description 	Mesa Intel(R) HD Graphics 630 (KBL GT2)
gfx.adapters.[0].vendorID 	Intel
gfx.adapters.[0].deviceID 	Mesa Intel(R) HD Graphics 630 (KBL GT2)
gfx.adapters.[0].subsysID 	null
gfx.adapters.[0].RAM 	0
gfx.adapters.[0].driver 	null
gfx.adapters.[0].driverVendor 	mesa/swrast
gfx.adapters.[0].driverVersion 	21.0.3.0
gfx.adapters.[0].driverDate 	null
gfx.adapters.[0].GPUActive 	true
gfx.adapters.[1].description 	null
gfx.adapters.[1].vendorID 	0x8086
gfx.adapters.[1].deviceID 	0x5912
gfx.adapters.[1].subsysID 	null
gfx.adapters.[1].RAM 	null
gfx.adapters.[1].driver 	null
gfx.adapters.[1].driverVendor 	null
gfx.adapters.[1].driverVersion 	null
gfx.adapters.[1].driverDate 	null
gfx.adapters.[1].GPUActive 	false
gfx.monitors.[0].screenWidth 	2560
gfx.monitors.[0].screenHeight 	1440
gfx.features.compositor 	webrender_software
gfx.features.hwCompositing.status 	blocked:
gfx.features.gpuProcess.status 	unused
gfx.features.wrQualified.status 	blocklisted:FEATURE_FAILURE_SOFTWARE_GL
gfx.features.webrender.status 	disabled:FEATURE_FAILURE_NOT_QUALIFIED
gfx.features.wrCompositor.status 	blocklisted:FEATURE_FAILURE_WEBRENDER_COMPOSITOR_DISABLED
gfx.features.wrSoftware.status 	available
gfx.features.openglCompositing.status 	unavailable:FEATURE_FAILURE_OPENGL_NEED_HWCOMP
gfx.features.omtp.status 	unused 

after first regression: 2021-06-20

gfx.adapters.[0].description 	Mesa Intel(R) HD Graphics 630 (KBL GT2)
gfx.adapters.[0].vendorID 	0x8086
gfx.adapters.[0].deviceID 	0x5912
gfx.adapters.[0].subsysID 	null
gfx.adapters.[0].RAM 	0
gfx.adapters.[0].driver 	null
gfx.adapters.[0].driverVendor 	mesa/swrast 

gfx.features.compositor 	webrender_software

good: 2021-06-01

gfx.adapters.[0].description 	Mesa Intel(R) HD Graphics 630 (KBL GT2)
gfx.adapters.[0].vendorID 	0x8086
gfx.adapters.[0].deviceID 	0x5912
gfx.adapters.[0].subsysID 	null
gfx.adapters.[0].RAM 	0
gfx.adapters.[0].driver 	null
gfx.adapters.[0].driverVendor 	mesa/iris
gfx.adapters.[0].driverVersion 	21.0.3.0
gfx.adapters.[0].driverDate 	null
gfx.adapters.[0].GPUActive 	true
gfx.adapters.[1].description 	null
gfx.adapters.[1].vendorID 	0x10de
gfx.adapters.[1].deviceID 	0x1c02
gfx.adapters.[1].subsysID 	null
gfx.adapters.[1].RAM 	null
gfx.adapters.[1].driver 	null
gfx.adapters.[1].driverVendor 	null
gfx.adapters.[1].driverVersion 	null
gfx.adapters.[1].driverDate 	null
gfx.adapters.[1].GPUActive 	false
gfx.monitors.[0].screenWidth 	2560
gfx.monitors.[0].screenHeight 	1440
gfx.features.compositor 	webrender
gfx.features.hwCompositing.status 	available
gfx.features.gpuProcess.status 	unused
gfx.features.wrQualified.status 	available
gfx.features.webrender.status 	available
gfx.features.wrCompositor.status 	blocklisted:FEATURE_FAILURE_WEBRENDER_COMPOSITOR_DISABLED
gfx.features.wrSoftware.status 	available
gfx.features.openglCompositing.status 	available
gfx.features.omtp.status 	disabled:FEATURE_FAILURE_DISABLED 

good=mesa/iris + HW WR, bad=mesa/swrast + software rendering (about:support was broken in May/June)
mozregression --good 2021-01-18 --bad 2021-09-18 --pref gfx.x11-egl.force-disabled:true -a about:telemetry#search=gfx

19:34.35 INFO: Last good revision: 77da39e524d64464f0905b4d2f254d4d7bf11a17
19:34.35 INFO: First bad revision: 22f7bdbfbd92da789512f446ec3e70660a02070c
19:34.35 INFO: Pushlog:
https://hg.mozilla.org/integration/autoland/pushloghtml?fromchange=77da39e524d64464f0905b4d2f254d4d7bf11a17&tochange=22f7bdbfbd92da789512f446ec3e70660a02070c

22f7bdbfbd92da789512f446ec3e70660a02070c Robert Mader — Bug 1714069 - Block Mesa software drivers for HW-WR, r=aosmond

good: vendorID=0x8086 + deviceID=0x5912
bad: "Intel" + "Mesa Intel(R) HD Graphics 630 (KBL GT2)"
mozregression --good 2021-06-05 --bad 2021-09-18 --pref gfx.x11-egl.force-disabled:true -a about:telemetry#search=gfx

11:01.81 INFO: Last good revision: 3b2212d68b0849890b35d676bfb2cdba1e3df2ad
11:01.81 INFO: First bad revision: 240cbdff5521cadcc818770a074db3c67a8324fe
11:01.81 INFO: Pushlog:
https://hg.mozilla.org/integration/autoland/pushloghtml?fromchange=3b2212d68b0849890b35d676bfb2cdba1e3df2ad&tochange=240cbdff5521cadcc818770a074db3c67a8324fe

240cbdff5521cadcc818770a074db3c67a8324fe Robert Mader — Bug 1717857 - Detect more multi-GPU cases via PCI in GfxInfo,r=aosmond

Attached file glxinfo
Attached file eglinfo

Hm, here we're most likely running into:

swrast is reported as fallback software driver. This happens with
unknown sw-drivers (e.g. zink on lavapipe), but also when glxtest
incorrectly detects software rendering. This can be confusing and
is basically always wrong - by now it even got removed from Mesa
and for years only has been used on niche setups.

Make this more clear by using "mesa/sw-all" instead.
No functional change beyond reporting intended here.

Assignee: nobody → robert.mader
Status: NEW → ASSIGNED

Omg, it can be fixed with sudo apt purge *nvidia* and a Firefox restart. No reboot required.

My theory was that I might not be directly using Mesa and the Nvidia driver might be forwarding everything to Mesa. Or it does that only for GLX, but passes EGL to llvmpipe, or something like that.

eglinfo: The only difference between before and after is slightly different ordered "EGL client extensions" right at the top. Everything else is the same.

eglinfo after rebooting once is still the same as right after sudo apt purge *nvidia*.

Could it be that libglvnd was installed? If so, does installing it again bring back the issue?

test app from bug 1680505 comment 17 with eglGetError added (I'm not a programmer):

// sudo apt install libdrm-dev libegl-dev clang
// clang test.c $(pkg-config --cflags --libs libdrm egl) -o test && ./test
#include <fcntl.h>
#include <xf86drm.h>
#include <stdio.h>
#include <EGL/egl.h>
#include <EGL/eglext.h>
int main(int argc, char *argv[]) {
    EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
    eglInitialize(display, NULL, NULL);
    PFNEGLQUERYDISPLAYATTRIBEXTPROC eglQueryDisplayAttribEXT = (PFNEGLQUERYDISPLAYATTRIBEXTPROC)eglGetProcAddress("eglQueryDisplayAttribEXT");
    PFNEGLQUERYDEVICESTRINGEXTPROC eglQueryDeviceStringEXT = (PFNEGLQUERYDEVICESTRINGEXTPROC)eglGetProcAddress("eglQueryDeviceStringEXT");
    const char* deviceString;
    EGLDeviceEXT device;
    if (eglQueryDisplayAttribEXT(display, EGL_DEVICE_EXT, (EGLAttrib*)&device) == EGL_TRUE) {
	printf("eglQueryDisplayAttribEXT supported\n");
	printf("eglGetError(): %#x\n", eglGetError());
        deviceString = eglQueryDeviceStringEXT(device, EGL_DRM_DEVICE_FILE_EXT);
        printf("eglGetError(): %#x\n", eglGetError());
    }
    if (!deviceString) return 0;
    printf("device:%s\n", deviceString);
    int fd = open(deviceString, O_RDONLY);
    if (fd == -1) return 0;
    drmDevicePtr dev;
    if (!drmGetDevice(fd, &dev)) {
        printf("Vendor ID:%#x\nDevice ID:%#x\n",
        dev->deviceinfo.pci->vendor_id,
        dev->deviceinfo.pci->device_id);
    }
    return 0;
}

$ clang test.c $(pkg-config --cflags --libs libdrm egl) -o test && ./test

eglQueryDisplayAttribEXT supported
eglGetError(): 0x3000 // eglQueryDisplayAttribEXT returned EGL_SUCCESS
eglGetError(): 0x3000 // eglQueryDeviceStringEXT returned EGL_SUCCESS
device:/dev/dri/card0
Vendor ID:0x8086
Device ID:0x5912

$ sudo apt install nvidia-driver-470

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following package was automatically installed and is no longer required:
  libwayland-client0:i386
Use 'sudo apt autoremove' to remove it.
The following additional packages will be installed:
  libnvidia-cfg1-470 libnvidia-common-470 libnvidia-compute-470 libnvidia-decode-470 libnvidia-encode-470 libnvidia-extra-470 libnvidia-fbc1-470 libnvidia-gl-470 libnvidia-gl-470:i386 libnvidia-ifr1-470 libnvidia-ifr1-470:i386 nvidia-compute-utils-470 nvidia-dkms-470
  nvidia-kernel-common-470 nvidia-kernel-source-470 nvidia-prime nvidia-settings nvidia-utils-470 xserver-xorg-video-nvidia-470
The following NEW packages will be installed:
  libnvidia-cfg1-470 libnvidia-common-470 libnvidia-compute-470 libnvidia-decode-470 libnvidia-encode-470 libnvidia-extra-470 libnvidia-fbc1-470 libnvidia-gl-470 libnvidia-gl-470:i386 libnvidia-ifr1-470 libnvidia-ifr1-470:i386 nvidia-compute-utils-470 nvidia-dkms-470
  nvidia-driver-470 nvidia-kernel-common-470 nvidia-kernel-source-470 nvidia-prime nvidia-settings nvidia-utils-470 xserver-xorg-video-nvidia-470
0 upgraded, 20 newly installed, 0 to remove and 10 not upgraded.
Need to get 0 B/244 MB of archives.
After this operation, 673 MB of additional disk space will be used.
Do you want to continue? [Y/n]

No Reboot. Firefox restart: Problem is back.

$ clang test.c $(pkg-config --cflags --libs libdrm egl) -o test && ./test

eglQueryDisplayAttribEXT supported
eglGetError(): 0x3000 // eglQueryDisplayAttribEXT returned EGL_SUCCESS
eglGetError(): 0x3008 // eglQueryDeviceStringEXT returned EGL_BAD_DISPLAY

egl codes: https://searchfox.org/mozilla-central/rev/5966e98bdfa7355e0a3d9cce482f4717dc3419b0/gfx/angle/checkout/include/EGL/egl.h#54,94

$ sudo apt purge *nvidia*

The following packages were automatically installed and are no longer required:
  libatomic1:i386 libbsd0:i386 libdrm-amdgpu1:i386 libdrm-intel1:i386 libdrm-nouveau2:i386 libdrm-radeon1:i386 libdrm2:i386 libedit2:i386 libelf1:i386 libexpat1:i386 libffi8ubuntu1:i386 libgl1:i386 libgl1-mesa-dri:i386 libglapi-mesa:i386 libglvnd0:i386 libglx-mesa0:i386
  libglx0:i386 libllvm12:i386 libmd0:i386 libnvidia-compute-470:i386 libnvidia-decode-470:i386 libnvidia-encode-470:i386 libnvidia-fbc1-470:i386 libpciaccess0:i386 libsensors5:i386 libstdc++6:i386 libvulkan1:i386 libwayland-client0:i386 libx11-6:i386 libx11-xcb1:i386 libxau6:i386
  libxcb-dri2-0:i386 libxcb-dri3-0:i386 libxcb-glx0:i386 libxcb-present0:i386 libxcb-shm0:i386 libxcb-sync1:i386 libxcb-xfixes0:i386 libxcb1:i386 libxdmcp6:i386 libxext6:i386 libxfixes3:i386 libxnvctrl0 libxshmfence1:i386 libxxf86vm1:i386 screen-resolution-extra
Use 'sudo apt autoremove' to remove them.
The following packages will be REMOVED:
  libnvidia-cfg1-470* libnvidia-common-470* libnvidia-compute-470* libnvidia-decode-470* libnvidia-encode-470* libnvidia-extra-470* libnvidia-fbc1-470* libnvidia-gl-470* libnvidia-gl-470:i386* libnvidia-ifr1-470* libnvidia-ifr1-470:i386* nvidia-compute-utils-470* nvidia-dkms-470*
  nvidia-driver-470* nvidia-kernel-common-470* nvidia-kernel-source-470* nvidia-prime* nvidia-settings* nvidia-utils-470* xserver-xorg-video-nvidia-470*
0 upgraded, 0 newly installed, 20 to remove and 10 not upgraded.
After this operation, 673 MB disk space will be freed.
Do you want to continue? [Y/n]

$ clang test.c $(pkg-config --cflags --libs libdrm egl) -o test && ./test

eglQueryDisplayAttribEXT supported
eglGetError(): 0x3000 // eglQueryDisplayAttribEXT returned EGL_SUCCESS
eglGetError(): 0x3000 // eglQueryDeviceStringEXT returned EGL_SUCCESS
device:/dev/dri/card0
Vendor ID:0x8086
Device ID:0x5912

$ dpkg -l | grep libglvnd

ii libglvnd-dev:amd64 1.3.2-1 amd64 Vendor neutral GL dispatch library -- development files
ii libglvnd0:amd64 1.3.2-1 amd64 Vendor neutral GL dispatch library
ii libglvnd0:i386 1.3.2-1 i386 Vendor neutral GL dispatch library

The presence of libglvnd itself does not seem to be the problem. It doesn't get removed when I purge nvidia.

eglQueryDeviceStringEXT returned EGL_BAD_DISPLAY

That strongly smells like a internal driver error:

        const char *eglQueryDeviceStringEXT(EGLDeviceEXT device,
                                            EGLint name);

   ...

    On failure, NULL is returned.  An EGL_BAD_DEVICE_EXT error is
    generated if <device> is not a valid EGLDeviceEXT.  An
    EGL_BAD_PARAMETER error is generated if <name> is not one of the
    values described above.

The call does not even take a display argument - the previous one, eglQueryDisplayAttribEXT, does, but succeeded. So yeah, most likely not our bug.

llvmpipe:
With Nvidia driver installed:
$ LIBGL_ALWAYS_SOFTWARE=1 clang test.c $(pkg-config --cflags --libs libdrm egl) -o test && ./test

eglQueryDisplayAttribEXT supported
eglGetError(): 0x3000 // eglQueryDisplayAttribEXT returned EGL_SUCCESS
eglGetError(): 0x3008 // eglQueryDeviceStringEXT returned EGL_BAD_DISPLAY

$ sudo apt purge *nvidia*

$ LIBGL_ALWAYS_SOFTWARE=1 clang test.c $(pkg-config --cflags --libs libdrm egl) -o test && ./test

eglQueryDisplayAttribEXT supported
eglGetError(): 0x3000 // eglQueryDisplayAttribEXT returned EGL_SUCCESS
eglGetError(): 0x3000 // eglQueryDeviceStringEXT returned EGL_SUCCESS
device:/dev/dri/card0
Vendor ID:0x8086
Device ID:0x5912

For my example app it does not matter whether LIBGL_ALWAYS_SOFTWARE=1 is set.

https://editor.mergely.com/cPlE2om1/
left: LIBGL_ALWAYS_SOFTWARE=1 eglinfo
right: eglinfo

  • "EGL client extension" EXT_device_query is always present
  • "X11 platform" and visuals differ

So the relevant question seems to be why does eglQueryDeviceStringEXT return EGL_BAD_DISPLAY with nvidia-driver-470 installed.

$ LIBGL_ALWAYS_SOFTWARE=1 clang test.c $(pkg-config --cflags --libs libdrm egl) -o test && ./test

The LIBGL_ALWAYS_SOFTWARE=1 only works for one command ,not the one after the &&. Can you retest?

Oh, yes.

llvmpipe:
With Nvidia driver installed:
$ LIBGL_ALWAYS_SOFTWARE=1 ./test

eglQueryDisplayAttribEXT supported
eglGetError(): 0x3000 // eglQueryDisplayAttribEXT returned EGL_SUCCESS
eglGetError(): 0x3008 // eglQueryDeviceStringEXT returned EGL_BAD_DISPLAY

= same as without LIBGL_ALWAYS_SOFTWARE=1

$ sudo apt purge *nvidia*

$ LIBGL_ALWAYS_SOFTWARE=1 ./test

eglQueryDisplayAttribEXT supported
eglGetError(): 0x3000 // eglQueryDisplayAttribEXT returned EGL_SUCCESS
eglGetError(): 0x300c // eglQueryDeviceStringEXT returned EGL_BAD_PARAMETER <-------------

Attached file test.c (obsolete) —

$ clang test.c $(pkg-config --cflags --libs libdrm egl gl x11) -o test

$ sudo apt install nvidia-driver-470 -y

Screenshot comment 1: Nvidia driver is installed, but Intel GPU selected in Nvidia X Server Settings. The HDMI cable is plugged into the motherboard.

$ ./test

0x3000 clientExtensions (EGL_EXTENSIONS for EGL_NO_DISPLAY): EGL_EXT_platform_base EGL_EXT_device_base EGL_EXT_device_enumeration EGL_EXT_device_query EGL_KHR_client_get_all_proc_addresses EGL_EXT_client_extensions EGL_KHR_debug EGL_KHR_platform_x11 EGL_EXT_platform_x11 EGL_EXT_platform_device EGL_EXT_platform_wayland EGL_KHR_platform_wayland EGL_MESA_platform_xcb EGL_MESA_platform_gbm EGL_KHR_platform_gbm EGL_MESA_platform_surfaceless

clientExtensions: EGL_KHR_client_get_all_proc_addresses supported
clientExtensions: EGL_EXT_platform_base supported
clientExtensions: EGL_KHR_platform_x11 supported
0x3000 eglGetPlatformDisplay
0x3000 eglInitialize ok
0x3000 EGL_VENDOR: Mesa Project

0x3000 displayExtensions (EGL_EXTENSIONS for initialized display): EGL_ANDROID_blob_cache EGL_ANDROID_native_fence_sync EGL_CHROMIUM_sync_control EGL_EXT_buffer_age EGL_EXT_create_context_robustness EGL_EXT_image_dma_buf_import EGL_EXT_image_dma_buf_import_modifiers EGL_EXT_swap_buffers_with_damage EGL_IMG_context_priority EGL_KHR_cl_event2 EGL_KHR_config_attribs EGL_KHR_create_context EGL_KHR_create_context_no_error EGL_KHR_fence_sync EGL_KHR_get_all_proc_addresses EGL_KHR_gl_colorspace EGL_KHR_gl_renderbuffer_image EGL_KHR_gl_texture_2D_image EGL_KHR_gl_texture_3D_image EGL_KHR_gl_texture_cubemap_image EGL_KHR_image EGL_KHR_image_base EGL_KHR_image_pixmap EGL_KHR_no_config_context EGL_KHR_reusable_sync EGL_KHR_surfaceless_context EGL_KHR_swap_buffers_with_damage EGL_EXT_pixel_format_float EGL_KHR_wait_sync EGL_MESA_configless_context EGL_MESA_drm_image EGL_MESA_image_dma_buf_export EGL_MESA_query_driver EGL_NOK_texture_from_pixmap EGL_WL_bind_wayland_display 

clientExtensions: EGL_EXT_device_query supported
0x3000 eglGetProcAddress(eglQueryDisplayAttribEXT)
0x3000 eglGetProcAddress(eglQueryDeviceStringEXT)
0x3000 device: eglQueryDisplayAttribEXT EGL_DEVICE_EXT ok

0x3008 deviceExtensions (EGL_EXTENSIONS for device) failed

bug from comment 0:
We don't know if EGL_EXT_device_drm or EGL_MESA_device_software is supported
because eglQueryDeviceStringEXT(device, EGL_EXTENSIONS) fails with EGL_BAD_DISPLAY
although EGL_VENDOR is Mesa and eglQueryDisplayAttribEXT was ok.

This could be https://gitlab.freedesktop.org/glvnd/libglvnd/-/issues/210.
https://gitlab.freedesktop.org/glvnd/libglvnd/-/issues/215
https://gitlab.freedesktop.org/glvnd/libglvnd/-/merge_requests/239
Apparently we should also use eglQueryDevicesEXT.

$ LIBGL_ALWAYS_SOFTWARE=1 ./test

0x3000 clientExtensions (EGL_EXTENSIONS for EGL_NO_DISPLAY): EGL_EXT_platform_base EGL_EXT_device_base EGL_EXT_device_enumeration EGL_EXT_device_query EGL_KHR_client_get_all_proc_addresses EGL_EXT_client_extensions EGL_KHR_debug EGL_KHR_platform_x11 EGL_EXT_platform_x11 EGL_EXT_platform_device EGL_EXT_platform_wayland EGL_KHR_platform_wayland EGL_MESA_platform_xcb EGL_MESA_platform_gbm EGL_KHR_platform_gbm EGL_MESA_platform_surfaceless

clientExtensions: EGL_KHR_client_get_all_proc_addresses supported
clientExtensions: EGL_EXT_platform_base supported
clientExtensions: EGL_KHR_platform_x11 supported
0x3000 eglGetPlatformDisplay
0x3000 eglInitialize ok
0x3000 EGL_VENDOR: Mesa Project

0x3000 displayExtensions (EGL_EXTENSIONS for initialized display): EGL_EXT_create_context_robustness EGL_KHR_cl_event2 EGL_KHR_config_attribs EGL_KHR_context_flush_control EGL_KHR_create_context EGL_KHR_create_context_no_error EGL_KHR_fence_sync EGL_KHR_get_all_proc_addresses EGL_KHR_gl_colorspace EGL_KHR_gl_renderbuffer_image EGL_KHR_gl_texture_2D_image EGL_KHR_gl_texture_3D_image EGL_KHR_gl_texture_cubemap_image EGL_KHR_image_base EGL_KHR_no_config_context EGL_KHR_reusable_sync EGL_KHR_surfaceless_context EGL_EXT_pixel_format_float EGL_KHR_wait_sync EGL_MESA_configless_context EGL_MESA_drm_image EGL_MESA_query_driver 

clientExtensions: EGL_EXT_device_query supported
0x3000 eglGetProcAddress(eglQueryDisplayAttribEXT)
0x3000 eglGetProcAddress(eglQueryDeviceStringEXT)
0x3000 device: eglQueryDisplayAttribEXT EGL_DEVICE_EXT ok

0x3008 deviceExtensions (EGL_EXTENSIONS for device) failed

Same bug as above.

sudo apt purge *nvidia* -y

$ ./test

0x3000 clientExtensions (EGL_EXTENSIONS for EGL_NO_DISPLAY): EGL_EXT_device_base EGL_EXT_device_enumeration EGL_EXT_device_query EGL_EXT_platform_base EGL_KHR_client_get_all_proc_addresses EGL_EXT_client_extensions EGL_KHR_debug EGL_EXT_platform_device EGL_EXT_platform_wayland EGL_KHR_platform_wayland EGL_EXT_platform_x11 EGL_KHR_platform_x11 EGL_MESA_platform_xcb EGL_MESA_platform_gbm EGL_KHR_platform_gbm EGL_MESA_platform_surfaceless

clientExtensions: EGL_KHR_client_get_all_proc_addresses supported
clientExtensions: EGL_EXT_platform_base supported
clientExtensions: EGL_KHR_platform_x11 supported
0x3000 eglGetPlatformDisplay
0x3000 eglInitialize ok
0x3000 EGL_VENDOR: Mesa Project

0x3000 displayExtensions (EGL_EXTENSIONS for initialized display): EGL_ANDROID_blob_cache EGL_ANDROID_native_fence_sync EGL_CHROMIUM_sync_control EGL_EXT_buffer_age EGL_EXT_create_context_robustness EGL_EXT_image_dma_buf_import EGL_EXT_image_dma_buf_import_modifiers EGL_EXT_swap_buffers_with_damage EGL_IMG_context_priority EGL_KHR_cl_event2 EGL_KHR_config_attribs EGL_KHR_create_context EGL_KHR_create_context_no_error EGL_KHR_fence_sync EGL_KHR_get_all_proc_addresses EGL_KHR_gl_colorspace EGL_KHR_gl_renderbuffer_image EGL_KHR_gl_texture_2D_image EGL_KHR_gl_texture_3D_image EGL_KHR_gl_texture_cubemap_image EGL_KHR_image EGL_KHR_image_base EGL_KHR_image_pixmap EGL_KHR_no_config_context EGL_KHR_reusable_sync EGL_KHR_surfaceless_context EGL_KHR_swap_buffers_with_damage EGL_EXT_pixel_format_float EGL_KHR_wait_sync EGL_MESA_configless_context EGL_MESA_drm_image EGL_MESA_image_dma_buf_export EGL_MESA_query_driver EGL_NOK_texture_from_pixmap EGL_WL_bind_wayland_display 

clientExtensions: EGL_EXT_device_query supported
0x3000 eglGetProcAddress(eglQueryDisplayAttribEXT)
0x3000 eglGetProcAddress(eglQueryDeviceStringEXT)
0x3000 device: eglQueryDisplayAttribEXT EGL_DEVICE_EXT ok

0x3000 deviceExtensions (EGL_EXTENSIONS for device): EGL_EXT_device_drm

deviceExtensions: EXT_device_drm supported
0x3000 EGL_DRM_DEVICE_FILE_EXT: /dev/dri/card0
Vendor ID:0x8086
Device ID:0x5912

We have EGL_EXT_device_drm, thus we choose hardware WebRender.

$ LIBGL_ALWAYS_SOFTWARE=1 ./test

0x3000 clientExtensions (EGL_EXTENSIONS for EGL_NO_DISPLAY): EGL_EXT_device_base EGL_EXT_device_enumeration EGL_EXT_device_query EGL_EXT_platform_base EGL_KHR_client_get_all_proc_addresses EGL_EXT_client_extensions EGL_KHR_debug EGL_EXT_platform_device EGL_EXT_platform_wayland EGL_KHR_platform_wayland EGL_EXT_platform_x11 EGL_KHR_platform_x11 EGL_MESA_platform_xcb EGL_MESA_platform_gbm EGL_KHR_platform_gbm EGL_MESA_platform_surfaceless

clientExtensions: EGL_KHR_client_get_all_proc_addresses supported
clientExtensions: EGL_EXT_platform_base supported
clientExtensions: EGL_KHR_platform_x11 supported
0x3000 eglGetPlatformDisplay
0x3000 eglInitialize ok
0x3000 EGL_VENDOR: Mesa Project

0x3000 displayExtensions (EGL_EXTENSIONS for initialized display): EGL_EXT_create_context_robustness EGL_KHR_cl_event2 EGL_KHR_config_attribs EGL_KHR_context_flush_control EGL_KHR_create_context EGL_KHR_create_context_no_error EGL_KHR_fence_sync EGL_KHR_get_all_proc_addresses EGL_KHR_gl_colorspace EGL_KHR_gl_renderbuffer_image EGL_KHR_gl_texture_2D_image EGL_KHR_gl_texture_3D_image EGL_KHR_gl_texture_cubemap_image EGL_KHR_image_base EGL_KHR_no_config_context EGL_KHR_reusable_sync EGL_KHR_surfaceless_context EGL_EXT_pixel_format_float EGL_KHR_wait_sync EGL_MESA_configless_context EGL_MESA_drm_image EGL_MESA_query_driver 

clientExtensions: EGL_EXT_device_query supported
0x3000 eglGetProcAddress(eglQueryDisplayAttribEXT)
0x3000 eglGetProcAddress(eglQueryDeviceStringEXT)
0x3000 device: eglQueryDisplayAttribEXT EGL_DEVICE_EXT ok

0x3000 deviceExtensions (EGL_EXTENSIONS for device): EGL_MESA_device_software

deviceExtensions: EXT_device_drm not supported, ignoring
0x300c no EGL_DRM_DEVICE_FILE_EXT

We don't have EGL_EXT_device_drm, but even know about EGL_MESA_device_software, thus we choose software WebRender.

Attached file test.c

Btw, this is how it looks when Nvidia is the primary GPU and the HDMI cable is plugged into it:

$ ./test

0x3000 clientExtensions (EGL_EXTENSIONS for EGL_NO_DISPLAY): EGL_EXT_platform_base EGL_EXT_device_base EGL_EXT_device_enumeration EGL_EXT_device_query EGL_KHR_client_get_all_proc_addresses EGL_EXT_client_extensions EGL_KHR_debug EGL_KHR_platform_x11 EGL_EXT_platform_x11 EGL_EXT_platform_device EGL_EXT_platform_wayland EGL_KHR_platform_wayland EGL_MESA_platform_xcb EGL_MESA_platform_gbm EGL_KHR_platform_gbm EGL_MESA_platform_surfaceless

clientExtensions: EGL_KHR_client_get_all_proc_addresses supported
clientExtensions: EGL_EXT_platform_base supported
clientExtensions: EGL_KHR_platform_x11 supported
0x3000 eglGetPlatformDisplay
0x3000 eglInitialize ok
0x3000 EGL_VENDOR: NVIDIA

0x3000 displayExtensions (EGL_EXTENSIONS for initialized display): EGL_EXT_buffer_age EGL_EXT_client_sync EGL_EXT_create_context_robustness EGL_EXT_image_dma_buf_import EGL_EXT_image_dma_buf_import_modifiers EGL_MESA_image_dma_buf_export EGL_EXT_output_base EGL_EXT_stream_acquire_mode EGL_EXT_sync_reuse EGL_IMG_context_priority EGL_KHR_config_attribs EGL_KHR_create_context_no_error EGL_KHR_context_flush_control EGL_KHR_create_context EGL_KHR_fence_sync EGL_KHR_get_all_proc_addresses EGL_KHR_partial_update EGL_KHR_swap_buffers_with_damage EGL_KHR_no_config_context EGL_KHR_gl_colorspace EGL_KHR_gl_renderbuffer_image EGL_KHR_gl_texture_2D_image EGL_KHR_gl_texture_3D_image EGL_KHR_gl_texture_cubemap_image EGL_KHR_image EGL_KHR_image_base EGL_KHR_image_pixmap EGL_KHR_reusable_sync EGL_KHR_stream EGL_KHR_stream_attrib EGL_KHR_stream_consumer_gltexture EGL_KHR_stream_cross_process_fd EGL_KHR_stream_fifo EGL_KHR_stream_producer_eglsurface EGL_KHR_surfaceless_context EGL_KHR_wait_sync EGL_NV_nvrm_fence_sync EGL_NV_post_sub_buffer EGL_NV_quadruple_buffer EGL_NV_stream_consumer_eglimage EGL_NV_stream_cross_display EGL_NV_stream_cross_object EGL_NV_stream_cross_process EGL_NV_stream_cross_system EGL_NV_stream_dma EGL_NV_stream_flush EGL_NV_stream_metadata EGL_NV_stream_remote EGL_NV_stream_reset EGL_NV_stream_socket EGL_NV_stream_socket_inet EGL_NV_stream_socket_unix EGL_NV_stream_sync EGL_NV_stream_fifo_next EGL_NV_stream_fifo_synchronous EGL_NV_stream_consumer_gltexture_yuv EGL_NV_stream_attrib EGL_NV_stream_origin EGL_NV_system_time EGL_NV_output_drm_flip_event EGL_NV_triple_buffer

clientExtensions: EGL_EXT_device_query supported
0x3000 eglGetProcAddress(eglQueryDisplayAttribEXT)
0x3000 eglGetProcAddress(eglQueryDeviceStringEXT)
0x3000 device: eglQueryDisplayAttribEXT EGL_DEVICE_EXT ok

0x3000 deviceExtensions (EGL_EXTENSIONS for device): EGL_NV_device_cuda EGL_EXT_device_drm EGL_EXT_device_query_name

deviceExtensions: nvidia EGL_EXT_device_query_name supported
0x3000 EGL_RENDERER_EXT: NVIDIA GeForce GTX 1060 3GB
0x3000 EGL_VENDOR: NVIDIA
deviceExtensions: EXT_device_drm supported
0x3000 EGL_DRM_DEVICE_FILE_EXT: /dev/dri/card1
Vendor ID:0x10de
Device ID:0x1c02
$ LIBGL_ALWAYS_SOFTWARE=1 ./test

0x3000 clientExtensions (EGL_EXTENSIONS for EGL_NO_DISPLAY): EGL_EXT_platform_base EGL_EXT_device_base EGL_EXT_device_enumeration EGL_EXT_device_query EGL_KHR_client_get_all_proc_addresses EGL_EXT_client_extensions EGL_KHR_debug EGL_KHR_platform_x11 EGL_EXT_platform_x11 EGL_EXT_platform_device EGL_EXT_platform_wayland EGL_KHR_platform_wayland EGL_MESA_platform_xcb EGL_MESA_platform_gbm EGL_KHR_platform_gbm EGL_MESA_platform_surfaceless

clientExtensions: EGL_KHR_client_get_all_proc_addresses supported
clientExtensions: EGL_EXT_platform_base supported
clientExtensions: EGL_KHR_platform_x11 supported
0x3000 eglGetPlatformDisplay
0x3000 eglInitialize ok
0x3000 EGL_VENDOR: NVIDIA

0x3000 displayExtensions (EGL_EXTENSIONS for initialized display): EGL_EXT_buffer_age EGL_EXT_client_sync EGL_EXT_create_context_robustness EGL_EXT_image_dma_buf_import EGL_EXT_image_dma_buf_import_modifiers EGL_MESA_image_dma_buf_export EGL_EXT_output_base EGL_EXT_stream_acquire_mode EGL_EXT_sync_reuse EGL_IMG_context_priority EGL_KHR_config_attribs EGL_KHR_create_context_no_error EGL_KHR_context_flush_control EGL_KHR_create_context EGL_KHR_fence_sync EGL_KHR_get_all_proc_addresses EGL_KHR_partial_update EGL_KHR_swap_buffers_with_damage EGL_KHR_no_config_context EGL_KHR_gl_colorspace EGL_KHR_gl_renderbuffer_image EGL_KHR_gl_texture_2D_image EGL_KHR_gl_texture_3D_image EGL_KHR_gl_texture_cubemap_image EGL_KHR_image EGL_KHR_image_base EGL_KHR_image_pixmap EGL_KHR_reusable_sync EGL_KHR_stream EGL_KHR_stream_attrib EGL_KHR_stream_consumer_gltexture EGL_KHR_stream_cross_process_fd EGL_KHR_stream_fifo EGL_KHR_stream_producer_eglsurface EGL_KHR_surfaceless_context EGL_KHR_wait_sync EGL_NV_nvrm_fence_sync EGL_NV_post_sub_buffer EGL_NV_quadruple_buffer EGL_NV_stream_consumer_eglimage EGL_NV_stream_cross_display EGL_NV_stream_cross_object EGL_NV_stream_cross_process EGL_NV_stream_cross_system EGL_NV_stream_dma EGL_NV_stream_flush EGL_NV_stream_metadata EGL_NV_stream_remote EGL_NV_stream_reset EGL_NV_stream_socket EGL_NV_stream_socket_inet EGL_NV_stream_socket_unix EGL_NV_stream_sync EGL_NV_stream_fifo_next EGL_NV_stream_fifo_synchronous EGL_NV_stream_consumer_gltexture_yuv EGL_NV_stream_attrib EGL_NV_stream_origin EGL_NV_system_time EGL_NV_output_drm_flip_event EGL_NV_triple_buffer

clientExtensions: EGL_EXT_device_query supported
0x3000 eglGetProcAddress(eglQueryDisplayAttribEXT)
0x3000 eglGetProcAddress(eglQueryDeviceStringEXT)
0x3000 device: eglQueryDisplayAttribEXT EGL_DEVICE_EXT ok

0x3000 deviceExtensions (EGL_EXTENSIONS for device): EGL_NV_device_cuda EGL_EXT_device_drm EGL_EXT_device_query_name

deviceExtensions: nvidia EGL_EXT_device_query_name supported
0x3000 EGL_RENDERER_EXT: NVIDIA GeForce GTX 1060 3GB
0x3000 EGL_VENDOR: NVIDIA
deviceExtensions: EXT_device_drm supported
0x3000 EGL_DRM_DEVICE_FILE_EXT: /dev/dri/card1
Vendor ID:0x10de
Device ID:0x1c02
Attachment #9241977 - Attachment is obsolete: true
Pushed by robert.mader@posteo.de: https://hg.mozilla.org/integration/autoland/rev/bf4fb5c56ca3 Stop reporting swrast as driver, r=aosmond
Keywords: leave-open

Btw, this is how it looks when Nvidia is the primary GPU and the HDMI cable is plugged into it:

Looks to me like the nvidia driver does not know the LIBGL_ALWAYS_SOFTWARE variable - which would make sense.

Unassigning for now as to me this looks like a setup/driver bug.

Assignee: robert.mader → nobody
Status: ASSIGNED → NEW

The severity field is not set for this bug.
:jimm, could you have a look please?

For more information, please visit auto_nag documentation.

Flags: needinfo?(jmathies)
Severity: -- → S3
Flags: needinfo?(jmathies)
Summary: If second, unused, Nvidia GPU is present, the Intel APU does not have correct vendorID, deviceID, driverVendor, is thus not qualified for HW WR. → libglvnd: If second, unused, Nvidia GPU is present, the Intel APU does not have correct vendorID, deviceID, driverVendor, is thus not qualified for HW WR.
Summary: libglvnd: If second, unused, Nvidia GPU is present, the Intel APU does not have correct vendorID, deviceID, driverVendor, is thus not qualified for HW WR. → libglvnd: If second, unused, Nvidia GPU is present with the Nvidia driver installed, the Intel APU does not have correct vendorID, deviceID, driverVendor, is thus not qualified for HW WR.
Blocks: 1737428
See Also: → 1739259

Don't see why this would block bug 1737428

No longer blocks: 1737428
See Also: → 1746708
See Also: 1746708
Has Regression Range: --- → yes
Flags: needinfo?(jan)

The leave-open keyword is there and there is no activity for 6 months.
:gw, maybe it's time to close this bug?
For more information, please visit auto_nag documentation.

Flags: needinfo?(gwatson)

Jan, does this still happen? IIRC this should have been fixed in libglvnd.

Flags: needinfo?(gwatson)

Clear a needinfo that is pending on an inactive user.

Inactive users most likely will not respond; if the missing information is essential and cannot be collected another way, the bug maybe should be closed as INCOMPLETE.

For more information, please visit BugBot documentation.

Flags: needinfo?(jan)
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: