JavaFX Direct3D 12 - Second EA release

Christopher Schnick crschnick at xpipe.io
Thu Jan 29 12:30:58 UTC 2026


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>
> *Sent:* Wednesday, 21 January 2026 13:54
> *To:* Lukasz Kostyra <lukasz.kostyra at oracle.com>
> *Cc:* OpenJFX <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/20260129/ed56e14c/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/20260129/ed56e14c/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/20260129/ed56e14c/image002-0001.png>


More information about the openjfx-dev mailing list