New issue
Advanced search Search tips

Issue 804628 link

Starred by 3 users

Issue metadata

Status: Fixed
Owner:
Closed: Jan 2018
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Windows
Pri: 3
Type: Bug
Proj-VR
Proj-XR



Sign in to add a comment

webvr.info/samples/03-vr-presentation.html cannot present in HMD with latest nv driver

Project Member Reported by shaobo....@intel.com, Jan 23 2018

Issue description

Chrome Version: 66.0.3328.0 (Official Build) canary (64-bit) (cohort: Clang-64)
OS: win10 16299.125
Graphics Card : GTX 1060 (could reproduce on RX480 and HD630)


What steps will reproduce the problem?
(1) Setup HTC Vive and updated nv graphics driver to 23.21.13.9065
(2) Open Canary and access https://webvr.info/samples/03-vr-presentation.html 
(3) Click "Enter VR"

What is the expected result?
Present in HMD
What happens instead?
Present nothing in HMD and gl errors generated

BTW, other samples under webvr.info/samples works fine.

Please use labels and text to provide additional information.
My canary configure (copy from command line): --flag-switches-begin --enable-webvr --enable-features=OpenVR --disable-features=WebXR --flags-switches-end --flag-switches-begin --enable-webvr -- 

For graphics-related bugs, please copy/paste the contents of the about:gpu
page at the end of this report.
[372:11472:0123/094248.637:WARNING:angle_platform_impl.cc(59)] : compileToBinary(228): C:\fakepath(47,8-56): warning X3571: pow(f, e) will not work for negative f, use abs(f) or conditionally handle negative values if you expect them C:\fakepath(55,9-41): warning X3571: pow(f, e) will not work for negative f, use abs(f) or conditionally handle negative values if you expect them
[372:5384:0123/094248.644:WARNING:angle_platform_impl.cc(59)] : compileToBinary(228): C:\fakepath(46,8-56): warning X3571: pow(f, e) will not work for negative f, use abs(f) or conditionally handle negative values if you expect them C:\fakepath(54,9-41): warning X3571: pow(f, e) will not work for negative f, use abs(f) or conditionally handle negative values if you expect them
[372:11472:0123/094248.651:WARNING:angle_platform_impl.cc(59)] : compileToBinary(228): C:\fakepath(29,8-56): warning X3571: pow(f, e) will not work for negative f, use abs(f) or conditionally handle negative values if you expect them C:\fakepath(37,9-41): warning X3571: pow(f, e) will not work for negative f, use abs(f) or conditionally handle negative values if you expect them
[372:5384:0123/094248.660:WARNING:angle_platform_impl.cc(59)] : compileToBinary(228): C:\fakepath(50,8-56): warning X3571: pow(f, e) will not work for negative f, use abs(f) or conditionally handle negative values if you expect them C:\fakepath(58,9-41): warning X3571: pow(f, e) will not work for negative f, use abs(f) or conditionally handle negative values if you expect them
[372:11472:0123/094248.751:WARNING:angle_platform_impl.cc(59)] : compileToBinary(228): C:\fakepath(65,10-34): warning X3571: pow(f, e) will not work for negative f, use abs(f) or conditionally handle negative values if you expect them C:\fakepath(87,10-34): warning X3571: pow(f, e) will not work for negative f, use abs(f) or conditionally handle negative values if you expect them
[372:5384:0123/094254.494:WARNING:angle_platform_impl.cc(59)] : compileToBinary(228): C:\fakepath(46,8-56): warning X3571: pow(f, e) will not work for negative f, use abs(f) or conditionally handle negative values if you expect them C:\fakepath(54,9-41): warning X3571: pow(f, e) will not work for negative f, use abs(f) or conditionally handle negative values if you expect them
[372:2476:0123/094654.866:ERROR:gl_utils.cc(278)] : [.Offscreen-For-WebGL-0000028792B78400] GL_INVALID_OPERATION: Invalid operation.
[372:2476:0123/094654.898:ERROR:gl_utils.cc(278)] : [.Offscreen-For-WebGL-0000028792B78400] GL_INVALID_OPERATION: Invalid operation.
[372:2476:0123/094654.920:ERROR:gl_utils.cc(278)] : [.Offscreen-For-WebGL-0000028792B78400] GL_INVALID_OPERATION: Invalid operation.
[372:2476:0123/094654.940:ERROR:gl_utils.cc(278)] : [.Offscreen-For-WebGL-0000028792B78400] GL_INVALID_OPERATION: Invalid operation.
[372:2476:0123/094654.963:ERROR:gl_utils.cc(278)] : [.Offscreen-For-WebGL-0000028792B78400] GL_INVALID_OPERATION: Invalid operation.
[372:2476:0123/094654.985:ERROR:gl_utils.cc(278)] : [.Offscreen-For-WebGL-0000028792B78400] GL_INVALID_OPERATION: Invalid operation.
[372:2476:0123/094655.008:ERROR:gl_utils.cc(278)] : [.Offscreen-For-WebGL-0000028792B78400] GL_INVALID_OPERATION: Invalid operation.
[372:2476:0123/094655.030:ERROR:gl_utils.cc(278)] : [.Offscreen-For-WebGL-0000028792B78400] GL_INVALID_OPERATION: Invalid operation.
[372:2476:0123/094655.052:ERROR:gl_utils.cc(278)] : [.Offscreen-For-WebGL-0000028792B78400] GL_INVALID_OPERATION: Invalid operation.
[372:2476:0123/094655.075:ERROR:gl_utils.cc(278)] : [.Offscreen-For-WebGL-0000028792B78400] GL_INVALID_OPERATION: Invalid operation.
[372:2476:0123/094655.097:ERROR:gl_utils.cc(278)] : [.Offscreen-For-WebGL-0000028792B78400] GL_INVALID_OPERATION: Invalid operation.
[372:2476:0123/094655.119:ERROR:gl_utils.cc(278)] : [.Offscreen-For-WebGL-0000028792B78400] GL_INVALID_OPERATION: Invalid operation.
[372:2476:0123/094655.142:ERROR:gl_utils.cc(278)] : [.Offscreen-For-WebGL-0000028792B78400] GL_INVALID_OPERATION: Invalid operation.
[372:2476:0123/094655.164:ERROR:gl_utils.cc(278)] : [.Offscreen-For-WebGL-0000028792B78400] GL_INVALID_OPERATION: Invalid operation.
[372:2476:0123/094655.186:ERROR:gl_utils.cc(278)] : [.Offscreen-For-WebGL-0000028792B78400] GL_INVALID_OPERATION: Invalid operation.
[372:2476:0123/094655.209:ERROR:gl_utils.cc(278)] : [.Offscreen-For-WebGL-0000028792B78400] GL_INVALID_OPERATION: Invalid operation.
[372:2476:0123/094655.231:ERROR:gl_utils.cc(278)] : [.Offscreen-For-WebGL-0000028792B78400] GL_INVALID_OPERATION: Invalid operation.
[372:2476:0123/094655.253:ERROR:gl_utils.cc(278)] : [.Offscreen-For-WebGL-0000028792B78400] GL_INVALID_OPERATION: Invalid operation.
[372:2476:0123/094655.276:ERROR:gl_utils.cc(278)] : [.Offscreen-For-WebGL-0000028792B78400] GL_INVALID_OPERATION: Invalid operation.
[372:2476:0123/094655.298:ERROR:gl_utils.cc(278)] : [.Offscreen-For-WebGL-0000028792B78400] GL_INVALID_OPERATION: Invalid operation.
[372:2476:0123/094655.320:ERROR:gl_utils.cc(278)] : [.Offscreen-For-WebGL-0000028792B78400] GL_INVALID_OPERATION: Invalid operation.
[372:2476:0123/094655.343:ERROR:gl_utils.cc(278)] : [.Offscreen-For-WebGL-0000028792B78400] GL_INVALID_OPERATION: Invalid operation.




 
Labels: VR-Desktop OS-Windows
Updated : I've tested RX480 and HD630 myself, and find they all works with their latest driver. So only GTX1060 generate these errors. Sorry for the wrong reproduce message.
If it helps narrow things down (looks as if 1060 may be part of the issue?)
https://webvr.info/samples/03-vr-presentation.html presenting correctly (except only 45fps) (Nvidia driver 390.65, Version 66.0.3328.2 (Official Build) canary (64-bit), 1080, Vive, Windows 10,  Dec 5th SteamVR)

