New issue
Advanced search Search tips

Issue 723673 link

Starred by 1 user

Issue metadata

Status: Fixed
Owner: ----
Closed: Oct 8
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Windows
Pri: 2
Type: Bug-Regression



Sign in to add a comment

ANGLE GL backend initialization fails on Windows 10 Creators Update

Reported by oetu...@nvidia.com, May 17 2017

Issue description

Chrome Version: 60.0.3102.0
OS: Windows 10 version 1703, OS build 15063.0 (Creators Update)

What steps will reproduce the problem?
(1) Run chrome.exe --use-angle=gl
(2) Open chrome://gpu

What is the expected result?
Hardware graphics acceleration works.

What happens instead?
Hardware graphics acceleration fails.

This seems to be isolated to release builds of Chromium, on Windows 10 Creators Update. Earlier versions of Windows 10 did not reproduce the bug, and debug build of Chromium did not reproduce the bug either.

Reproduced on a system with NVIDIA GeForce 1080 GPU and prerelease drivers, but latest stable driver release is expected to reproduce the bug as well.

chrome://gpu:

Graphics Feature Status
Canvas: Software only, hardware acceleration unavailable
Flash: Software only, hardware acceleration unavailable
Flash Stage3D: Software only, hardware acceleration unavailable
Flash Stage3D Baseline profile: Software only, hardware acceleration unavailable
Compositing: Software only, hardware acceleration unavailable
Multiple Raster Threads: Enabled
Native GpuMemoryBuffers: Software only. Hardware acceleration disabled
Rasterization: Software only, hardware acceleration unavailable
Video Decode: Software only, hardware acceleration unavailable
Video Encode: Software only, hardware acceleration unavailable
WebGL: Hardware accelerated but at reduced performance
WebGL2: Unavailable
Driver Bug Workarounds
clear_uniforms_before_first_program_use
decode_encode_srgb_for_generatemipmap
disable_discard_framebuffer
disable_dxgi_zero_copy_video
disable_framebuffer_cmaa
exit_on_context_lost
scalarize_vec_and_mat_constructor_args
Problems Detected
GPU rasterization should only be enabled on NVIDIA and Intel DX11+, and AMD RX-R2 GPUs for now.: 643850
Disabled Features: gpu_rasterization
Some drivers are unable to reset the D3D device in the GPU process sandbox
Applied Workarounds: exit_on_context_lost
Clear uniforms before first program use on all platforms: 124764, 349137
Applied Workarounds: clear_uniforms_before_first_program_use
Always rewrite vec/mat constructors to be consistent: 398694
Applied Workarounds: scalarize_vec_and_mat_constructor_args
Framebuffer discarding can hurt performance on non-tilers: 570897
Applied Workarounds: disable_discard_framebuffer
Limited enabling of Chromium GL_INTEL_framebuffer_CMAA: 535198
Applied Workarounds: disable_framebuffer_cmaa
Zero-copy NV12 video displays incorrect colors on NVIDIA drivers.: 635319
Applied Workarounds: disable_dxgi_zero_copy_video
Disable KHR_blend_equation_advanced until cc shaders are updated: 661715
Decode and Encode before generateMipmap for srgb format textures on Windows: 634519
Applied Workarounds: decode_encode_srgb_for_generatemipmap
Native GpuMemoryBuffers have been disabled, either via about:flags or command line.
Disabled Features: native_gpu_memory_buffers
Version Information
Data exported	17.5.2017 klo 17.43.35
Chrome version	Chrome/60.0.3102.0
Operating system	Windows NT 10.0.15063
Software rendering list version	13.7
Driver bug list version	10.9
ANGLE commit id	995c2ed27861
2D graphics backend	Skia/60 eb99bfd8588269c3d0bc9fc23d07643a2039994b-
Command Line	"C:\Users\oetuaho\AppData\Local\Google\Chrome SxS\Application\chrome.exe" --use-angle=gl --flag-switches-begin --flag-switches-end
Driver Information
Initialization time	0
In-process GPU	true
Passthrough Command Decoder	false
Supports overlays	false
Sandboxed	false
GPU0	VENDOR = 0x10de, DEVICE= 0x1b80
Optimus	false
Optimus	false
AMD switchable	false
Desktop compositing	Aero Glass
Diagonal Monitor Size of \\.\DISPLAY1	23.9"
Driver vendor	Google Inc.
Driver version	3.3.0.2
Driver date	2017/04/07
Pixel shader version	3.0
Vertex shader version	3.0
Max. MSAA samples	4
Machine model name	
Machine model version	
GL_VENDOR	Google Inc.
GL_RENDERER	Google SwiftShader
GL_VERSION	OpenGL ES 2.0 SwiftShader
GL_EXTENSIONS	
Disabled Extensions	GL_KHR_blend_equation_advanced GL_KHR_blend_equation_advanced_coherent
Window system binding vendor	
Window system binding version	
Window system binding extensions	
Direct rendering	Yes
Reset notification strategy	0x0000
GPU process crash count	1
Compositor Information
Tile Update Mode	One-copy
Partial Raster	Enabled
GpuMemoryBuffers Status
ATC	Software only
ATCIA	Software only
DXT1	Software only
DXT5	Software only
ETC1	Software only
R_8	Software only
RG_88	Software only
BGR_565	Software only
RGBA_4444	Software only
RGBX_8888	Software only
RGBA_8888	Software only
BGRX_8888	Software only
BGRA_8888	Software only
RGBA_F16	Software only
YVU_420	Software only
YUV_420_BIPLANAR	Software only
UYVY_422	Software only
Diagnostics
... loading ...
Log Messages
[17080:8744:0517/174329.428:ERROR:angle_platform_impl.cc(36)] : egl::Display::initialize(440): ANGLE Display::initialize error 0: Failed to open D3D device.
[17080:8744:0517/174329.428:ERROR:gl_surface_egl.cc(690)] : eglInitialize OpenGL failed with error EGL_BAD_PARAMETER
[17080:8744:0517/174329.428:ERROR:gl_initializer_win.cc(240)] : GLSurfaceEGL::InitializeOneOff failed.
GpuProcessHostUIShim: The GPU process crashed!
 
