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...

I've done a fair bit of testing, and it's looking pretty good. Here are a few 
findings:

- `D3D12Context.java`: When using an opaque sub-scene with MSAA enabled, a 
simple translation can cause a `NullPointerException` when rendering it into a 
scene with depth testing disabled
- `D3D12SwapChain.java`: Disposal of offscreen RTT in D3D12SwapChain can lead 
to a `NullPointerException` during subsequent disposal 
- `D3D12RenderingContext.cpp`: Scaled blits can leave an incorrect shader 
resource active when restoring params
- `D3D12RenderingContext.cpp`: Dirty-bounds can incorrectly reduce the area 
cleared in an RTT
- Clear colors with alpha are not premultiplied, but then used as if they are
- Swap-chain creation imposes a requirement for tearing support even when using 
vsync (it's not needed in that case) without checking whether that support is 
available on the device
- Offscreen textures and intermediate textures created when using MSAA default 
to point (nearest-neighbor) filtering, which can produce artifacts when scaled 
(D3D pipeline sets it to linear filtering)
- `D3D12NativePhongMaterial.cpp`: `PhongMaterial` references can lead to GPU 
memory being retained even though the pool thinks it is freed

Also, can you merge the latest master? You will then need to make the same 
change to `CompileHLSL6Task.groovy` that was done for `CompileHLSLTask.groovy` 
in PR #2357

I'll review the Java code next.

-------------

PR Comment: https://git.openjdk.org/jfx/pull/2346#issuecomment-6583999778

Reply via email to