JavaFX Direct3D 12 - Call for performance testing help

Christopher Schnick crschnick at xpipe.io
Fri Nov 14 18:07:39 UTC 2025


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 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
>>>
>>> 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/ ] or build it from
>>>     scratch from direct3d12 [
>>>     https://github.com/openjdk/jfx-sandbox/tree/direct3d12 ] 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> *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
>>>  2. Get JavaFX Direct3D 12 build - either download the EA2 SDK from
>>>     [ https://jdk.java.net/javafxdirect3d12/ ] or build it from
>>>     scratch from direct3d12 [
>>>     https://github.com/openjdk/jfx-sandbox/tree/direct3d12 ] 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/20251114/c71cb621/attachment-0001.htm>


More information about the openjfx-dev mailing list