On Fri, 16 Oct 2026 14:40:27 GMT, Lukasz Kostyra <[email protected]> wrote:
> ## Description > > This PR is for review and integration of Direct3D 12 Rendering Pipeline into > JavaFX mainline. We released three Early Access (EA) versions of this > implementation while keeping the development ongoing on [JavaFX > Sandbox](https://github.com/openjdk/jfx-sandbox/tree/direct3d12) and reached > a stage where it is ready to be integrated into mainline. Any further work > and potential fixes will be done on mainline. > > At the time of writing, this PR is identical to the [JavaFX Sandbox D3D12 > branch](https://github.com/openjdk/jfx-sandbox/tree/direct3d12) with only one > difference - the Sandbox defaults to D3D12 backend. This PR, however, does > *NOT* change the default rendering pipeline on Windows. D3D9 remains the > default rendering pipeline and D3D12 is optional - it can be selected by > providing `-Dprism.order=d3d12`. To verify which pipeline is actually in use > `-Dprism.verbose=true` is recommended. > > ## Details > > Below are general changes introduced by the backend: > > ### JSL changes > > - Introduced `HLSL6Backend` class which translates JSL shader code into HLSL6 > code. D3D12 introduced HLSL Shader Level 6 support and won't support existing > HLSL shaders used with D3D9, as those are compiled for unsupported Shader > Level 3. > - D3D12-specific shaders are kept in > `modules/javafx.graphics/src/main/native-prism-d3d12/hlsl6` > - Shader compilation is done with DXC instead of FXC (FXC does not support > SL6). DXC is bundled in Windows SDK which JavaFX already integrates with. > - Backend also generates C++ headers with Shader resource binding > information, used by the native-side > > ### Build changes > > - Added new build tasks for generation and compilation of HLSL6 shaders for > D3D12 > - Added tasks to compile D3D12 native backend code > > ### Prism changes > > - Added D3D12-specific Java classes (package `com.sun.prism.d3d12`) and a > Java-to-JNI layer (package `com.sun.prism.d3d12.ni`) > - Java implementation is mostly similar to D3D9 implementation, with only > some minor changes needed to accommodate slightly different presentation > behavior of the new runtime > - JNI interface is relatively high level to reduce the amount of JNI calls > for performance > - Added a native Prism backend implementation using D3D12 runtime (stored in > `modules/javafx.graphics/src/main/native-prism-d3d12`) > - Written in C++ 20 > - Uses only interfaces available via Windows API with no third-party > libraries - WinAPI, Windows COM interface system and "barebones" Direct3D 12 > API/runtime > - Native layer entry-points... modules/javafx.graphics/src/main/java/com/sun/prism/d3d12/D3D12Context.java line 188: > 186: int dstX0, int dstY0, int dstX1, int dstY1) { > 187: D3D12RTTexture srcRT = (D3D12RTTexture)srcRTT; > 188: D3D12RTTexture dstRT = (D3D12RTTexture)dstRTT; My IDE tells me that there is a potential NPE as the D3DContext implementation checks for dstRT == null. I looked into the usages and it seems like NGSubScene calls this with dstRTT = null modules/javafx.graphics/src/main/native-prism-d3d12/D3D12NativeDevice.cpp line 385: > 383: msaaLevels.SampleCount = i; > 384: HRESULT hr = > mDevice->CheckFeatureSupport(D3D12_FEATURE_MULTISAMPLE_QUALITY_LEVELS, > &msaaLevels, sizeof(msaaLevels)); > 385: if (SUCCEEDED(hr)) CheckFeatureSupport always returns S_OK unless you mess up the data types. I think this should check the value of `msaaLevels` instead. modules/javafx.graphics/src/main/native-prism-d3d12/D3D12NativeSwapChain.cpp line 145: > 143: { > 144: mVSyncEnabled = Internal::Config::IsVsyncEnabled(); > 145: mSwapChainFlags = DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING; I wanted to look up what this flag does and the docs mentioned that one should check whether it is supported on the system. What happens if it isn't? ------------- PR Review Comment: https://git.openjdk.org/jfx/pull/2346#discussion_r4468904999 PR Review Comment: https://git.openjdk.org/jfx/pull/2346#discussion_r4469055022 PR Review Comment: https://git.openjdk.org/jfx/pull/2346#discussion_r4468955111
