Merge or Use instance and Native render make no difference with Chrome plus Integrated Graphics Card

Try to run the : webgl_instancing_performance
I found that when use the ThreeJS to render stuff no matter if i just render in native drawcalls or merge them to render once, or use instance rendering, the FPS is almost that same, sometimes the native mode is even faster with chrome + any integrated graphics card.

The graphics card I use is Inter(R) HD Graphics 630(desktop) and Intel® Iris® Plus Graphics 655(macbook pro)

If I tested on Discrete graphics then i can see the difference, which merged > instance > native.

If I use the same integrated card + firefox, then I can see the FPS difference: merged > instance > native, too , So I am sure it’s Chromes’ issue.

However the key problems is, the FPS in chrome is faster than firefox with integrated card!.
for chrome maybe it’s native(27) > merged(25) = instance(25), but for firefox it’s merged(22) > instance(20) > native(18), so basically chrome performs better than firefox but not showing the effect of any merge drawall effects.

I suppose it’s not a bug, but chrome did something with Integrated Graphics Card inside but I can not understand.

If merge or instance can not make a big difference, then how can we optimize the rendering speed with Chrome.

I am sure this is not threejs’ problem, just any idea what’s the root cause?

Any help? Thanks a lot

1 Like

I’ve noticed this with this example as well on my mobile device with adreno 506 GPU. I’ve tested quite a few count values, and there is no clear difference between instanced, merged, or naive. If anything, instanced is the slowest of the three but only by 1 or 2 fps.

thanks to the reply, yeah, it’s quit confusing why this happens, what did chrome do with instance or merge , so wired

Hmm, just checked it on Firefox (Android) and the difference is huge. With a count of 1000, Chrome gets around 11fps for all three settings.

However, Firefox is around 39fps for instanced, 49fps for merged and 25fps for naive.

It’s indeed strange that the naive approach performs better in Chrome :thinking:

The result in Firefox seems to perform better. With 10.000 objects, I get 36 FPS for instanced and merged settings. 26 FPS with the naive approach. Tested on macOS.

Um, maybe we should report this here: Monorail - chromium - An open-source project to help move the web forward. - Monorail

I’m wondering if this might have something to do with the demo itself, in addition to the browser and GPU… the “naive” approach performs better than I’d expect in this example.

1 Like

Using Opera (Windows 7) I get 43-47fps instanced, 40-45fps merged, 40-47fps naive

without changing anything in the code, the FPS works as expected on firefox or other browsers, so if there is nothing THRES.JS process chrome differently, it should be the browser’s bug?

yeah, i did here.
https://bugs.chromium.org/p/chromium/issues/detail?id=1043925
not sure if chrome is gonna fix this. -_-!!!

it’s possible for you to add your graphics card type in the link?
https://bugs.chromium.org/p/chromium/issues/detail?id=1043925

the feedback from the chrome member seems like to say it’s the card’s problem…

I’m sorry but I think in chromium issue, your “native” should be “naive”. This may cause some confusings.

I tested this on my laptop, latest chrome beta 81, GTX 970m. I’m not sure if this configuration was giving problems before, but now there’s a big difference between naive and the other two.
Naive is much slower, as expected.

I think this demo needs a higher max count:

https://threejs.org/examples/webgl_instancing_performance

Even at 10,000 objects I get 60fps with both merged and instanced, so there’s no way to see which is better. Naive is about 30fps.

It would be good if the max went up to 50,000 or so.

1 Like

Yes, I tested it on my AMD desktop and it works as expectation. Instance has better performance than Naive. But for Intel UHD620 on my laptop, the issue can be reproduced. So as https://bugs.chromium.org/p/chromium/issues/detail?id=1043925 said, it maybe a Intel specific issue?

I noticed this on my mobile as well which has adreno 506 GPU.

Nice catch. Can you provide this to 1043925 - chromium - An open-source project to help move the web forward. - Monorail? I think this will help google guys to root cause it :slight_smile:

What kind of turn around do they have for addressing issues such as this? I’m super curious what the diagnosis will be.

But I have tested this on my intel card, chrome has this issue, but Firefox is fine, they both use Angle. So why Firefox is ok but chrome is wrong? Just so wired

Sorry for the spelling issue

I actually wasn’t really expecting any major FPS difference between instancing and merged, just a very different memory footprint. What do you see at 50k instances? I’m curious if that’d be consistent across different mesh sizes and devices.