JavaFX Direct3D 12 - Call for performance testing help
Nir Lisker
nlisker at gmail.com
Sat Nov 15 15:35:00 UTC 2025
I'm getting an error that "Microsoft Visual
Studio/2022/Community/VC/Tools/MSVC/14.40.33807/bin/Hostx64/x64/cl.exe"
can't be found. Indeed, I have a newer version. Do I need to downgrade to
that specific one?
On Fri, Nov 14, 2025 at 4:10 PM Lukasz Kostyra <lukasz.kostyra at oracle.com>
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 comparison to 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/20251115/e40b81e2/attachment-0001.htm>
More information about the openjfx-dev
mailing list