Owner: geoffl...@chromium.org
Status: Assigned (was: Untriaged)
I'll take a look at this.

Comment 2 by oetu...@nvidia.com, May 17 2017

Thanks Geoff. It's quite odd that this seems isolated to Win10 Creators Update and the release build of Chrome. Maybe some memory is not being initialized properly?

This is an issue for getting the GL backend productized, but is also affecting our WebGL test coverage a bit, so it would be good to get this fixed.

Comment 3 by oetu...@nvidia.com, May 22 2017

Geoff, have you had any luck with this issue so far? I just double-checked that it reproduces also on the stable driver version 382. If you need any help from me to make progress I'd be happy to provide it, this is an important bug to solve for NVIDIA.
Hey Olli, I'll be looking at this tomorrow.
Hey Olli, I had a chance to dig into this.  The failure is happening in the wglDXOpenDeviceNV function of the WGL_NV_DX_interop(2) extension (https://chromium.googlesource.com/angle/angle/+/master/src/libANGLE/renderer/gl/wgl/DisplayWGL.cpp#726).

The device appears to be fine but returns and null handle and generates an error (0xC0070032) which isn't list of errors returned by this function.

I also noticed that this regressed between driver versions 378.92 and 382.33.  Can this bug be filed with the appropriate driver team?  If it would help, I can try to make a standalone repro.

Comment 6 by oetu...@nvidia.com, May 24 2017

Curious. Do you know why it doesn't repro on the debug build? That made me suspect that it's most likely a Chromium/ANGLE bug. But if it's on our end I'll make sure that the driver team gets on fixing it. A standalone repro would be very helpful, that would make it much easier for them to address it.
It does repro in a debug build for me.  This is a code path that only Chrome takes though, using a DXGI swap chain with the interop extension for presentation.  I'll make a standalone repro.
I reverted my driver too and can confirm that the repro succeeds on the 378.92 driver.
Geoff, we're so far unable to repro the issue using the minimal repro case. We've tried on two different Windows 10 workstations. I tried two different driver versions, 382.33 and a prerelease driver, both debug and release build of the repro case application (with asserts enabled in release build using "#undef NDEBUG"). I built it with MSVS 2015 Update 3. Can you provide a complete Visual Studio project or another kind of build setup, in case there's something different in the build configuration we're using? Any other ideas come to mind how we could narrow this down?
I can repro it without the creators edition on Windows 10 by taking ANGLE's HelloTriangle sample and replacing the source in HelloTriangle.cpp with the repro.  I'll see if I can make a standalone sln.
We've gotten the bug to reproduce reliably on our end now with the minimal test case by replacing the hello_triangle source like you did. And we're proceeding on debugging the driver based on that.

However after trying to replicate the VS build settings in a standalone sln myself I couldn't get the bug to repro - this seems to still also leave the possibility that ANGLE's build is doing something incorrectly, though I can't imagine what. Please do report if you can reproduce with a standalone sln, we need to get to the bottom of this.

Comment 13 by oetu...@nvidia.com, Jun 29 2017

Cc: geoffl...@chromium.org
Owner: oetu...@nvidia.com
Status: ExternalDependency (was: Assigned)
We finished debugging the issue in our end and have written a fix to the driver. It will make it to a driver release eventually. Doesn't seem like ANGLE was doing anything wrong. I'll close the bug later when we have the version number of the released driver where this is fixed.
Great, thanks for the update Olli!
Cc: senorblanco@chromium.org
cc'ing Stephen regarding the GL back-end on Windows.
Cc: vmi...@chromium.org
Thanks; cc'ing Victor too.
Thanks Olli!  If you have a specific driver range for the bad behaviour we can make sure to use a tight blacklist entry for the OpenGL backend when it's used by default.
Also, is there any possibility of a workaround?
Based on our testing NVIDIA driver versions > 378 are affected. Drivers earlier than that should not be affected.
Labels: -Pri-3 Pri-2
Still experiencing this.. any update Olli? Going to try using a 378 version.
The latest 385.41 WHQL driver release contains a fix (tested on my end using GTX 1080).

We should be very careful with the version range we'll put in the code to workaround a serious issue like this though. The reason is that occasionally there can be a driver released from another branch, let's say specific to workstation products for example, which could have a slightly higher version number but where all the same fixes might not be included yet.
Owner: ----
Status: Fixed (was: ExternalDependency)
Nothing more to be done for this bug specifically - I think it's OK to close this. If the GL backend is enabled by default it should be fairly easy to limit it to drivers with version >= 388.71 to be safe.

Sign in to add a comment