Comment 4 by tiborg@chromium.org, Jan 23 2018

Cc: -billorr@chromium.org tiborg@chromium.org
Owner: billorr@chromium.org
Status: Assigned (was: Untriaged)
Not sure what the milestone and prio for this is. Bill, please add.

Comment 5 Deleted

Updated : 
two things updated.
1. The issue could be reproduced on i7-7700, with GTX1060, GTX 1080, HD630. And I don't test RX480 now. But it couldn't be reproduced on i3(that's why I got different conclusion above)
2. It's a regression and I bisect. And here's the result
https://chromium.googlesource.com/chromium/src/+log/8b44f53c3173fca3d2e66bde791b97de5b7826f6..746227693eb6d8e8567c5e04d2d38f3efd250ee5
plus angle patch https://chromium.googlesource.com/angle/angle/+/ceffd20ce2d6ce3d5e92c7c3792af97bfa23fdf2
Further narrow down is in progress.

Comment 7 by ptr....@gmail.com, Jan 24 2018

I appear to have the same issue with GTX1080, i7-6700K.
SteamVR just updated to Jan 9th version (not sure why it hadn't updated before).
Chrome updated to Version 66.0.3330.1 (Official Build) canary SyzyASan (32-bit)  (not sure why the update took me from 64 bit to 32 bit)
Nvidia still 390.65
i7-6700

Still working.

Version 66.0.3330.0 (Official Build) canary (64-bit); still working.
(If generating too many comments is an issue let me know; I hope they are helping narrow it down.)

I use lots of extensions in my regular Chrome but none in Canary apart from a few Google ones for Drive and Docs that it seems to have installed automatically.
I believe this is related to the GPU command decoder used. Try passing commandline flags to Chrome:  --use-cmd-decoder=validating appears to work, while --use-cmd-decoder=passthrough shows black in the headset when presenting sample 03.

The validating command decoder handles some format conversions in the GPU process when processing webgl draw commands, while the passthrough just passes the commands to ANGLE, and depends on the validation that ANGLE does internally.

(I ran Chrome Canary from C:\Users\<username>\AppData\Local\Google\Chrome SxS\Application with those arguments).



We try to copy the WebGL canvas contents to a D3D texture that can be shared cross-process.  That copy is failing because ANGLE thinks the formats of the two images aren't compatible (RGBA destination, RGB source).

00 libglesv2!gl::Format::EquivalentForBlit
01 libglesv2!gl::ValidateBlitFramebufferANGLE
02 libglesv2!gl::BlitFramebufferANGLE
03 libglesv2!glBlitFramebufferANGLE
04 gl_wrapper!gl::GLApiBase::glBlitFramebufferFn
05 gles2!gpu::gles2::GLES2DecoderPassthroughImpl::DoBlitFramebufferCHROMIUM
06 gles2!gpu::gles2::GLES2DecoderPassthroughImpl::HandleBlitFramebufferCHROMIUM
07 gles2!gpu::gles2::GLES2DecoderPassthroughImpl::DoCommandsImpl<0>
08 gles2!gpu::gles2::GLES2DecoderPassthroughImpl::DoCommands
09 gpu!gpu::CommandBufferService::Flush
0a gpu_ipc_service!gpu::CommandBufferStub::OnAsyncFlush
0b gpu_ipc_service!base::DispatchToMethodImpl<gpu::CommandBufferStub *,void (gpu::CommandBufferStub::*)(int, unsigned int, bool) __attribute__((thiscall)),std::tuple<int,unsigned int,bool>,0,1,2>
0c gpu_ipc_service!base::DispatchToMethod<gpu::CommandBufferStub *,void (gpu::CommandBufferStub::*)(int, unsigned int, bool) __attribute__((thiscall)),std::tuple<int,unsigned int,bool> >
0d gpu_ipc_service!IPC::DispatchToMethod<gpu::CommandBufferStub,void (gpu::CommandBufferStub::*)(int, unsigned int, bool) __attribute__((thiscall)),void,std::tuple<int,unsigned int,bool> >
0e gpu_ipc_service!IPC::MessageT<GpuCommandBufferMsg_AsyncFlush_Meta,std::tuple<int,unsigned int,bool>,void>::Dispatch<gpu::CommandBufferStub,gpu::CommandBufferStub,void,void (gpu::CommandBufferStub::*)(int, unsigned int, bool) __attribute__((thiscall))>
0f gpu_ipc_service!gpu::CommandBufferStub::OnMessageReceived
10 ipc!IPC::MessageRouter::RouteMessage
11 gpu_ipc_service!gpu::GpuChannel::HandleMessageHelper
12 gpu_ipc_service!gpu::GpuChannel::HandleMessage
13 gpu_ipc_service!base::internal::FunctorTraits<void (gpu::GpuChannel::*)(const IPC::Message &) __attribute__((thiscall)),void>::Invoke<base::WeakPtr<gpu::GpuChannel>,IPC::MessageT<GpuCommandBufferMsg_AsyncFlush_Meta> >
14 gpu_ipc_service!base::internal::InvokeHelper<1,void>::MakeItSo<void (gpu::GpuChannel::*)(const IPC::Message &) __attribute__((thiscall)),base::WeakPtr<gpu::GpuChannel>,IPC::MessageT<GpuCommandBufferMsg_AsyncFlush_Meta> >
15 gpu_ipc_service!base::internal::Invoker<base::internal::BindState<void (gpu::GpuChannel::*)(const IPC::Message &) __attribute__((thiscall)),base::WeakPtr<gpu::GpuChannel>,IPC::MessageT<GpuCommandBufferMsg_AsyncFlush_Meta> >,void ()>::RunImpl<void (gpu::GpuChannel::*)(const IPC::Message &) __attribute__((thiscall)),std::tuple<base::WeakPtr<gpu::GpuChannel>,IPC::MessageT<GpuCommandBufferMsg_AsyncFlush_Meta> >,0,1>
16 gpu_ipc_service!base::internal::Invoker<base::internal::BindState<void (gpu::GpuChannel::*)(const IPC::Message &) __attribute__((thiscall)),base::WeakPtr<gpu::GpuChannel>,IPC::MessageT<GpuCommandBufferMsg_AsyncFlush_Meta> >,void ()>::RunOnce
17 gpu!base::OnceCallback<void ()>::Run
18 gpu!gpu::Scheduler::RunNextTask
19 gpu!base::internal::FunctorTraits<void (gpu::Scheduler::*)() __attribute__((thiscall)),void>::Invoke<const base::WeakPtr<gpu::Scheduler> &>
1a gpu!base::internal::InvokeHelper<1,void>::MakeItSo<void (gpu::Scheduler::*const &)() __attribute__((thiscall)),const base::WeakPtr<gpu::Scheduler> &>
1b gpu!base::internal::Invoker<base::internal::BindState<void (gpu::Scheduler::*)() __attribute__((thiscall)),base::WeakPtr<gpu::Scheduler> >,void ()>::RunImpl<void (gpu::Scheduler::*const &)() __attribute__((thiscall)),const std::tuple<base::WeakPtr<gpu::Scheduler> > &,0>
*** WARNING: Unable to verify checksum for C:\src\chromium2\src\out\Debug\base.dll
1c gpu!base::internal::Invoker<base::internal::BindState<void (gpu::Scheduler::*)() __attribute__((thiscall)),base::WeakPtr<gpu::Scheduler> >,void ()>::Run
1d base!base::OnceCallback<void ()>::Run
1e base!base::debug::TaskAnnotator::RunTask
1f base!base::internal::IncomingTaskQueue::RunTask
20 base!base::MessageLoop::RunTask
21 base!base::MessageLoop::DeferOrRunPendingTask
22 base!base::MessageLoop::DoWork
23 base!base::MessagePumpDefault::Run
24 base!base::MessageLoop::Run
*** WARNING: Unable to verify checksum for C:\src\chromium2\src\out\Debug\content.dll
25 base!base::RunLoop::Run
26 content!content::GpuMain
27 content!content::RunNamedProcessTypeMain
28 content!content::ContentMainRunnerImpl::Run
*** WARNING: Unable to verify checksum for C:\src\chromium2\src\out\Debug\embedder.dll
29 content!content::ContentServiceManagerMainDelegate::RunEmbedderProcess
2a embedder!service_manager::Main
*** WARNING: Unable to verify checksum for C:\src\chromium2\src\out\Debug\chrome.dll
2b content!content::ContentMain
*** WARNING: Unable to verify checksum for chrome.exe
2c chrome_10670000!ChromeMain
2d chrome!MainDllLoader::Launch
2e chrome!wWinMain
2f chrome!invoke_main
30 chrome!__scrt_common_main_seh
31 chrome!__scrt_common_main
32 chrome!wWinMainCRTStartup
33 KERNEL32!BaseThreadInitThunk
34 ntdll_77370000!__RtlUserThreadStart
35 ntdll_77370000!_RtlUserThreadStart


As a temporary workaround, running with --use-cmd-decoder=validating appears to fix the issue (going through a different ANGLE path for copying the image).
With double checks, this patch https://chromium.googlesource.com/angle/angle/+/ceffd20ce2d6ce3d5e92c7c3792af97bfa23fdf2
trigger this issue(use passthrough command buffer black screen).

Interesting.  As a matter of side interest, how do two very similarly setup machines calling Chrome Canary without any flags manage to get launched with different md-decoder options?  Or must there be some other difference between the machine setups?

Comment 14 by ptr....@gmail.com, Jan 25 2018

--use-cmd-decoder=validating does indeed allow presenting to the VR display here.
#13: There is no difference between the machine setups.  This is an experimental feature set by server config.

I have the fix out for review.  https://chromium-review.googlesource.com/c/chromium/src/+/892091

It should be in Canary within the next couple days.
Project Member

Comment 16 by bugdroid1@chromium.org, Jan 31 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/9c0c4b5f603dab118934d27979507a4405c9f1e1

commit 9c0c4b5f603dab118934d27979507a4405c9f1e1
Author: Bill Orr <billorr@chromium.org>
Date: Wed Jan 31 07:36:07 2018

Fix black screen when presenting on some WebVR pages on Windows

The issue here was that glBlitFramebufferANGLE fails when the color
formats of the source and destination image aren't compatible.  The
color format for pBufferSurfaces wrapping dxgi textures has changed to
report the underlying dxgi format instead of the egl config used to
create the surface, so we were sometimes failing to copy the WebGL
contents onto our cross-process-sharing texture.

The fix is to use CopySubTextureCHROMIUM instead of blitting
framebuffers. This API won't create new destination textures, and will
convert formats for us.  It also has the benefit of handling flipping
y-direction for us, so we could avoid a copy.

BUG= 804628 

Change-Id: Ibc55dd092bacbdd1f751adb0b6a854f58e64e22b
Reviewed-on: https://chromium-review.googlesource.com/892091
Reviewed-by: Klaus Weidner <klausw@chromium.org>
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Commit-Queue: Bill Orr <billorr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#533224}
[modify] https://crrev.com/9c0c4b5f603dab118934d27979507a4405c9f1e1/third_party/WebKit/Source/platform/graphics/GpuMemoryBufferImageCopy.cpp
[modify] https://crrev.com/9c0c4b5f603dab118934d27979507a4405c9f1e1/third_party/WebKit/Source/platform/graphics/GpuMemoryBufferImageCopy.h

Status: Fixed (was: Assigned)
Labels: Test-Manual
Labels: Test-Manual
I'm seeing a black screen again:

Google Chrome	66.0.3342.0 (Official Build) canary (64-bit) (cohort: Clang-64)
Revision	7a08be580eb458170d11b34a8de66fe08db41bc5-refs/heads/master@{#534887}

Investigating, but I will file a new bug if this turns out to be a different issue.
Could reproduce it with command buffer(--use-cmd-decoder=validating) on webvr.info/samples/03-vr-presentation.html. pass through command buffer works fine.
Labels: M-66
Project Member

Comment 23 by bugdroid1@chromium.org, Feb 9 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/134756fec9112709f082c0895fe8921142797f82

commit 134756fec9112709f082c0895fe8921142797f82
Author: Bill Orr <billorr@chromium.org>
Date: Fri Feb 09 04:11:43 2018

Fix black screen when presenting on some WebVR pages on Windows

The previous fix was incomplete - it fixed the passthrough command buffer,
but doesn't work with the validating command buffer.  This has been
tested with both command buffers.

The issue is that the validating command buffer's implementation of
CopySubTextureCHROMIUM allows conversions RGB->RGBA, but not RGBA->RGB,
while the passthrough is ultimately ignoring the fact that the destination
was requesting to be RGB.

BUG= 804628 

Change-Id: Ia3c900c2d4a73af832c592964e67f33f93dbbd2d
Reviewed-on: https://chromium-review.googlesource.com/910450
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Commit-Queue: Bill Orr <billorr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#535631}
[modify] https://crrev.com/134756fec9112709f082c0895fe8921142797f82/third_party/WebKit/Source/platform/graphics/GpuMemoryBufferImageCopy.cpp

Labels: -Test-Manual Test-TestPlan
Components: Internals>XR
Components: Blink>WebXR

Sign in to add a comment