Allow ANGLE to run ES3 on D3D feature level 10.0 hardware
Categories
(Core :: Graphics: WebRender, enhancement, P3)
Tracking
()
Tracking | Status | |
---|---|---|
firefox84 | --- | fixed |
People
(Reporter: jrmuizel, Assigned: jrmuizel)
References
(Blocks 1 open bug)
Details
Attachments
(6 files)
(deleted),
patch
|
Details | Diff | Splinter Review | |
(deleted),
patch
|
Details | Diff | Splinter Review | |
(deleted),
text/x-phabricator-request
|
Details | |
(deleted),
text/x-phabricator-request
|
Details | |
(deleted),
text/x-phabricator-request
|
Details | |
(deleted),
text/x-phabricator-request
|
Details |
ANGLE currently requires 10.1 but we don't need any of the features that require 10.1. It should be possible to force ANGLE to run on 10.0 hardware
Updated•5 years ago
|
Assignee | ||
Comment 1•5 years ago
|
||
Assignee | ||
Comment 2•5 years ago
|
||
I tried out this patch and it seemed to work fine. However, we can't land it as is because it would expose WebGL2 on devices where ANGLE doesn't really support ES3.
Some options:
- Maintain this in our copy and detect 10_0 devices and avoid exposing WebGL2 on them.
- Add something to ANGLE that lets us opt-in to ES3 on 10_0 devices.
- Something else?
Jeff do you have any thoughts on how to proceed?
Assignee | ||
Updated•5 years ago
|
Comment 3•4 years ago
|
||
We should explicitly hand ANGLE a d3d11 device with EGL_ANGLE_device_creation_d3d111 and add a way to force it to accept/handle FL 10_0 devices.
Comment 4•4 years ago
|
||
I have tried this on my DirectX 10.0 Device (see about:support) and it feels anecdotally equivalent in performance compared to Advanced Layers, except for video playback performance which is significantly slower compared to Advanced Layers. DirectComposition and WEBRENDER_PARTIAL seem to be working as well.
I had to manually enable WR so I guess an update of the blocklist/allowlist will also be required?
Comment 5•4 years ago
|
||
I tested this again with the direct composition work for video playback mostly finished, and this has greatly improved performance, even for worst case scenarios like 720p60 videos on this device, e.g. https://www.youtube.com/watch?v=rql_F8H3h9E that includes constant large movements between the frames. The device has a 1280x800
display and a NVIDIA GeForce 8600M GS.
Using "Stats for nerds" on YouTube on https://www.youtube.com/watch?v=rql_F8H3h9E with h264ify to force h264, I measured:
- between 27/7508 and 143/7487 droppped frames using the try push above over several runs
- 132/7497 on 2020-10-28 Nightly with Advanced Layers
- 49/7488 dropped frames on 82.0.2 Advanced layers
Setting gfx.webrender.dcomp-video-overlay-win
to true
yielded 85/7543 dropped frames but this might just be margin of error improvements and might require more measurements.
Assignee | ||
Comment 6•4 years ago
|
||
For reference the commit to disable ES3 on 10.0 hardware was: https://chromium.googlesource.com/angle/angle/+/34106e7a26.
The reason had to do with multisampling shaders which isn't something we need.
Comment 7•4 years ago
|
||
I agree, we can probably just pass an FL10_0 device directly, possibly without any angle changes needed.
Assignee | ||
Comment 8•4 years ago
|
||
Assignee | ||
Comment 9•4 years ago
|
||
GetPlatformDisplay takes a list of EGLAttrib instead of EGLInt. This is needed
if we want to pass EGL_FEATURE_OVERRIDES_ENABLED_ANGLE.
Assignee | ||
Comment 10•4 years ago
|
||
We set the feature flag when creating the EGL display. This lets us run
WebRender on devices that only support D3D 10.0
Assignee | ||
Comment 11•4 years ago
|
||
Comment 12•4 years ago
|
||
Comment 13•4 years ago
|
||
Comment 14•4 years ago
|
||
Comment 15•4 years ago
|
||
Comment 16•4 years ago
|
||
Comment 17•4 years ago
|
||
bugherder |
https://hg.mozilla.org/mozilla-central/rev/c843f2ab2d12
https://hg.mozilla.org/mozilla-central/rev/ac20c858514d
https://hg.mozilla.org/mozilla-central/rev/f1b1b1e0959b
https://hg.mozilla.org/mozilla-central/rev/881578b6760d
https://hg.mozilla.org/mozilla-central/rev/a436ebd267fe
Description
•