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 been prototyping support for UNIFIED stages and OS backdrops (PR #2048) in 
conjunction with this PR. Both these features require JavaFX to layer its 
content on top of backgrounds drawn by the OS. To do that D3D12 needs to use a 
composition swap chain instead of one that targets the HWND.

I don’t think we should tackle switching to a composition swap change in this 
PR since it requires (small) changes to Glass. But I’m hoping the other core 
changes required for composition can be made in this PR with the hope that we 
won’t have to re-test those areas of the code later when we add support for 
backdrops.

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

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

Reply via email to