New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 682815 link

Starred by 2 users

Issue metadata

Status: Assigned
Owner:
OOO until 2019-01-24
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Linux
Pri: 2
Type: Bug

Blocking:
issue 662644


Show other hotlists

Hotlists containing this issue:
webgl-conformance-all


Sign in to add a comment

deqp/functional/gles3/multisample.html fails on Linux NVidia Quadro 600

Project Member Reported by zmo@chromium.org, Jan 19 2017

Issue description

Tested with driver 367.57

367.57

failed: multisample.fbo_max_samples.num_samples_polygon: Failure: Number of distinct colors detected is lower than sample count+1
failed: multisample.fbo_max_samples.num_samples_line: Failure: Number of distinct colors detected is lower than sample count+1
failed: multisample.fbo_max_samples.depth: Failure: Number of distinct colors detected is lower than sample count+1
 

Comment 1 by zmo@chromium.org, Jan 19 2017

Disabled these cases in 2.0.0 snapshot:

https://github.com/KhronosGroup/WebGL/pull/2268

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

Cc: zmo@chromium.org
The issue doesn't repro on a Pascal generation GPU. I didn't verify this beyond that yet, but I'd expect it to be fixed in all generations after Fermi.

zmo, do you have a bit more information about this: 
What is the max sample count on Quadro 600 you're seeing?
Could you attach a screenshot of the failing test so we can evaluate how much it's off from expected quality?

It might be the most reasonable to work around the issue by clamping max samples to 4 on Fermi generation HW, or just leave this as WontFix if it's not affecting any newer GPU generations.

Comment 3 by zmo@chromium.org, Jun 1 2017

The max sample is 64.  Let me get some screenshot for you.

Comment 4 by zmo@chromium.org, Jun 1 2017

multisample.pdf
1.9 MB Download

Comment 5 by oetu...@nvidia.com, Jun 1 2017

It seems that the test isn't actually able to handle as high sample counts as the Quadro driver supports. If you have 65 different gray levels between 0 and 255, at least two of them will be set apart by only 3. And the tolerance the test uses to check if two colors are unique is 3. So it can't detect as many unique colors as 64-sample antialiasing should generate.

There are also other ways the test might be flawed for this high sample counts - the number of iterations it does may not be enough for example, depending on how the sampling pattern aligns with the geometry.

I'll submit a patch to try to fix this by adjusting the tolerance depending on the sample count being tested. If this is not enough, we could try to increase the iteration count, or limit the maximum number of samples that the test tests to 32. 

If we can't cover more than 32 samples reliably in the test, we could also consider limiting max samples in the WebGL implementation to 16 or 32 - according to webglstats 99.6% of current systems don't support more samples than 16 anyway.

Comment 6 by oetu...@nvidia.com, Jun 1 2017

First shot at fixing the test: https://github.com/KhronosGroup/WebGL/pull/2412

Mo, can you review that and verify if it's enough to make the test pass on Quadro?

Comment 7 by zmo@chromium.org, Jun 5 2017

I verified, with Olli's patch to the test, deqp/functional/gles3/multisample.html now passes on my Linux NVidia (used to fail).

Let me roll webgl conformance tests and remove the test expectation.

Thanks Olli for getting to the bottom of this.
Project Member

Comment 8 by bugdroid1@chromium.org, Jun 6 2017

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

commit f20319f1dbca0341bb7191e46dab578dc3d1c61c
Author: zmo <zmo@chromium.org>
Date: Tue Jun 06 23:22:16 2017

Roll WebGL 9422979..331fe3a

https://chromium.googlesource.com/external/khronosgroup/webgl.git/+log/9422979..331fe3a

BUG=682815
TEST=bots
TBR=kbr@chromium.org
NOTRY=true

CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.win:win_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.android:android_optional_gpu_tests_rel

