Closed Bug 1480552 Opened 6 years ago Closed 6 years ago

sort out D3D requirements for aarch64 windows

Categories

(Core :: Graphics, enhancement, P3)

ARM64
Windows
enhancement

Tracking

()

RESOLVED FIXED
mozilla64
Tracking Status
firefox64 --- fixed

People

(Reporter: froydnj, Assigned: froydnj)

References

(Blocks 1 open bug)

Details

(Whiteboard: [gfx-noted])

Attachments

(1 file)

I had to supply MOZ_D3D_CPU_SUFFIX with an interesting value, or configure would yell at me.  I couldn't find an arm64 d3dcompiler.dll--it's possible I didn't have the right packages installed--so I temporarily went with the x86-64 one.

Do we redistribute this library?  What are our options if we can't get a d3dcompiler.dll (and any supporting infrastructure) for aarch64?
Flags: needinfo?(bas)
Priority: -- → P3
Whiteboard: [gfx-noted]
(In reply to Nathan Froyd [:froydnj] from comment #0)
> I had to supply MOZ_D3D_CPU_SUFFIX with an interesting value, or configure
> would yell at me.  I couldn't find an arm64 d3dcompiler.dll--it's possible I
> didn't have the right packages installed--so I temporarily went with the
> x86-64 one.
> 
> Do we redistribute this library?  What are our options if we can't get a
> d3dcompiler.dll (and any supporting infrastructure) for aarch64?

Hrm, this is used by ANGLE and probably best answered by Jeff Gilbert.

This function https://docs.microsoft.com/en-us/windows/desktop/direct3dhlsl/d3dcompile2, is suggested for UWP, so it would certainly suggest it's available on ARM.

Outside of WebGL/ANGLE the gfx shaders are offline compiled, so I sadly don't know that much more about it.
Flags: needinfo?(bas)
(In reply to Bas Schouten (:bas.schouten) from comment #1)
> (In reply to Nathan Froyd [:froydnj] from comment #0)
> > I had to supply MOZ_D3D_CPU_SUFFIX with an interesting value, or configure
> > would yell at me.  I couldn't find an arm64 d3dcompiler.dll--it's possible I
> > didn't have the right packages installed--so I temporarily went with the
> > x86-64 one.
> > 
> > Do we redistribute this library?  What are our options if we can't get a
> > d3dcompiler.dll (and any supporting infrastructure) for aarch64?
> 
> Hrm, this is used by ANGLE and probably best answered by Jeff Gilbert.
> 
> This function
> https://docs.microsoft.com/en-us/windows/desktop/direct3dhlsl/d3dcompile2,
> is suggested for UWP, so it would certainly suggest it's available on ARM.
> 
> Outside of WebGL/ANGLE the gfx shaders are offline compiled, so I sadly
> don't know that much more about it.

The same questions to jgilbert, then.  I did notice that MOZ_D3DCOMPILER_VISTA_DLL shows up in our packaging manifests, so I guess we do redistribute it to use at runtime?
Flags: needinfo?(jgilbert)
ANGLE requires a d3dcompiler dll to live-compile shaders for at least WebGL.

Windows 8.1+ has d3dcompiler_47.dll in the system directory on x86/x64. Does it not on arm64? 
We redistribute the library for systems that don't have it in the system dir. Ideally we can eventually stop doing this.

Without a d3dcompiler dll, we can still run using native OpenGL if the driver is installed. (What's our target here?)
We would also be able to run software rasterization with Swiftshader once we integrate that, but that's not really acceptable for shipping perf.
Flags: needinfo?(jgilbert)
(In reply to Jeff Gilbert [:jgilbert] from comment #3)
> ANGLE requires a d3dcompiler dll to live-compile shaders for at least WebGL.

OK.  So bits of WebGL just fall over if we don't have this library.

> Windows 8.1+ has d3dcompiler_47.dll in the system directory on x86/x64. Does
> it not on arm64? 
> We redistribute the library for systems that don't have it in the system
> dir. Ideally we can eventually stop doing this.

I don't know.  It's possible arm64 just includes it by default nowadays.  David, you have an arm64 windows machine, right?  Do you have a d3dcompiler_47.dll?

> Without a d3dcompiler dll, we can still run using native OpenGL if the
> driver is installed. (What's our target here?)

I don't understand the question.  Could you please elaborate?

> We would also be able to run software rasterization with Swiftshader once we
> integrate that, but that's not really acceptable for shipping perf.

What is Swiftshader?  I haven't heard of this thing before.
Flags: needinfo?(jgilbert)
Flags: needinfo?(dmajor)
(In reply to Nathan Froyd [:froydnj] from comment #4)
> (In reply to Jeff Gilbert [:jgilbert] from comment #3)
> > ANGLE requires a d3dcompiler dll to live-compile shaders for at least WebGL.
> 
> OK.  So bits of WebGL just fall over if we don't have this library.

WebGL will not run /at all/ without this library on Windows today. (hard requirement for ANGLE)

> > Without a d3dcompiler dll, we can still run using native OpenGL if the
> > driver is installed. (What's our target here?)
> 
> I don't understand the question.  Could you please elaborate?

What are our target machines and configurations? (partly so I can know what to google!) We don't build for Win+ARM at all right now, but what configurations are we aiming to target here? It looks like Win+ARM is the only configuration? And that it's always arm64?

A quick google tells me that Win+ARM doesn't allow native OpenGL drivers unfortunately, so we're stuck with ANGLE or Swiftshader as solutions there.

> > We would also be able to run software rasterization with Swiftshader once we
> > integrate that, but that's not really acceptable for shipping perf.
> 
> What is Swiftshader?  I haven't heard of this thing before.

It's a small, fast software rasterizer. Their webpage has more details, but it would let us have a single software GL backend, instead of relying on D3D Warp and Mesa llvmpipe. I'm aiming to ship it in Gecko later this year.
Flags: needinfo?(jgilbert)
(In reply to Jeff Gilbert [:jgilbert] from comment #5)
> WebGL will not run /at all/ without this library on Windows today. (hard
> requirement for ANGLE)

OK, that's good to know.  Do we know what Edge does on ARM64, Anthony?

> > > Without a d3dcompiler dll, we can still run using native OpenGL if the
> > > driver is installed. (What's our target here?)
> > 
> > I don't understand the question.  Could you please elaborate?
> 
> What are our target machines and configurations? (partly so I can know what
> to google!) We don't build for Win+ARM at all right now, but what
> configurations are we aiming to target here? It looks like Win+ARM is the
> only configuration? And that it's always arm64?

We are not doing (at least to my knowledge) Win+32-bit arm at all.  This is strictly AArch64 Windows.

I don't know how many machines we have to support; at least for the first iteration, we can probably get away with running on one or two machines, like the NovaGo:

https://www.asus.com/us/2-in-1-PCs/ASUS-NovaGo-TP370QL/

Anthony may be able to provide more details here.

> A quick google tells me that Win+ARM doesn't allow native OpenGL drivers
> unfortunately, so we're stuck with ANGLE or Swiftshader as solutions there.

I don't know whether the situation is the same on AArch64 or not.
Flags: needinfo?(ajones)
(In reply to Nathan Froyd [:froydnj] from comment #4)
> I don't know.  It's possible arm64 just includes it by default nowadays. 
> David, you have an arm64 windows machine, right?  Do you have a
> d3dcompiler_47.dll?

My machine has a System32\D3DCompiler_47.dll that dumpbin says is AArch64, and a SysWOW64\D3DCompiler_47.dll of type x86.
Flags: needinfo?(dmajor)
Good news then!: We should set the defines like normal, but just not package the d3d compiler dll on Win+ARM, and we should end up loading the (one of the?) system D3DCompiler_47.dll.
AArch64 Windows includes the necessary DLL in its default configuration,
so we don't need to bother locating it in the SDK.  We made need to
distribute an updated version that won't by on the system by default,
though, so we need some extra checking.

All this should really be ported to moz.configure, but all in good time...
Attachment #9005000 - Flags: review?(core-build-config-reviews)
Flags: needinfo?(ajones)
Assignee: nobody → nfroyd
Comment on attachment 9005000 [details] [diff] [review]
handle aarch64 windows when determining MOZ_D3DCOMPILER_VISTA_DLL

Review of attachment 9005000 [details] [diff] [review]:
-----------------------------------------------------------------

Fun.
Attachment #9005000 - Flags: review?(core-build-config-reviews) → review+
Pushed by nfroyd@mozilla.com:
https://hg.mozilla.org/integration/mozilla-inbound/rev/9be13bbe1877
handle aarch64 windows when determining MOZ_D3DCOMPILER_VISTA_DLL; r=ted.mielczarek
https://hg.mozilla.org/mozilla-central/rev/9be13bbe1877
Status: NEW → RESOLVED
Closed: 6 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla64
You need to log in before you can comment on or make changes to this bug.