JavaFX Direct3D 12 - Second EA release

Christopher Schnick crschnick at xpipe.io
Wed Jan 21 12:54:09 UTC 2026


Alright, that is good to know. I also ran the d3d12 build in a Hyper-V 
Windows 11 VM, which are known to cause issues. For example, this issue 
happens in those VMs with StageStyle.UNIFIED: 
https://bugs.openjdk.org/browse/JDK-8154847 (kickstartfx uses the 
unified stage style unless you turn on performance mode in the settings 
menu)

On that system, the app sometimes froze completely, sometimes, the 
rendered image got stuck. Changing the performance mode setting and the 
property -Dprism.forceUploadingPainter=true changed the behavior, but it 
was broken in some way in all configurations.

You should be able to reproduce these issues easily with the Windows 
Sandbox feature: 
https://learn.microsoft.com/en-us/windows/security/application-security/application-isolation/windows-sandbox/windows-sandbox-install

On 21/01/2026 13:48, Lukasz Kostyra wrote:
>
> Thanks for checking.
>
> I ran the KickstartFX build one more time, it failed but I found some 
> leftover global gradle.properties file which defined older JDK which 
> broke the build. Changing JDK to 25.0.1 everything built and works fine.
>
> I also found a way to build KickstartFX using custom JFX 
> (customJavaFxLibsPath in build.gradle) and can reproduce your font 
> issues locally on D3D12. I’ll report back when I solve them on my end. :)
>
> -Lukasz
>
> *From:*Christopher Schnick <crschnick at xpipe.io>
> *Sent:* Tuesday, 20 January 2026 16:24
> *To:* Lukasz Kostyra <lukasz.kostyra at oracle.com>
> *Cc:* OpenJFX <openjfx-dev at openjdk.org>
> *Subject:* [External] : Re: JavaFX Direct3D 12 - Second EA release
>
> In our main application I am getting the following error spammed in 
> the logs:
>
> 16:18:08:571 - error: java.lang.NullPointerException: Cannot invoke 
> "com.sun.prism.Texture.getPixelFormat()" because "tex" is null
> 16:18:08:571 - error:     at 
> javafx.graphics at 26-internal/com.sun.prism.impl.BaseGraphics.drawTexture(BaseGraphics.java:464)
> 16:18:08:571 - error:     at 
> javafx.graphics at 26-internal/com.sun.prism.impl.ps.BaseShaderGraphics.drawTexture(BaseShaderGraphics.java:159)
> 16:18:08:571 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGImageView.renderContent(NGImageView.java:123)
> 16:18:08:571 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063)
> 16:18:08:571 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGImageView.doRender(NGImageView.java:103)
> 16:18:08:571 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
> 16:18:08:571 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266)
> 16:18:08:571 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
> 16:18:08:571 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063)
> 16:18:08:571 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
> 16:18:08:571 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.renderForClip(NGNode.java:2279)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.renderRectClip(NGNode.java:2186)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.renderClip(NGNode.java:2213)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.CacheFilter.renderNodeToCache(CacheFilter.java:682)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.CacheFilter.render(CacheFilter.java:586)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.renderCached(NGNode.java:2343)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2054)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.renderForClip(NGNode.java:2279)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.renderRectClip(NGNode.java:2186)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.renderClip(NGNode.java:2213)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.CacheFilter.renderNodeToCache(CacheFilter.java:682)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.CacheFilter.render(CacheFilter.java:586)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.renderCached(NGNode.java:2343)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2054)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.tk.quantum.ViewPainter.doPaint(ViewPainter.java:481)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.tk.quantum.ViewPainter.paintImpl(ViewPainter.java:329)
> 16:18:08:572 - error:     at 
> javafx.graphics at 26-internal/com.sun.javafx.tk.quantum.UploadingPainter.run(UploadingPainter.java:143)
> 16:18:08:572 - error:     at 
> java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545)
> 16:18:08:572 - error:     at 
> java.base/java.util.concurrent.FutureTask.runAndReset$$$capture(FutureTask.java:369)
> 16:18:08:572 - error:     at 
> java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java)
>
> In kickstartfx, I still get the font rendering issues. Can you share 
> the problems you encountered? I tried to build it on a blank VM with 
> git clone, setting a JDK25 in the PATH, and running gradlew.bat run 
> without issues.
>
> On 20/01/2026 15:40, Lukasz Kostyra wrote:
>
>     Hi Christopher,
>
>     After Christmas break I came back to this issue with some new
>     patches. There were some problems I found with the clear
>     optimization, I just submitted
>     https://github.com/openjdk/jfx-sandbox/commit/8d3ec1deff714caa4eab779581a341e18dd78f31
>     <https://urldefense.com/v3/__https:/github.com/openjdk/jfx-sandbox/commit/8d3ec1deff714caa4eab779581a341e18dd78f31__;!!ACWV5N9M2RV99hQ!Js1REsWcDjMJTtd7_06jSspPNfrXAhmcztgQtVr7IH0e7xUQW51OhBZ-P9O6TfdB0v6e7Brk7yYlHI7mq363A1sg$>
>     and according to my local testing everything seems to be fine now.
>
>     When you have a moment, could you check out the changes above and
>     let me know if everything works correctly in your app?
>
>     If there are still problems I would like to find a way to build
>     your app and test it locally. I tried doing that earlier via
>     https://github.com/xpipe-io/kickstartfx
>     <https://urldefense.com/v3/__https:/github.com/xpipe-io/kickstartfx__;!!ACWV5N9M2RV99hQ!K0ztYeDtYFyIwxlmMB-9MDuvY7Xyd60-LuJK99hex3mclCWl29MJfnxkz2mmECxINzNr5bAdKvQ64O9Xn9_QfENu$>
>     you linked earlier but encountered some problems when building, so
>     I’m going to need your help or some instructions on how to build
>     the app.
>
>     Regards,
>
>     -Lukasz
>
>     *From:*openjfx-dev <openjfx-dev-retn at openjdk.org>
>     <mailto:openjfx-dev-retn at openjdk.org> *On Behalf Of *Lukasz Kostyra
>     *Sent:* Wednesday, 10 December 2025 13:29
>     *To:* Christopher Schnick <crschnick at xpipe.io>
>     <mailto:crschnick at xpipe.io>
>     *Cc:* OpenJFX <openjfx-dev at openjdk.org>
>     <mailto:openjfx-dev at openjdk.org>
>     *Subject:* RE: Re: JavaFX Direct3D 12 - Second EA release
>
>     It should work fine without the property. Thanks for your help,
>     I’ll keep searching.
>
>     -Lukasz
>
>     *From:*Christopher Schnick <crschnick at xpipe.io>
>     *Sent:* Tuesday, 9 December 2025 17:10
>     *To:* Lukasz Kostyra <lukasz.kostyra at oracle.com>
>     *Cc:* OpenJFX <openjfx-dev at openjdk.org>
>     *Subject:* [External] : Re: JavaFX Direct3D 12 - Second EA release
>
>     I tried this commit, but the problem shows up again. I tested the
>     previous commit with the passed property again, and that one still
>     works.
>
>     Or should I still pass the property in this commit as well?
>
>     On 09/12/2025 4:36 PM, Lukasz Kostyra wrote:
>
>         Hi Christopher,
>
>         I updated the direct3d12 branch with the fix -
>         https://github.com/openjdk/jfx-sandbox/commit/ffc078b9593c44a8ed0629a74b8bda18357f93a8
>         <https://urldefense.com/v3/__https:/github.com/openjdk/jfx-sandbox/commit/ffc078b9593c44a8ed0629a74b8bda18357f93a8__;!!ACWV5N9M2RV99hQ!OLgt8HGQc2SZQqycgcFI2bUPgQXEdES6FZw0Gn_bo_kiS2WoY4A68Z3JxY-ElC_58HSF12FXKCoat4MrrESK9ceD$>
>         . Let me know how it works and if the problem has been resolved.
>
>         Thanks,
>
>         -Lukasz
>
>         *From:*openjfx-dev <openjfx-dev-retn at openjdk.org>
>         <mailto:openjfx-dev-retn at openjdk.org> *On Behalf Of *Lukasz
>         Kostyra
>         *Sent:* Thursday, 4 December 2025 11:52
>         *To:* Christopher Schnick <crschnick at xpipe.io>
>         <mailto:crschnick at xpipe.io>
>         *Cc:* OpenJFX <openjfx-dev at openjdk.org>
>         <mailto:openjfx-dev at openjdk.org>
>         *Subject:* RE: Re: JavaFX Direct3D 12 - Second EA release
>
>         Thanks for checking. I filed
>         https://bugs.openjdk.org/browse/JDK-8373088 to track this
>         since this is unrelated to specifically text, will probably
>         get to it in a few days.
>
>         -Lukasz
>
>         *From:*Christopher Schnick <crschnick at xpipe.io>
>         *Sent:* Wednesday, 3 December 2025 18:53
>         *To:* Lukasz Kostyra <lukasz.kostyra at oracle.com>
>         *Cc:* OpenJFX <openjfx-dev at openjdk.org>
>         *Subject:* [External] : Re: JavaFX Direct3D 12 - Second EA release
>
>         This commit fixes the problem when the property is set to
>         false and it shows up again if the property is not set to false
>
>         On 03/12/2025 5:54 PM, Lukasz Kostyra wrote:
>
>             Hi Christopher,
>
>             I did not find the way to reproduce this locally, but I
>             found a problem with one of the optimizations that is in
>             the backend. To double check if that is in fact the issue
>             I pushed
>             https://github.com/openjdk/jfx-sandbox/commit/7078d621dc282ab8439800b84b78377dec3eea89
>             <https://urldefense.com/v3/__https:/github.com/openjdk/jfx-sandbox/commit/7078d621dc282ab8439800b84b78377dec3eea89__;!!ACWV5N9M2RV99hQ!JFEGrvRPb5-P9TxSZen0sbWuRq_Go_lMwM3kO5m0u_RlMgJW1cDfe8HxdAlgEedAsg4aSm99IyDYzbsN8x-LMbPQ$>
>             to disable the optimization (it is on by default,
>             disabling it fixes that specific problem on my end) and
>             I’d like to double-check if this is the correct lead.
>
>             When you have a moment, could you build JFX with that
>             change and run your app with
>             “-Dprism.d3d12.clearOpts=false” added to the command line?
>
>             If the problem persists with prism.d3d12.clearOpts set to
>             false I would need some more information on how these
>             labels are rendered to track this down.
>
>             Thanks,
>
>             -Lukasz
>
>             *From:*Christopher Schnick <crschnick at xpipe.io>
>             <mailto:crschnick at xpipe.io>
>             *Sent:* Friday, 28 November 2025 13:25
>             *To:* Lukasz Kostyra <lukasz.kostyra at oracle.com>
>             <mailto:lukasz.kostyra at oracle.com>
>             *Cc:* OpenJFX <openjfx-dev at openjdk.org>
>             <mailto:openjfx-dev at openjdk.org>
>             *Subject:* [External] : Re: JavaFX Direct3D 12 - Second EA
>             release
>
>             I did not encounter the vanishing issue anymore with that
>             build, so at least it is usable.
>
>             However, the font rendering issue still exists for some nodes:
>
>             It is not deterministic, meaning that if I just scroll the
>             scrollpane forward and back, the same text might get
>             rendered correctly.
>
>             Also, did you see the performance results I posted for my
>             AMD system? Performance was quite bad there, so this is
>             not in a stage where I can test this in production a bit.
>
>             On 28/11/2025 12:41, Lukasz Kostyra wrote:
>
>                 Hi Christopher,
>
>                 I just pushed a fix for JDK-8371995 onto direct3d12
>                 branch in the sandbox -
>                 https://github.com/openjdk/jfx-sandbox/tree/direct3d12
>                 <https://urldefense.com/v3/__https:/github.com/openjdk/jfx-sandbox/tree/direct3d12__;!!ACWV5N9M2RV99hQ!KuiGt3yDg1iNtCswOA3yLUbPKFpTnRKQE9clxnsd6xQRhnGJLoz7c697JC77xG2Q4qwsMWDePar6hRx9DY1uTPpy$>
>                 . If you find a moment, could you build JFX from that
>                 branch and check if your app works correctly?
>
>                 -Lukasz
>
>                 *From:*openjfx-dev <openjfx-dev-retn at openjdk.org>
>                 <mailto:openjfx-dev-retn at openjdk.org> *On Behalf Of
>                 *Lukasz Kostyra
>                 *Sent:* Monday, 17 November 2025 15:14
>                 *To:* Christopher Schnick <crschnick at xpipe.io>
>                 <mailto:crschnick at xpipe.io>
>                 *Cc:* OpenJFX <openjfx-dev at openjdk.org>
>                 <mailto:openjfx-dev at openjdk.org>
>                 *Subject:* RE: Re: JavaFX Direct3D 12 - Second EA release
>
>                 I might’ve found the problem, there is an assertion
>                 that triggers when multiple text objects using
>                 different fonts are drawn. It could be related (AFAIK
>                 Label controls will eventually end up at the same text
>                 rendering routines as Text nodes). Assertions are
>                 compiled out on Release for performance, so there is a
>                 chance it would corrupt the rendering without anything
>                 meaningful shown on screen.
>
>                 To track this I just filed
>                 https://bugs.openjdk.org/browse/JDK-8371995 . I will
>                 check it and let you know when I fix it.
>
>                 On your side It might still be handy to build JFX in
>                 DebugNative, to confirm if the triggered assertion is
>                 the same and to later confirm if the fix is working
>                 for you too.
>
>                 -Lukasz
>
>                 *From:*Christopher Schnick <crschnick at xpipe.io>
>                 *Sent:* Saturday, 15 November 2025 17:39
>                 *To:* Lukasz Kostyra <lukasz.kostyra at oracle.com>
>                 *Cc:* OpenJFX <openjfx-dev at openjdk.org>
>                 *Subject:* Re: [External] : Re: JavaFX Direct3D 12 -
>                 Second EA release
>
>                 Forgot to add, there is nothing out of the ordinary
>                 printed in the verbose logs.
>
>                 If I find the time, I can look into compiling a debug
>                 build.
>
>                 But the problem should be reproducible somehow when
>                 just automatically creating a lot of labels with
>                 random styles, sizes, and text. Some of them should
>                 break as they did for me.
>
>                 On 15/11/2025 17:34, Christopher Schnick wrote:
>
>                     Ok, so I had more time to debug it. The one weird
>                     thing I observed when it was working was that some
>                     labels have corrupted text rendering:
>
>
>                     Not all of them, most are fine. There are no
>                     differences in terms of style classes etc. between
>                     the labels. When scrolling, the rendering
>                     sometimes switches between this corrupted and
>                     normal state after some delay.
>
>                     After a while I also figured out that text
>                     rendering is responsible for the issue of the
>                     nodes vanishing: Certain label contents broke the
>                     renderer. For example, in my application, the
>                     string "Password manager" when assigned to a label
>                     broke it and nothing was rendered anymore. I tried
>                     to find an easy reproducer but was not able to.
>                     It's probably very dependent on all the different
>                     style classes that influence the text shape/size/etc.
>
>                     On 13/11/2025 16:30, Lukasz Kostyra wrote:
>
>                         Thanks for checking.
>
>                         It is very possible the D3D12 runtime did not
>                         like something, could be related to your
>                         specific hardware. D3D12 by now has many
>                         extensions which differ depending on hardware
>                         and can lift certain restrictions - we already
>                         internally had a case where one GPU had some
>                         restriction that was not enforced on another
>                         GPU and we had to accommodate that.
>
>                         The first step would be to try running D3D12
>                         with “-Dprism.verbose=true
>                         -Dprism.debug=true”. These should print
>                         additional logs that might have some extra
>                         information.
>
>                         If there’s nothing useful there, next step
>                         would be to build JavaFX with
>                         -PCONF=DebugNative - this will compile shaders
>                         in Debug, add assertions and debug logs to the
>                         backend - and then run your app with D3D12
>                         debug layers and GPU debugging enabled by
>                         adding “-Dprsim.d3d12.debugLayers=true
>                         -Dprism.d3d12.gpuDebug=true”. Those will slow
>                         down the app significantly, but will also tell
>                         D3D12 to run additional API use and GPU use
>                         checks.
>
>                         If the problem happens during a render loop
>                         and debug layers catch it, there is a chance
>                         it will cascade into other errors and spam the
>                         console output - you can tell D3D12 debug
>                         layers to trigger an assertion on first
>                         encountered error with
>                         “-Dprism.d3d12.breakOnError=true”.
>
>                         I am running out of time today to check this
>                         myself, but if you find something let me know
>                         - I’ll try to reproduce the problem myself and
>                         we’ll see where we go from there.
>
>                         Good luck!
>
>                         - Lukasz
>
>                         *From:*Christopher Schnick
>                         <crschnick at xpipe.io> <mailto:crschnick at xpipe.io>
>                         *Sent:* Thursday, 13 November 2025 16:11
>                         *To:* Lukasz Kostyra
>                         <lukasz.kostyra at oracle.com>
>                         <mailto:lukasz.kostyra at oracle.com>
>                         *Cc:* openjfx-dev at openjdk.org
>                         *Subject:* [External] : Re: JavaFX Direct3D 12
>                         - Second EA release
>
>                         I just tried to run a project with provided
>                         jmods and at some point, certain nodes are
>                         just not rendered anymore and the window
>                         contents vanish. But they render for a short
>                         period of time.
>
>                         There is no exception thrown as far as I can
>                         see, so not sure what you need for debugging.
>
>                         For testing, this is the built application
>                         with the d3d12 jmods that you can use to
>                         attempt to reproduce the problem:
>                         https://we.tl/t-DJuX0BeqXm
>                         <https://urldefense.com/v3/__https:/we.tl/t-DJuX0BeqXm__;!!ACWV5N9M2RV99hQ!K0ztYeDtYFyIwxlmMB-9MDuvY7Xyd60-LuJK99hex3mclCWl29MJfnxkz2mmECxINzNr5bAdKvQ64O9Xn7hHbsl_$>
>                         . It is built from these sources:
>                         https://github.com/xpipe-io/kickstartfx
>                         <https://urldefense.com/v3/__https:/github.com/xpipe-io/kickstartfx__;!!ACWV5N9M2RV99hQ!K0ztYeDtYFyIwxlmMB-9MDuvY7Xyd60-LuJK99hex3mclCWl29MJfnxkz2mmECxINzNr5bAdKvQ64O9Xn9_QfENu$>
>
>                         On 13/11/2025 14:40, Lukasz Kostyra wrote:
>
>                             Hello openjfx-dev,
>
>                             The second Early Access(EA) build of
>                             JavaFX with the Windows Direct3D 12
>                             rendering pipeline is now available at:
>                             https://jdk.java.net/javafxdirect3d12/
>                             <https://urldefense.com/v3/__https:/jdk.java.net/javafxdirect3d12/__;!!ACWV5N9M2RV99hQ!K0ztYeDtYFyIwxlmMB-9MDuvY7Xyd60-LuJK99hex3mclCWl29MJfnxkz2mmECxINzNr5bAdKvQ64O9Xnw7Bj6i8$>
>
>                             Please test this bundle and share your
>                             feedback by:
>
>                             - emailing openjfx-dev at openjdk.java.net or
>
>                             - reporting issues via
>                             JBS[https://bugs.openjdk.org/] or at
>                             https://bugreport.java.com
>                             <https://urldefense.com/v3/__https:/bugreport.java.com__;!!ACWV5N9M2RV99hQ!K0ztYeDtYFyIwxlmMB-9MDuvY7Xyd60-LuJK99hex3mclCWl29MJfnxkz2mmECxINzNr5bAdKvQ64O9Xn-g1RFIV$>
>
>                             This is the second EA release. The backend
>                             is feature-complete and went through a
>                             first optimization pass, but it still
>                             requires some more testing on more
>                             hardware variants before we can consider
>                             it complete. As such, with this release we
>                             also would like to call for help with
>                             performance testing the backend (more
>                             details on that will be sent in a separate
>                             email thread).
>
>                             Known issues and pending tasks are
>                             captured on JBS and can be accessed using
>                             the filter provided on the Direct3D 12 EA
>                             page
>                             [https://jdk.java.net/javafxdirect3d12/
>                             <https://urldefense.com/v3/__https:/jdk.java.net/javafxdirect3d12/__;!!ACWV5N9M2RV99hQ!K0ztYeDtYFyIwxlmMB-9MDuvY7Xyd60-LuJK99hex3mclCWl29MJfnxkz2mmECxINzNr5bAdKvQ64O9Xnw7Bj6i8$>].
>                             Before reporting a new bug, please review
>                             the existing issues to avoid duplicates.
>
>                             Important Notes:
>
>                             1. This is a Windows-specific feature, so
>                             only a Windows-specific bundle is provided.
>
>                             2. The default rendering pipeline is set
>                             to d3d12. Use "-Dprism.order=d3d" or
>                             "-Dprism.order=sw" to select one of the
>                             other pipelines for comparison testing.
>
>                             3. It is recommended to use JDK 25 or later.
>
>                             4. At this stage D3D12 backend is
>                             feature-complete and went through the
>                             first phase of optimization. It is worth
>                             noting that, while generally we noticed
>                             performance improvements, it might not be
>                             on par with D3D backend on every machine
>                             combo  - we already noted performance
>                             being worse on recent NVidia discrete GPUs
>                             [https://bugs.openjdk.org/browse/JDK-8370486]
>                             and are looking for solutions.
>
>                             5. Issue behavior may vary across
>                             different hardware, so please provide
>                             detailed information, such as the output
>                             of "java -Dprism.verbose=true" or used
>                             hardware, when reporting or discussing issues.
>
>                             6. Refer: Run HelloWorld using JavaFX SDK
>                             [https://openjfx.io/openjfx-docs/#install-javafx
>                             <https://urldefense.com/v3/__https:/openjfx.io/openjfx-docs/*install-javafx__;Iw!!ACWV5N9M2RV99hQ!K0ztYeDtYFyIwxlmMB-9MDuvY7Xyd60-LuJK99hex3mclCWl29MJfnxkz2mmECxINzNr5bAdKvQ64O9Xn8uMZKUY$>]
>
>                             We look forward to your feedback.
>
>                             Regards,
>
>                             Lukasz
>
>                             Confidential- Oracle Internal
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/openjfx-dev/attachments/20260121/03b1aa2a/attachment-0001.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image001.png
Type: image/png
Size: 18275 bytes
Desc: not available
URL: <https://mail.openjdk.org/pipermail/openjfx-dev/attachments/20260121/03b1aa2a/image001-0001.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image002.png
Type: image/png
Size: 57114 bytes
Desc: not available
URL: <https://mail.openjdk.org/pipermail/openjfx-dev/attachments/20260121/03b1aa2a/image002-0001.png>


More information about the openjfx-dev mailing list