Review-Url: https://codereview.chromium.org/2924923002
Cr-Commit-Position: refs/heads/master@{#477459}

[modify] https://crrev.com/f20319f1dbca0341bb7191e46dab578dc3d1c61c/DEPS
[modify] https://crrev.com/f20319f1dbca0341bb7191e46dab578dc3d1c61c/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py
[modify] https://crrev.com/f20319f1dbca0341bb7191e46dab578dc3d1c61c/content/test/gpu/gpu_tests/webgl_conformance_revision.txt

Comment 9 by oetu...@nvidia.com, Jun 21 2017

I recently landed a fix for exposing non-conformant multisampling modes to ANGLE: https://chromium-review.googlesource.com/c/525515/

I'm still planning to add more test coverage for this to WebGL tests, but the issue should be fixed in the next ANGLE roll.

Comment 10 by kbr@chromium.org, Jun 21 2017

Status: Started (was: Assigned)
Fantastic! Thanks Olli.

Project Member

Comment 11 by bugdroid1@chromium.org, Jun 22 2017

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

commit d0db75d13114ecc183ef741853b4475fe8d132ac
Author: Yuly Novikov <ynovikov@chromium.org>
Date: Thu Jun 22 18:23:32 2017

Roll ANGLE 12b0b39..579d8c7

https://chromium.googlesource.com/angle/angle.git/+log/12b0b39..579d8c7

BUG=chromium:727671,728226,chromium:682815,731089,chromium:697758

TBR=jmadill@chromium.org

TEST=bots

CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.win:win_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.android:android_optional_gpu_tests_rel

Change-Id: Iccc5538b77641dce7ecfb9adb25930b9d916806b
Reviewed-on: https://chromium-review.googlesource.com/545056
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Cr-Commit-Position: refs/heads/master@{#481610}
[modify] https://crrev.com/d0db75d13114ecc183ef741853b4475fe8d132ac/DEPS

Unfortunately, https://chromium-review.googlesource.com/525515 crashes on NVIDIA Shield TV, so I'm reverting it.
https://build.chromium.org/p/chromium.gpu.fyi/builders/Android%20Release%20%28NVIDIA%20Shield%20TV%29/builds/1816

Stack Trace:
  RELADDR   FUNCTION                                                                                                                                                                                                                                                                                                                        FILE:LINE
  v------>  rx::nativegl_gl::GenerateTextureFormatCaps(rx::FunctionsGL const*, unsigned int)                                                                                                                                                                                                                                                /b/c/b/Android_Release__NVIDIA_Shield_TV_/src/third_party/angle/src/libANGLE/renderer/gl/renderergl_utils.cpp:135
  0000000000119998  rx::nativegl_gl::GenerateCaps(rx::FunctionsGL const*, rx::WorkaroundsGL const&, gl::Caps*, gl::TextureCapsMap*, gl::Extensions*, gl::Version*)                                                                                                                                                                                  /b/c/b/Android_Release__NVIDIA_Shield_TV_/src/third_party/angle/src/libANGLE/renderer/gl/renderergl_utils.cpp:224
  00000000001027d4  rx::RendererGL::ensureCapsInitialized() const                                                                                                                                                                                                                                                                                   /b/c/b/Android_Release__NVIDIA_Shield_TV_/src/third_party/angle/src/libANGLE/renderer/gl/RendererGL.cpp:629
  v------>  rx::RendererGL::getNativeCaps() const                                                                                                                                                                                                                                                                                           /b/c/b/Android_Release__NVIDIA_Shield_TV_/src/third_party/angle/src/libANGLE/renderer/gl/RendererGL.cpp:636
  0000000000100ec4  rx::RendererGL::RendererGL(rx::FunctionsGL const*, egl::AttributeMap const&)                                                                                                                                                                                                                                                    /b/c/b/Android_Release__NVIDIA_Shield_TV_/src/third_party/angle/src/libANGLE/renderer/gl/RendererGL.cpp:177
  00000000000e3900  rx::DisplayGL::initialize(egl::Display*)                                                                                                                                                                                                                                                                                        /b/c/b/Android_Release__NVIDIA_Shield_TV_/src/third_party/angle/src/libANGLE/renderer/gl/DisplayGL.cpp:36
  000000000011c8ac  rx::DisplayAndroid::initialize(egl::Display*)                                                                                                                                                                                                                                                                                   /b/c/b/Android_Release__NVIDIA_Shield_TV_/src/third_party/angle/src/libANGLE/renderer/gl/egl/android/DisplayAndroid.cpp:121
  0000000000077b80  egl::Display::initialize()                                                                                                                                                                                                                                                                                                      /b/c/b/Android_Release__NVIDIA_Shield_TV_/src/third_party/angle/src/libANGLE/Display.cpp:452
  000000000003a6e8  egl::Initialize(void*, int*, int*)                                                                                                                                                                                                                                                                                              /b/c/b/Android_Release__NVIDIA_Shield_TV_/src/third_party/angle/src/libGLESv2/entry_points_egl.cpp:88
  0000000000012958  EGLWindow::initializeDisplayAndSurface(OSWindow*)                                                                                                                                                                                                                                                                               /b/c/b/Android_Release__NVIDIA_Shield_TV_/src/third_party/angle/util/EGLWindow.cpp:235
  000000000001249c  EGLWindow::initializeGL(OSWindow*)                                                                                                                                                                                                                                                                                              /b/c/b/Android_Release__NVIDIA_Shield_TV_/src/third_party/angle/util/EGLWindow.cpp:161
  0000000000249394  angle::IsPlatformAvailable(angle::PlatformParameters const&)                                                                                                                                                                                                                                                                    /b/c/b/Android_Release__NVIDIA_Shield_TV_/src/third_party/angle/src/tests/test_utils/angle_test_instantiate.cpp:84
  00000000000e0020  std::__ndk1::vector<angle::PlatformParameters, std::__ndk1::allocator<angle::PlatformParameters> > angle::FilterTestParams<angle::PlatformParameters>(angle::PlatformParameters const*, unsigned long)                                                                                                                          /b/c/b/Android_Release__NVIDIA_Shield_TV_/src/third_party/angle/src/tests/test_utils/angle_test_instantiate.h:33
  00000000000ddf7c  (anonymous namespace)::gtest_AtomicCounterBufferTest_EvalGenerator_()                                                                                                                                                                                                                                                           /b/c/b/Android_Release__NVIDIA_Shield_TV_/src/third_party/angle/src/tests/gl_tests/AtomicCounterBufferTest.cpp:48
  00000000000e0a84  testing::internal::ParameterizedTestCaseInfo<(anonymous namespace)::AtomicCounterBufferTest>::RegisterTests()                                                                                                                                                                                                                   /b/c/b/Android_Release__NVIDIA_Shield_TV_/src/third_party/googletest/src/googletest/include/gtest/internal/gtest-param-util.h:553
  0000000000357ba4  testing::internal::ParameterizedTestCaseRegistry::RegisterTests()                                                                                                                                                                                                                                                               /b/c/b/Android_Release__NVIDIA_Shield_TV_/src/third_party/googletest/src/googletest/include/gtest/internal/gtest-param-util.h:713
  0000000000357b68  testing::internal::UnitTestImpl::RegisterParameterizedTests()                                                                                                                                                                                                                                                                   /b/c/b/Android_Release__NVIDIA_Shield_TV_/src/third_party/googletest/src/googletest/src/gtest.cc:2617
  000000000035c780  testing::internal::UnitTestImpl::PostFlagParsingInit()                                                                                                                                                                                                                                                                          /b/c/b/Android_Release__NVIDIA_Shield_TV_/src/third_party/googletest/src/googletest/src/gtest.cc:4453
  000000000035dbcc  void testing::internal::InitGoogleTestImpl<char>(int*, char**)                                                                                                                                                                                                                                                                  /b/c/b/Android_Release__NVIDIA_Shield_TV_/src/third_party/googletest/src/googletest/src/gtest.cc:5355
  000000000034c508  void testing::internal::InitGoogleMockImpl<char>(int*, char**)                                                                                                                                                                                                                                                                  /b/c/b/Android_Release__NVIDIA_Shield_TV_/src/third_party/googletest/src/googlemock/src/gmock.cc:131
  0000000000249694  main                                                                                                                                                                                                                                                                                                                            /b/c/b/Android_Release__NVIDIA_Shield_TV_/src/gpu/angle_end2end_tests_main.cc:26
  v------>  testing::android::RunTests(_JNIEnv*, base::android::JavaParamRef<_jobject*> const&, base::android::JavaParamRef<_jstring*> const&, base::android::JavaParamRef<_jstring*> const&, base::android::JavaParamRef<_jstring*> const&, base::android::JavaParamRef<_jobject*> const&, base::android::JavaParamRef<_jstring*> const&)  /b/c/b/Android_Release__NVIDIA_Shield_TV_/src/testing/android/native_test/native_test_launcher.cc:131
  000000000035fbe0  Java_org_chromium_native_1test_NativeTest_nativeRunTests                                                                                                                                                                                                                                                                        /b/c/b/Android_Release__NVIDIA_Shield_TV_/src/out/Release/gen/testing/android/native_test/native_test_jni_headers/testing/jni/NativeTest_jni.h:49
  000000000084285c  offset 0x622000                                                                                                                                                                                                                                                                                                                 /data/app/org.chromium.native_test-1/oat/arm64/base.odex

Cc: ynovikov@chromium.org
 Issue 737019  has been merged into this issue.
Project Member

Comment 14 by bugdroid1@chromium.org, Jun 28 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/angle/angle/+/c8a8b84353340374173803ccff9d8635ff92d9c6

commit c8a8b84353340374173803ccff9d8635ff92d9c6
Author: Yuly Novikov <ynovikov@chromium.org>
Date: Wed Jun 28 05:49:26 2017

Revert "Don't expose non-conformant multisampling modes on GL"

This reverts commit 3cd0dd370f08e7126fe19b761206280c64f80cd1.

Reason for revert: crashes on NVIDIA Shield TV
https://build.chromium.org/p/chromium.gpu.fyi/builders/Android%20Release%20%28NVIDIA%20Shield%20TV%29/builds/1816

Original change's description:
> Don't expose non-conformant multisampling modes on GL
> 
> Some NVIDIA GL drivers expose non-conformant multisampling modes. The
> conformance of multisampling modes can be queried using the extension
> NV_internalformat_sample_query. Use it to filter out the
> non-conformant modes from the modes that are exposed by ANGLE.
> 
> The MAX_SAMPLES value and other similar values stored in caps also
> need to be lowered to match the maximum number of samples exposed
> for required formats.
> 
> There seems to be an NVIDIA driver bug related to querying
> STENCIL_INDEX8 multisample format. Work around this by querying
> DEPTH24_STENCIL8 instead.
> 
> There's also some confusion around whether RGB9_E5 should be
> renderable. Once the floating point texture extensions got rolled
> into the core GL spec, it was eventually made clear that RGB9_E5
> is intended not to be renderable. The extension specs that predate
> float textures in the core spec do suggest that it would be
> renderable, but in practice drivers that advertise the extension
> strings don't reliably implement RGB9_E5 as renderable. Solve this
> by disabling it as a renderable format and adding an explanatory
> comment.
> 
> BUG=chromium:682815
> TEST=angle_end2end_tests,
>      dEQP-GLES31.functional.state_query.internal_format.renderbuffer.*
> 
> Change-Id: I2218e3a23ea7b48a0615fea77a91897dc7d5fe9e
> Reviewed-on: https://chromium-review.googlesource.com/525515
> Reviewed-by: Geoff Lang <geofflang@chromium.org>
> Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>

TBR=geofflang@chromium.org,jmadill@chromium.org,cwallez@chromium.org,oetuaho@nvidia.com

# Not skipping CQ checks because original CL landed > 1 day ago.

Bug: chromium:682815
Change-Id: I1ebdf52c3fab1526f5a561ac4c8555e305ef2243
Reviewed-on: https://chromium-review.googlesource.com/551164
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Commit-Queue: Yuly Novikov <ynovikov@chromium.org>

[modify] https://crrev.com/c8a8b84353340374173803ccff9d8635ff92d9c6/src/libANGLE/renderer/gl/FunctionsGL.cpp
[modify] https://crrev.com/c8a8b84353340374173803ccff9d8635ff92d9c6/src/libANGLE/formatutils.h
[modify] https://crrev.com/c8a8b84353340374173803ccff9d8635ff92d9c6/src/libANGLE/renderer/gl/FunctionsGL.h
[modify] https://crrev.com/c8a8b84353340374173803ccff9d8635ff92d9c6/src/libANGLE/Context.cpp
[modify] https://crrev.com/c8a8b84353340374173803ccff9d8635ff92d9c6/src/libANGLE/formatutils.cpp
[modify] https://crrev.com/c8a8b84353340374173803ccff9d8635ff92d9c6/src/libANGLE/renderer/gl/formatutilsgl.cpp
[modify] https://crrev.com/c8a8b84353340374173803ccff9d8635ff92d9c6/src/libANGLE/renderer/gl/renderergl_utils.cpp
[modify] https://crrev.com/c8a8b84353340374173803ccff9d8635ff92d9c6/src/libANGLE/Caps.cpp

Project Member

Comment 15 by bugdroid1@chromium.org, Jul 5 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/angle/angle/+/50c562de05fb9b7800e47c56ee9b4b0cd1a5da43

commit 50c562de05fb9b7800e47c56ee9b4b0cd1a5da43
Author: Olli Etuaho <oetuaho@nvidia.com>
Date: Wed Jul 05 16:12:28 2017

Re-land: Don't expose non-conformant multisampling modes on GL

Re-landing with a fallback for failed internal format queries to work
around issue seen on Shield TV. Also fixed wrong handling of integer
RG formats in isRequiredRenderbufferFormat.

Some NVIDIA GL drivers expose non-conformant multisampling modes. The
conformance of multisampling modes can be queried using the extension
NV_internalformat_sample_query. Use it to filter out the
non-conformant modes from the modes that are exposed by ANGLE.

The MAX_SAMPLES value and other similar values stored in caps also
need to be lowered to match the maximum number of samples exposed
for required formats.

There seems to be an NVIDIA driver bug related to querying
STENCIL_INDEX8 multisample format. Work around this by querying
DEPTH24_STENCIL8 instead.

There's also some confusion around whether RGB9_E5 should be
renderable. Once the floating point texture extensions got rolled
into the core GL spec, it was eventually made clear that RGB9_E5
is intended not to be renderable. The extension specs that predate
float textures in the core spec do suggest that it would be
renderable, but in practice drivers that advertise the extension
strings don't reliably implement RGB9_E5 as renderable. Solve this
by disabling it as a renderable format and adding an explanatory
comment.

BUG=chromium:682815
TEST=angle_end2end_tests,
     dEQP-GLES31.functional.state_query.internal_format.renderbuffer.*

Change-Id: I727f03045a1534d6764b571e6d839243705d25b3
Reviewed-on: https://chromium-review.googlesource.com/551957
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>

[modify] https://crrev.com/50c562de05fb9b7800e47c56ee9b4b0cd1a5da43/src/libANGLE/renderer/gl/FunctionsGL.cpp
[modify] https://crrev.com/50c562de05fb9b7800e47c56ee9b4b0cd1a5da43/src/libANGLE/formatutils.h
[modify] https://crrev.com/50c562de05fb9b7800e47c56ee9b4b0cd1a5da43/src/libANGLE/renderer/gl/FunctionsGL.h
[modify] https://crrev.com/50c562de05fb9b7800e47c56ee9b4b0cd1a5da43/src/libANGLE/Context.cpp
[modify] https://crrev.com/50c562de05fb9b7800e47c56ee9b4b0cd1a5da43/src/libANGLE/formatutils.cpp
[modify] https://crrev.com/50c562de05fb9b7800e47c56ee9b4b0cd1a5da43/src/libANGLE/renderer/gl/formatutilsgl.cpp
[modify] https://crrev.com/50c562de05fb9b7800e47c56ee9b4b0cd1a5da43/src/libANGLE/renderer/gl/renderergl_utils.cpp
[modify] https://crrev.com/50c562de05fb9b7800e47c56ee9b4b0cd1a5da43/src/libANGLE/Caps.cpp

Project Member

Comment 16 by bugdroid1@chromium.org, Jul 10 2017

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

commit b891953a093ee5ab2f78df398322e6cf59c7c2e6
Author: Geoff Lang <geofflang@chromium.org>
Date: Mon Jul 10 16:25:36 2017

Roll ANGLE 27a6063..70c95fa

https://chromium.googlesource.com/angle/angle.git/+log/27a6063..70c95fa

BUG= chromium:739448 , chromium:731324 ,:angleproject:1644,chromium:682815

TBR=jmadill@chromium.org

TEST=bots

CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.win:win_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.android:android_optional_gpu_tests_rel

Change-Id: I9ed559801bfbb7cada2fef863096047f33437703
Reviewed-on: https://chromium-review.googlesource.com/565051
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Cr-Commit-Position: refs/heads/master@{#485290}
[modify] https://crrev.com/b891953a093ee5ab2f78df398322e6cf59c7c2e6/DEPS

Status: Fixed (was: Started)
Cleaning up some old bugs, this bug already has a fix in place.
Owner: ----
Status: Available (was: Fixed)
conformance2/rendering/multisampling-fragment-evaluation.html is still failing on Linux Nvidia and the test suppression lists this bug number. Some more investigation needs to happen here.
Hmm. Olli's fix was in ANGLE, so was this fixed on the passthrough command decoder only?

Blocking: 662644
Labels: webgl-conformance
Labels: GPU-NVidia
Cc: jhelfe...@nvidia.com
Adding James Helferty (jhelferty@nvidia.com) to CC for WebGL conformance issues on Nvidia GPUs.
Owner: kbr@chromium.org
Status: Assigned (was: Available)

Comment 25 by kkinnu...@nvidia.com, Jan 17 (6 days ago)

https://www.khronos.org/registry/webgl/sdk/tests/conformance2/rendering/multisampling-fragment-evaluation.html
Just some observations:
Works on Windows Chrome/OpenGL and Chrome/D3D11, GTX 1080, public driver 416.34
Works on Android Shield TV public 7.2.2

TODO: Check on Linux, Check on Quadro

Specifically Quadro 600 newest available public driver:
Version:	R375 U11 (377.83)  WHQL
Release Date:	2018.1.18

Comment 26 by kbr@chromium.org, Jan 17 (6 days ago)

Thanks Kimmo for confirming. We'll attempt to re-enable this test everywhere.

Sign in to add a comment