JavaFX Direct3D 12 - Call for performance testing help
Kevin Rushforth
kevin.rushforth at oracle.com
Fri Nov 14 18:04:39 UTC 2025
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/c29eef8e/attachment-0001.htm>
More information about the openjfx-dev
mailing list