JavaFX Direct3D 12 - Second EA release
Christopher Schnick
crschnick at xpipe.io
Tue Feb 10 15:22:32 UTC 2026
I tested with XPipe and KickstartFX, and I didn't encounter any issues.
Not even minor ones I could spot. So good work on that!
On 10/02/2026 14:40, Lukasz Kostyra wrote:
>
> Hi Christopher,
>
> In addition to bugs you found I also found some more edge cases in
> KickstartFX where Clear opts did not work properly. I pushed fixes to
> all those problems (my finds, your find on KickstartFX/MonkeyTester
> and (I think) on your other application) on the direct3d12 branch -
> https://github.com/openjdk/jfx-sandbox/commit/cc5a72e130156f9f245d0232ae938644bb2e9c61
> - could you give it a try? Note that this won’t fix transparency on
> UNIFIED Stages yet or Hyper-V problems, I still have to go through
> those (I plan to tackle these after performance fixes on dGPUs).
>
> If there are still some issues in your other application I’d like to
> give it a test myself and debug the problems locally (if that’s
> possible of course :) ).
>
> -Lukasz
>
> *From:*Christopher Schnick <crschnick at xpipe.io>
> *Sent:* Monday, 2 February 2026 16:14
> *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
>
> Yes, the corruption issues are fixed with that property
>
> On 02/02/2026 16:09, Lukasz Kostyra wrote:
>
> Uh, let me finish that email - a random Windows popup appeared
> while typing which caused my mail client lose focus and interpret
> typing as shortcuts…
>
> Anyway, I also see the popup windows have this glitch. I will take
> a closer look at them soon.
>
> As for your other corruption issues, can you check with
> -Dprism.d3d12.clearOpts=false ? I have a strong suspicion that
> optimization would be the one to blame again - I was planning to
> rework it a bit more soon anyway, so it might be a good test
> candidate for that.
>
> -Lukasz
>
> *From:*openjfx-dev <openjfx-dev-retn at openjdk.org>
> <mailto:openjfx-dev-retn at openjdk.org> *On Behalf Of *Lukasz Kostyra
> *Sent:* Monday, 2 February 2026 16:06
> *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: [External] : Re: JavaFX Direct3D 12 - Second EA release
>
> Thanks for checking.
>
> I also see the popup windows in MonkeyTester have this glitch, but
> on my machine it only happens once. R
>
> *From:*Christopher Schnick <crschnick at xpipe.io>
> *Sent:* Monday, 2 February 2026 16:00
> *To:* Lukasz Kostyra <lukasz.kostyra at oracle.com>
> *Cc:* OpenJFX <openjfx-dev at openjdk.org>
> *Subject:* [External] : Re: JavaFX Direct3D 12 - Second EA release
>
> Looks good, the font looks correct now.
>
> I went through most of the application to see if there's anything
> else. In the MonkeyTester page, I found this issue with popup
> windows in the menu bar and shadows I guess? In the d3d9 build,
> this does not occur. Video is attached.
>
> If you get around to reviewing
> https://github.com/openjdk/jfx/pull/2058
> <https://urldefense.com/v3/__https:/github.com/openjdk/jfx/pull/2058__;!!ACWV5N9M2RV99hQ!J3KNuGQU-sZ0xyclRGtrUi12g5JK3IX5bWVDFjedmOKvrKaCdDd1yMemreDAQpIgwP1g8kVm5k7g_uGdXfZsrqcq$>,
> you can use the same testing system to also run kickstartfx with
> d3d12 as that is also broken in various ways on there.
>
> With our main application, I am getting render corruption issues
> as shown in the video. I can also give instructions on how to run
> that application, it is very similar to kickstartfx. Just needs a
> bit more setup.
>
> Other than that, as mentioned by Martin I think, the translucent
> background fill for the UNIFIED stage style does not show
> correctly in kickstartfx if you compare it to the normal build.
> The left sidebar frame should have the proper window theme color
> when the performance mode is disabled, however it is only white or
> black, depending on the system theme:
>
> On 02/02/2026 12:36, Lukasz Kostyra wrote:
>
> This should be the final attempt at resolving this topic once
> and for all :)
>
> I pushed
> https://github.com/openjdk/jfx-sandbox/commit/dcaf8879db2b660e547e21edf31a1c8421aeab34
> <https://urldefense.com/v3/__https:/github.com/openjdk/jfx-sandbox/commit/dcaf8879db2b660e547e21edf31a1c8421aeab34__;!!ACWV5N9M2RV99hQ!J3KNuGQU-sZ0xyclRGtrUi12g5JK3IX5bWVDFjedmOKvrKaCdDd1yMemreDAQpIgwP1g8kVm5k7g_uGdXdE2KA0-$>
> just now which in my testing makes KickstartFX work properly
> even on UploadingPainter. After quite a bit of testing and
> scrolling it seems to me the corrupted font issues are now
> resolved. Please give it a go and let me know if it works on
> your end.
>
> -Lukasz
>
> *From:*openjfx-dev <openjfx-dev-retn at openjdk.org>
> <mailto:openjfx-dev-retn at openjdk.org> *On Behalf Of *Lukasz
> Kostyra
> *Sent:* Thursday, 29 January 2026 14:38
> *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
>
> Indeed it is still there, although on my machine it happens
> less with Presenting Painter. I tried it a couple of times
> before sending the email and it worked fine, so seems like I
> should also go buy a lottery ticket today…
>
> Well, good news to me is that this happens on
> PresentingPainter, so I now have some more possibilities in
> terms of debugging it in-place. I’ll get back to you when it’s
> fixed.
>
> -Lukasz
>
> *From:*Christopher Schnick <crschnick at xpipe.io>
> *Sent:* Thursday, 29 January 2026 13:31
> *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 commented out the uploading painter line and still see the
> same issue. As you say, it shouldn't make a difference. Maybe
> you hit the one time where the issue just didn't occur
> statistically speaking?
>
> The good news is that
> https://bugs.openjdk.org/browse/JDK-8154847 should be finally
> fixed by the new translucent backdrop PR, so it shouldn't need
> this property anymore in the future when it is merged.
>
> On 29/01/2026 12:02, Lukasz Kostyra wrote:
>
> I looked through KickstartFX and I noticed there’s a point
> where KickstartFX forces the use of Uploading Painter -
> PlatformState.java @ 112. UploadingPainter was designed to
> work with software pipeline as a fallback mechanism (SW
> does not have the SwapChain/Presentation mechanisms that
> HW pipelines use) so using it with hardware-accelerated
> pipelines is not officially supported. When I set
> prism.forceUploadingPainter to false text and buttons
> rendered correctly with D3D12 on my machine. Could you
> check if everything works fine on your end with
> UploadingPainter disabled?
>
> That being said, I do agree there should technically be no
> visual difference between PresentingPainter and
> UploadingPainter. I have some theories as to why that
> would be the case, but because UploadingPainter with
> hardware pipelines is not officially supported I’ll have
> to push this issue towards a later point in time.
> UploadingPainter makes this a bit extra difficult to debug
> because graphics debuggers rely on applications calling
> Present() to determine when the application progresses to
> the next frame - with UploadingPainter no Present() is
> called and debuggers can’t capture the frame properly for
> analysis.
>
> As for Hyper-V problems - I didn’t get a chance to test
> these yet but we also did not try running JavaFX with
> D3D12 backend on virtualized platforms. I will take a look
> at that use case also at a later point in time, once the
> performance improvements are completed.
>
> For both of these (UploadingPainter issues and Hyper-V
> issues) I’ll add separate bugs to my backlog and tackle
> them later down the line.
>
> I also checked why UploadingPainter was preferred in
> KickstartFX and this seems to be the issue -
> https://bugs.openjdk.org/browse/JDK-8154847. If what
> Martin mentioned in comment history is correct, there’s a
> possibility that with D3D12 there should be no
> transparency issues, as D3D12 defaults to alpha-supported
> SwapChain buffer (BGRX format exists but presents some
> technical issues and limitations, BGRA is more
> convenient). However I had no way of verifying this
> theory, on my Intel Iris Xe laptop the reproducer works as
> expected on both D3D and D3D12, with or without
> UploadingPainter.
>
> Let me know if KickstartFX runs properly with
> PresentingPainter.
>
> -Lukasz
>
> *From:*Christopher Schnick <crschnick at xpipe.io>
> <mailto:crschnick at xpipe.io>
> *Sent:* Wednesday, 21 January 2026 13:54
> *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
>
> 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
> <https://urldefense.com/v3/__https:/learn.microsoft.com/en-us/windows/security/application-security/application-isolation/windows-sandbox/windows-sandbox-install__;!!ACWV5N9M2RV99hQ!PhZXH7yVYtau5GffJqYZ2u0kJWnvdfqwZ505JNps6FUDmkZT1cTaY28P1sUyr3UvO_oLMcT6UkYRK3KwB9dOzqRg$>
>
> 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>
> <mailto:crschnick at xpipe.io>
> *Sent:* Tuesday, 20 January 2026 16:24
> *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
>
> 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/20260210/b450acea/attachment-0001.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image001.png
Type: image/png
Size: 26376 bytes
Desc: not available
URL: <https://mail.openjdk.org/pipermail/openjfx-dev/attachments/20260210/b450acea/image001-0001.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image002.png
Type: image/png
Size: 18275 bytes
Desc: not available
URL: <https://mail.openjdk.org/pipermail/openjfx-dev/attachments/20260210/b450acea/image002-0001.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image003.png
Type: image/png
Size: 57114 bytes
Desc: not available
URL: <https://mail.openjdk.org/pipermail/openjfx-dev/attachments/20260210/b450acea/image003-0001.png>
More information about the openjfx-dev
mailing list