[External] : Re: JavaFX Direct3D 12 - Call for performance testing help

Christopher Schnick crschnick at xpipe.io
Mon Nov 24 23:12:59 UTC 2025


Thanks Florian for the built runtime image.

I ran the tests on my AMD system with a Radeon RX 7600. The performance 
on d3d12 seems to be worse, especially the 3DMesh didn't even display 
anything and timeouted a few times.

On 14/11/2025 20:01, Florian Enner wrote:
> Hi Kevin,
>
> Then would it be ok for external people to provide a link on the 
> mailing list?
>
> @Christopher
>
> This one 
> https://drive.google.com/file/d/1BsTiKo0t-u1R50vH2fGTrruaxOC60O7h was 
> built with
>
> %JAVA_HOME%\bin\jlink --module-path "%JAVA_HOME%\jmods;%JAVAFX_JMODS%" 
>  --add-modules 
> jdk.compiler,javafx.base,javafx.controls,javafx.graphics,jdk.jsobject,javafx.media 
>  --strip-debug  --no-header-files  --no-man-pages  --output 
> javafx26-d3d-jre-25
> With that it's down to 
> *"<unzip-path>\javafx26-d3d-jre-25\bin\java.exe" 
> --enable-native-access=javafx.graphics -Dprism.order=d3d 
> RenderPerfTest.java --output-csv -r 3*
> *
> *
> -- Florian
>
>
> On Fri, Nov 14, 2025 at 7:16 PM Kevin Rushforth 
> <kevin.rushforth at oracle.com> wrote:
>
>     Because we (Oracle) have very strict rules about publishing
>     binaries. We are not allowed to publish anything that hasn't been
>     approved for release, even an experimental test program.
>
>     -- Kevin
>
>
>     On 11/14/2025 10:07 AM, Christopher Schnick wrote:
>>
>>     May I ask why that is not possible?
>>
>>     On 14/11/2025 19:04, Kevin Rushforth wrote:
>>>     While that might be easier, it is not possible for us to provide
>>>     such a binary.
>>>
>>>     We could simplify it a bit by providing instructions to download
>>>     the JMODs (rather than the SDK) from jdk.java.net/direct3d12
>>>     <http://jdk.java.net/direct3d12> and use jlink to create a JDK
>>>     that includes JavaFX. That way the custom options only need to
>>>     be added one time to jlink; running "javac" and "java" would
>>>     need no options related to finding the JavaFX modules or
>>>     enabling native access.
>>>
>>>     -- Kevin
>>>
>>>
>>>     On 11/14/2025 9:50 AM, Christopher Schnick wrote:
>>>>
>>>>     I will have to check whether I have time to look into this, but
>>>>     I am wondering if it would be possible for these tests to
>>>>     require less manual setup?
>>>>
>>>>     Isn't this where something like jlink could easily solve all
>>>>     these steps and the user would just have to run one of multiple
>>>>     launcher scripts of a prebuilt runtime image? I would argue it
>>>>     would be faster to just build a jlink image and provide a
>>>>     download link compared to writing the detailed instructions so
>>>>     that users run the test exactly as they should.
>>>>
>>>>     On 14/11/2025 15:10, Lukasz Kostyra wrote:
>>>>>
>>>>>     Hello all,
>>>>>
>>>>>     I got feedback on the previous call for performance testing
>>>>>     email that, instead of using the Bash test script on Windows
>>>>>     (and hoping you have Cygwin/MINGW installed) it would be
>>>>>     easier to integrate testing and CSV output functionality into
>>>>>     RenderPerfTest. I made those changes and they are now
>>>>>     available on jfx-sandbox direct3d12 branch (you WON’T find
>>>>>     those on main repo yet):
>>>>>     https://github.com/openjdk/jfx-sandbox/tree/direct3d12/tests/performance/animation/RenderPerfTest/src/renderperf
>>>>>     <https://urldefense.com/v3/__https://github.com/openjdk/jfx-sandbox/tree/direct3d12/tests/performance/animation/RenderPerfTest/src/renderperf__;!!ACWV5N9M2RV99hQ!NmrWBwOSB5NyqKCJx6q9-tF7teG_yDvJ2o7OEusvsVHTtYtUYWFIH_wlix7deQTg_OvqIoRsq-bCyYbUdqGIATP6$>
>>>>>
>>>>>     Any feedback regarding RenderPerfTest will be updated on that
>>>>>     branch automatically, so it’s indeed a better solution if
>>>>>     there’s more feedback to it :)
>>>>>
>>>>>
>>>>>     *_New steps for running tests:_*
>>>>>
>>>>>      1. Download RenderPerfTest from above link (has to be
>>>>>         jfx-sandbox repo, direct3d12 branch) - best to download
>>>>>         the entire “renderperf” folder as ZIP as it contains extra
>>>>>         resources needed for the test app
>>>>>      2. Get JavaFX Direct3D 12 build - either download the EA2 SDK
>>>>>         from [ https://jdk.java.net/javafxdirect3d12/
>>>>>         <https://urldefense.com/v3/__https://jdk.java.net/javafxdirect3d12/__;!!ACWV5N9M2RV99hQ!NmrWBwOSB5NyqKCJx6q9-tF7teG_yDvJ2o7OEusvsVHTtYtUYWFIH_wlix7deQTg_OvqIoRsq-bCyYbUdqSbhooh$>
>>>>>         ] or build it from scratch from direct3d12 [
>>>>>         https://github.com/openjdk/jfx-sandbox/tree/direct3d12
>>>>>         <https://urldefense.com/v3/__https://github.com/openjdk/jfx-sandbox/tree/direct3d12__;!!ACWV5N9M2RV99hQ!NmrWBwOSB5NyqKCJx6q9-tF7teG_yDvJ2o7OEusvsVHTtYtUYWFIH_wlix7deQTg_OvqIoRsq-bCyYbUdvfpvAcN$>
>>>>>         ] branch (make sure to *build with -PCONF=Release*; at the
>>>>>         time of writing this email there is no functional
>>>>>         difference between the sandbox repo and the EA2 build).
>>>>>      3. RenderPerf can be run with (underlined parts you need to
>>>>>         fill in yourself):
>>>>>         *java --upgrade-module-path="_<path_to_jfx_sdk>/lib_"
>>>>>         --add-modules=javafx.base,javafx.controls,javafx.graphics,jdk.jsobject,javafx.media
>>>>>         --enable-native-access=javafx.graphics
>>>>>         -Dprism.order=_<backend>_ renderperf/RenderPerfTest.java
>>>>>         --output-csv -r _<runs>
>>>>>         _*Where:
>>>>>         *<path_to_jfx_sdk>* -  path to directory where JavaFX SDK
>>>>>         is located (has to be where JavaFX bin and lib folders reside)
>>>>>         *    <backend> *- short-hand for which Prism backend to use
>>>>>         *<runs>* - how many times each test case should
>>>>>         run;RenderPerf will average FPS results from these runs
>>>>>
>>>>>      4. Running RenderPerf like above will produce
>>>>>         *RenderPerf_results-<backend>-<date>-<time>.csv* in your
>>>>>         current directory.
>>>>>
>>>>>     *_Examples:_*
>>>>>
>>>>>      1. For D3D baseline test, run:
>>>>>         *java --upgrade-module-path="_<path_to_jfx_sdk>_/lib"
>>>>>         --add-modules=javafx.base,javafx.controls,javafx.graphics,jdk.jsobject,javafx.media,
>>>>>         --enable-native-access=javafx.graphics -Dprism.order=d3d
>>>>>         renderperf/RenderPerfTest.java --output-csv -r 3*
>>>>>
>>>>>      2. For D3D12 baseline test, run:
>>>>>             java --upgrade-module-path="*_<path_to_jfx_sdk>_*/lib"
>>>>>         --add-modules=javafx.base,javafx.controls,javafx.graphics,jdk.jsobject,javafx.media,
>>>>>         --enable-native-access=javafx.graphics -Dprism.order=d3d12
>>>>>         renderperf/RenderPerfTest.java --output-csv -r 3
>>>>>
>>>>>     *_Notes:_*
>>>>>
>>>>>     * Closing the test on warm-up stage will stop the test run early
>>>>>
>>>>>     * Similarly to the test script, RenderPerfTest defines default
>>>>>     object numbers at the beginning as *Map<String, Integer>
>>>>>     defaultObjectCounts *which are used for running all the tests.
>>>>>     Similar remarks as to the test script apply - It would be
>>>>>     preferred to keep these numbers as-is but if needed (test
>>>>>     timeouts loading, or framerate on baseline D3D run is very low
>>>>>     (below 15FPS) ) they can be lowered, as long as they remain
>>>>>     consistent between D3D and D3D12 runs.
>>>>>
>>>>>     Thanks once again for your help!
>>>>>
>>>>>     -Lukasz
>>>>>
>>>>>     *From:*openjfx-dev <openjfx-dev-retn at openjdk.org>
>>>>>     <mailto:openjfx-dev-retn at openjdk.org> *On Behalf Of *Lukasz
>>>>>     Kostyra
>>>>>     *Sent:* Thursday, 13 November 2025 15:50
>>>>>     *To:* openjfx-dev at openjdk.org
>>>>>     *Subject:* JavaFX Direct3D 12 - Call for performance testing help
>>>>>
>>>>>     Hello openjfx-dev,
>>>>>
>>>>>     Because Windows is very open hardware-wise, it is difficult to
>>>>>     prepare the backend for all possible hardware combinations
>>>>>     available, especially from performance perspective. To make
>>>>>     sure JavaFX performance does not degrade compared to old D3D
>>>>>     backend we would like to call for volunteers to help
>>>>>     performance-test the backend. These tests will let us get a
>>>>>     general idea on how the backend behaves on different hardware
>>>>>     and which areas of the backend to focus on while moving
>>>>>     forward with optimization effort for Direct3D 12.
>>>>>
>>>>>     At this point we tested the backend quite extensively on
>>>>>     Intel-based integrated GPUs and did some testing on a machine
>>>>>     running a recent discrete Nvidia GPU. We are primarily looking
>>>>>     for testing Direct3D 12 backend *on **a system running an AMD
>>>>>     discrete GPU*, but any hardware combinations are welcome - the
>>>>>     more the merrier :). Also note that these tests *require a
>>>>>     Windows machine*, as D3D12 backend is Windows-only.
>>>>>
>>>>>     We run performance testing using RenderPerfTest JavaFX app
>>>>>     located in the JavaFX repository under
>>>>>     "tests/performance/animation/RenderPerfTest". I wrote a bash
>>>>>     script to use with this app for performance-testing the
>>>>>     backend. The script will run all available demos on
>>>>>     RenderPerfTest with a set amount of objects per test, average
>>>>>     the FPS results from each run and output the results into a
>>>>>     CSV file.
>>>>>
>>>>>     *_How to run perf tests:_*
>>>>>
>>>>>      1. Download the test script -
>>>>>         https://gist.github.com/lukostyra/bc354a5fd845b82805ffb3380caebe9a
>>>>>         <https://urldefense.com/v3/__https://gist.github.com/lukostyra/bc354a5fd845b82805ffb3380caebe9a__;!!ACWV5N9M2RV99hQ!NmrWBwOSB5NyqKCJx6q9-tF7teG_yDvJ2o7OEusvsVHTtYtUYWFIH_wlix7deQTg_OvqIoRsq-bCyYbUdirf_tui$>
>>>>>      2. Get JavaFX Direct3D 12 build - either download the EA2 SDK
>>>>>         from [ https://jdk.java.net/javafxdirect3d12/
>>>>>         <https://urldefense.com/v3/__https://jdk.java.net/javafxdirect3d12/__;!!ACWV5N9M2RV99hQ!NmrWBwOSB5NyqKCJx6q9-tF7teG_yDvJ2o7OEusvsVHTtYtUYWFIH_wlix7deQTg_OvqIoRsq-bCyYbUdqSbhooh$>
>>>>>         ] or build it from scratch from direct3d12 [
>>>>>         https://github.com/openjdk/jfx-sandbox/tree/direct3d12
>>>>>         <https://urldefense.com/v3/__https://github.com/openjdk/jfx-sandbox/tree/direct3d12__;!!ACWV5N9M2RV99hQ!NmrWBwOSB5NyqKCJx6q9-tF7teG_yDvJ2o7OEusvsVHTtYtUYWFIH_wlix7deQTg_OvqIoRsq-bCyYbUdvfpvAcN$>
>>>>>         ] branch (make sure to *build with -PCONF=Release*; at the
>>>>>         time of writing this email there is no functional
>>>>>         difference between the sandbox repo and the EA2 build).
>>>>>      3. Put the script in the same directory as
>>>>>         *renderperf/RenderPerfTest.java* - I usually copy the
>>>>>         contents of tests/performance/animation/RenderPerfTest/src
>>>>>         into a separate directory where the script is located.The
>>>>>         script will look in the current directory specifically for
>>>>>         "*renderperf*"directory containing a
>>>>>         "*RenderPerfTest.java*"source file.
>>>>>      4. Ensure nothing else is running on your system.
>>>>>      5. Perform a baseline test run with D3D backend:
>>>>>         *./run_renderperf_all.sh -j <path_to_jfx_sdk> -b d3d -r 3
>>>>>         *When the script is done, this should result in
>>>>>         "*RenderPerf_results_d3d-<date>-<time>.csv*" file. This
>>>>>         will let us establish how your machine performs on
>>>>>         RenderPerf’s test cases on the old D3D backend.
>>>>>      6. Perform a perf test run for D3D12 backend:
>>>>>         *./run_renderperf_all.sh -j <path_to_jfx_sdk> -b d3d12 -r 3
>>>>>         *This should result in
>>>>>         "*RenderPerf_results_d3d12-<date>-<time>.csv*" file. The
>>>>>         results will be used as a comparisonto D3D backend.
>>>>>
>>>>>     Once you are done, reply to this email thread with details
>>>>>     what hardware you ran the tests on and with contents of both
>>>>>     CSV files specifying which came from which test run - I’m
>>>>>     pretty sure *attachments will be stripped when sending an
>>>>>     email to the mailing list*, so to make sure the results get to
>>>>>     us you should paste them inline. Also, include the console
>>>>>     output of running any JavaFX app on D3D12 backend with
>>>>>     "-Dprism.verbose=true".
>>>>>
>>>>>     Note that these tests will run for quite a bit of time. Each
>>>>>     test case's single run will take 15 seconds - 5 seconds of
>>>>>     warm-up and 10 seconds of actual test run where FPS is
>>>>>     measured. Testing every single case, 3 runs each, for a single
>>>>>     backend takes approximately 40 minutes - ensure your computer
>>>>>     won't lock or turn off the screens during that process.
>>>>>
>>>>>     *_Test script reference:_*
>>>>>
>>>>>     *./run_renderperf_all.sh -j/--jfx **<path_to_jfx_sdk>
>>>>>     [-b/--backend <backend>] [-r/--runs <runs>]*
>>>>>
>>>>>     Where:
>>>>>
>>>>>     *-j, --jfx * - required; path to directory where JavaFX SDK is
>>>>>     located (has to be where JavaFX bin and lib folders are located)
>>>>>
>>>>>     *-b, --backend*  - optional, defaults to "d3d12"; short-hand
>>>>>     for which Prism backend to use. Whatever is set here will be
>>>>>     forwarded to "-Dprism.order" property.
>>>>>
>>>>>     *-r, --runs*  - optional, defaults to 3; how many times each
>>>>>     test case should run. Script will average FPS results from
>>>>>     these runs.
>>>>>
>>>>>     Notes:
>>>>>
>>>>>        * Closing currently running test during the warm-up stage
>>>>>     (first 5 seconds since starting the execution of the test
>>>>>     case) should stop the test script early.
>>>>>
>>>>>       * Script starts by declaring an array of test cases and
>>>>>     object counts to run. We recommend leaving those as they are,
>>>>>     however if there are tests which do not load because of a
>>>>>     "Timeout"message(the script will then exit early) or perform
>>>>>     significantly worse on D3D backend (below 20 FPS) you can
>>>>>     lower the object count and retry.
>>>>>
>>>>>     Let me know if you have any problems with running the tests.
>>>>>     And, in advance, thanks for your help!
>>>>>
>>>>>     Regards,
>>>>>
>>>>>     Lukasz
>>>>>
>>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/openjfx-dev/attachments/20251125/4314c2ce/attachment-0001.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: RenderPerf_results-d3d12-20251124-233713.csv
Type: application/vnd.ms-excel
Size: 919 bytes
Desc: not available
URL: <https://mail.openjdk.org/pipermail/openjfx-dev/attachments/20251125/4314c2ce/RenderPerf_results-d3d12-20251124-233713-0001.csv>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: RenderPerf_results-d3d-20251124-230652.csv
Type: application/vnd.ms-excel
Size: 923 bytes
Desc: not available
URL: <https://mail.openjdk.org/pipermail/openjfx-dev/attachments/20251125/4314c2ce/RenderPerf_results-d3d-20251124-230652-0001.csv>


More information about the openjfx-dev mailing list