[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