[OpenJDK 2D-Dev] RFR: 8229800 : WindowsServerCore 1809 does not provide d2d1.dll library required by awt.dll

Alexey Ivanov alexey.ivanov at oracle.com
Wed Aug 28 12:33:11 UTC 2019

Looks good to me too.


On 28/08/2019 03:56, Sergey Bylokhov wrote:
> +1
> On 8/27/19 10:34 am, Jayathirth Rao wrote:
>> Hi Phil,
>> I went through the changes and I see that we are doing similar 
>> dynamic loading of d2d1.dll as we are doing for shcore.dll and 
>> loading code looks good.
>> Also I confirmed that among the overloaded functions of 
>> D2D1CreateFactory, the one with 4 arguments is the generic one.
>> I have not verified build and logic by importing the code, but 
>> overall change looks good to me.
>> Thanks,
>> Jay
>>> On 27-Aug-2019, at 9:27 PM, Phil Race <philip.race at oracle.com> wrote:
>>> bug: https://bugs.openjdk.java.net/browse/JDK-8229800
>>> webrev : http://cr.openjdk.java.net/~prr/8229800/
>>> Since JDK 9, awt.dll has linked against d2d1.dll - a Direct2D 
>>> library - in order to
>>> call a method to get the screen dpi on Windows 7 and earlier.
>>> It appears that Windows Core Server used to include this library but 
>>> recent
>>> versions do not.
>>> As a result an app that loads AWT - even in headless mode - is DOA with
>>> an unsatisfied link on start up and no work around is possible.
>>> Windows Core Server is meant to be used for server applications and
>>> the use case here is just that but the hard compile time dependency
>>> on d2d1.dll means that even if this code isn't reached, used, or needed
>>> the app is still DOA.
>>> There may be other ways to get the screen DPI on Windows - I don't know
>>> why the hidpi support chose this approach - but the safest change 
>>> appears
>>> to be to dynamically locate this library at run time.
>>> The callers of the internal GetScreenDpi function are already prepared
>>> for it to "fail" and fall back to a default of 96 DPI.
>>> I have implemented this approach and verified it on Window 7 - which
>>> is where it is needed. A regression test is difficult since setting 
>>> values
>>> like -Dsun.java2d.uiScale mean we over-ride and don't request this
>>> setting and 96 dpi is the fallback so you could only test this as part
>>> of overall true hidpi testing. And the focus of this bug - the absence
>>> of a hard link against d2d1.dll and whether overall headless works
>>> is best tested by running any headless app on Windows Core Server.
>>> One wrinkle in the code is that the lookup of the function name
>>> needs to use the "C" binding so the signature is adjusted to match 
>>> that.
>>> The bug is marked tck-red because of the DOA, but the proposal
>>> is to just document that for JDK 13 GA this configuration isn't 
>>> supported
>>> and get the fix first into JDK 14 and then backport to 13.0.1 which 
>>> gives
>>> us a bit more time to verify the fix. It seems unlikely that this 
>>> configuration
>>> is critical for immediate adoption of 13 since it has taken 11 
>>> months for
>>> this issue to be reported.
>>> -phil.

More information about the 2d-dev mailing list