<!DOCTYPE html><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body>
    While that might be easier, it is not possible for us to provide
    such a binary.<br>
    <br>
    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.<br>
    <br>
    -- Kevin<br>
    <br>
    <br>
    <div class="moz-cite-prefix">On 11/14/2025 9:50 AM, Christopher
      Schnick wrote:<br>
    </div>
    <blockquote type="cite" cite="mid:953ef489-27df-435b-993f-4a345643aa38@xpipe.io">
      
      <p>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?<br>
        <br>
        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.</p>
      <div class="moz-cite-prefix">On 14/11/2025 15:10, Lukasz Kostyra
        wrote:<br>
      </div>
      <blockquote type="cite" cite="mid:IA3PR10MB8682E5772DA242391EE8DC8FFECAA@IA3PR10MB8682.namprd10.prod.outlook.com">
        <meta name="Generator" content="Microsoft Word 15 (filtered medium)">
        <style>@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        mso-ligatures:standardcontextual;
        mso-fareast-language:EN-US;}a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0cm;
        margin-right:0cm;
        margin-bottom:0cm;
        margin-left:36.0pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        mso-ligatures:standardcontextual;
        mso-fareast-language:EN-US;}span.EmailStyle20
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;
        mso-ligatures:none;}div.WordSection1
        {page:WordSection1;}ol
        {margin-bottom:0cm;}ul
        {margin-bottom:0cm;}</style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
        <div class="WordSection1">
          <p class="MsoNormal"><span lang="PL">Hello all,<o:p></o:p></span></p>
          <p class="MsoNormal"><span lang="PL"><o:p> </o:p></span></p>
          <p class="MsoNormal"><span lang="EN-US">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): <a href="https://github.com/openjdk/jfx-sandbox/tree/direct3d12/tests/performance/animation/RenderPerfTest/src/renderperf" moz-do-not-send="true" class="moz-txt-link-freetext">
https://github.com/openjdk/jfx-sandbox/tree/direct3d12/tests/performance/animation/RenderPerfTest/src/renderperf</a><br>
              <br>
              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 :)<o:p></o:p></span></p>
          <p class="MsoNormal"><span lang="EN-US"><br>
              <b><u>New steps for running tests:<o:p></o:p></u></b></span></p>
          <ol style="margin-top:0cm" start="1" type="1">
            <li class="MsoListParagraph" style="margin-left:0cm;mso-list:l4 level1 lfo5"><span lang="EN-US">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<o:p></o:p></span></li>
            <li class="MsoListParagraph" style="margin-left:0cm;mso-list:l4 level1 lfo5">Get JavaFX
              Direct3D 12 build - either download the EA2 SDK from [ <a href="https://jdk.java.net/javafxdirect3d12/" moz-do-not-send="true" class="moz-txt-link-freetext">https://jdk.java.net/javafxdirect3d12/</a>
              ] or build it from scratch from direct3d12 [ <a href="https://github.com/openjdk/jfx-sandbox/tree/direct3d12" moz-do-not-send="true" class="moz-txt-link-freetext">https://github.com/openjdk/jfx-sandbox/tree/direct3d12</a>
              ] branch (make sure to <b>build with -PCONF=Release</b>;
              at the time of writing this email there is no functional
              difference between the sandbox repo and the EA2 build).<o:p></o:p></li>
            <li class="MsoListParagraph" style="margin-left:0cm;mso-list:l4 level1 lfo5">RenderPerf
              can be run with <span lang="EN-US">(underlined parts you
                need to fill in yourself)</span>:<br>
                  <b>java --upgrade-module-path="<u><path_to_jfx_sdk>/lib</u>"
--add-modules=javafx.base,javafx.controls,javafx.graphics,jdk.jsobject,javafx.media
                --enable-native-access=javafx.graphics -Dprism.order=<u><backend></u>
                renderperf/RenderPerfTest.java --output-csv -r <u><runs><br>
                </u></b><span lang="EN-US">Where:<br>
              </span><b><span lang="EN-US">    <path_to_jfx_sdk></span></b> - 
              path to directory where JavaFX SDK is located (has to be
              where JavaFX bin and lib folders <span lang="EN-US">reside</span>)<br>
              <b><span lang="EN-US">    <backend> </span></b>- 
              short-hand for which Prism backend to use<br>
              <span lang="EN-US">    <b><runs></b></span>  - how
              many times each test case should run<span lang="EN-US">;</span><span lang="EN-US"> </span><span lang="EN-US">RenderPerf </span>will
              average FPS results from these runs<o:p></o:p></li>
          </ol>
          <p class="MsoListParagraph"><o:p> </o:p></p>
          <ol style="margin-top:0cm" start="4" type="1">
            <li class="MsoListParagraph" style="margin-left:0cm;mso-list:l4 level1 lfo5"><span lang="EN-US">Running RenderPerf like above will produce
                <b>RenderPerf_results-<backend>-<date>-<time>.csv</b>
                in your current directory.</span><o:p></o:p></li>
          </ol>
          <p class="MsoNormal"><o:p> </o:p></p>
          <p class="MsoNormal"><b><u><span lang="EN-US">Examples:<o:p></o:p></span></u></b></p>
          <ol style="margin-top:0cm" start="1" type="1">
            <li class="MsoListParagraph" style="margin-left:0cm;mso-list:l1 level1 lfo7">For D3D
              baseline test, run:<br>
                  <b>java --upgrade-module-path="<u><path_to_jfx_sdk></u>/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</b><br>
              <br>
              <o:p></o:p></li>
            <li class="MsoListParagraph" style="margin-left:0cm;mso-list:l1 level1 lfo7">For D3D12
              baseline test, run:<br>
                  java --upgrade-module-path="<b><u><path_to_jfx_sdk></u></b>/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<o:p></o:p></li>
          </ol>
          <p class="MsoNormal"><o:p> </o:p></p>
          <p class="MsoNormal"><b><u><span lang="EN-US">Notes:<o:p></o:p></span></u></b></p>
          <p class="MsoNormal"><span lang="EN-US">* Closing the test on
              warm-up stage will stop the test run early<o:p></o:p></span></p>
          <p class="MsoNormal"><span lang="EN-US">* Similarly to the
              test script, RenderPerfTest defines default object numbers
              at the beginning as <b>Map<String, Integer>
                defaultObjectCounts </b>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.<o:p></o:p></span></p>
          <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
          <p class="MsoNormal"><span lang="EN-US">Thanks once again for
              your help!<o:p></o:p></span></p>
          <p class="MsoNormal"><span lang="EN-US">-Lukasz<o:p></o:p></span></p>
          <p class="MsoNormal"><o:p> </o:p></p>
          <div>
            <div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
              <p class="MsoNormal"><b><span lang="EN-US" style="mso-ligatures:none;mso-fareast-language:#0C00">From:</span></b><span lang="EN-US" style="mso-ligatures:none;mso-fareast-language:#0C00">
                  openjfx-dev <a class="moz-txt-link-rfc2396E" href="mailto:openjfx-dev-retn@openjdk.org" moz-do-not-send="true"><openjfx-dev-retn@openjdk.org></a>
                  <b>On Behalf Of </b>Lukasz Kostyra<br>
                  <b>Sent:</b> Thursday, 13 November 2025 15:50<br>
                  <b>To:</b> <a class="moz-txt-link-abbreviated moz-txt-link-freetext" href="mailto:openjfx-dev@openjdk.org" moz-do-not-send="true">openjfx-dev@openjdk.org</a><br>
                  <b>Subject:</b> JavaFX Direct3D 12 - Call for
                  performance testing help<o:p></o:p></span></p>
            </div>
          </div>
          <p class="MsoNormal"><o:p> </o:p></p>
          <p class="MsoNormal">Hello openjfx-dev,<o:p></o:p></p>
          <p class="MsoNormal"><o:p> </o:p></p>
          <p class="MsoNormal">Because Windows is very open
            hardware-wise, it is difficult to prepare the backend for
            all possible hardware combinations <span lang="EN-US">available</span>,
            especially from <span lang="EN-US">performance perspective.</span>
            To make sure JavaFX performance does not degrade compared to
            old D3D backend we would like to call for volunteers to <span lang="EN-US">help </span>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 <span lang="EN-US">while </span>moving
            forward with optimization effort for Direct3D 12.<o:p></o:p></p>
          <p class="MsoNormal"><o:p> </o:p></p>
          <p class="MsoNormal">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 N<span lang="EN-US">v</span>idia GPU. We are primarily looking
            for testing <span lang="EN-US">Direct3D 12 backend <b>on </b></span><b>a
              system running an AMD discrete GPU</b>, but any hardware
            combinations are welcome - the more the merrier :). Also
            note that these tests <b>require a Windows machine</b>, as
            D3D12 backend is Windows-only.<o:p></o:p></p>
          <p class="MsoNormal"><o:p> </o:p></p>
          <p class="MsoNormal"><span lang="EN-US">We run performance
              testing using RenderPerfTest JavaFX app</span> located in
            the JavaFX repository under
            "tests/performance/animation/RenderPerfTest". <span lang="EN-US">I wrote a bash script to use with this app
              for performance-testing the backend</span>. The script
            will run all available demos on RenderPerfTest with a set
            amount of objects per test, average the FPS results from
            each <span lang="EN-US">run </span>and output the results
            into a CSV file.<o:p></o:p></p>
          <p class="MsoNormal"><o:p> </o:p></p>
          <p class="MsoNormal"><o:p> </o:p></p>
          <p class="MsoNormal"><b><u>How to run perf tests:<o:p></o:p></u></b></p>
          <ol style="margin-top:0cm" start="1" type="1">
            <li class="MsoListParagraph" style="margin-left:0cm;mso-list:l0 level1 lfo6"><span lang="EN-US">Download the test script - <a href="https://gist.github.com/lukostyra/bc354a5fd845b82805ffb3380caebe9a" moz-do-not-send="true" class="moz-txt-link-freetext">https://gist.github.com/lukostyra/bc354a5fd845b82805ffb3380caebe9a</a><o:p></o:p></span></li>
            <li class="MsoListParagraph" style="margin-left:0cm;mso-list:l0 level1 lfo6">Get JavaFX
              Direct3D 12 build - either download the EA2 SDK from [ <a href="https://jdk.java.net/javafxdirect3d12/" moz-do-not-send="true" class="moz-txt-link-freetext">https://jdk.java.net/javafxdirect3d12/</a>
              ] or build it from scratch from direct3d12 [ <a href="https://github.com/openjdk/jfx-sandbox/tree/direct3d12" moz-do-not-send="true" class="moz-txt-link-freetext">https://github.com/openjdk/jfx-sandbox/tree/direct3d12</a>
              ] branch (make sure to <b>build with -PCONF=Release</b>;
              at the time of writing this email there is no functional
              difference between the sandbox repo and the EA2 build).<o:p></o:p></li>
            <li class="MsoListParagraph" style="margin-left:0cm;mso-list:l0 level1 lfo6">Put the
              script in the same directory as <b>renderperf/RenderPerfTest.java</b>
              <span lang="EN-US">- </span>I usually <span lang="EN-US">
                copy </span>the contents of
              tests/performance/animation/RenderPerfTest/src into a
              separate directory where the script is located.<span lang="EN-US"> The script will look in the current
                directory specifically for </span>"<b><span lang="EN-US">renderperf</span></b>"<span lang="EN-US">
                directory containing a </span>"<b><span lang="EN-US">RenderPerfTest.java</span></b>"<span lang="EN-US"> source file.<o:p></o:p></span></li>
            <li class="MsoListParagraph" style="margin-left:0cm;mso-list:l0 level1 lfo6">Ensure
              nothing else is running on your system.<o:p></o:p></li>
            <li class="MsoListParagraph" style="margin-left:0cm;mso-list:l0 level1 lfo6">Perform a
              baseline test run with D3D backend:<br>
              <span lang="EN-US">   </span><b>./run_renderperf_all.sh -j
                <path_to_jfx_sdk> -b d3d -r 3<br>
              </b><span lang="EN-US">When the script is done, t</span>his
              should result in "<b>RenderPerf_results_d3d-<date>-<time>.csv</b>"
              file. This will let us establish how your machine performs
              on <span lang="EN-US">RenderPerf’s </span>test cases on
              the old D3D backend.<o:p></o:p></li>
            <li class="MsoListParagraph" style="margin-left:0cm;mso-list:l0 level1 lfo6">Perform a
              perf test run for D3D12 backend:<br>
              <span lang="EN-US">   </span><b>./run_renderperf_all.sh -j
                <path_to_jfx_sdk> -b d3d12 -r 3<br>
              </b>This should result in "<b>RenderPerf_results_d3d12-<date>-<time>.csv</b>"
              file. <span lang="EN-US">The results </span>will be used
              as a comparison<span lang="EN-US"> to D3D backend</span>.<o:p></o:p></li>
          </ol>
          <p class="MsoNormal"><o:p> </o:p></p>
          <p class="MsoNormal"><span lang="EN-US">Once you are done, r</span>eply
            to this email thread with details what hardware you ran the
            tests on and with <span lang="EN-US">contents of </span>both
            CSV file<span lang="EN-US">s specifying which came from
              which test run - I’m pretty sure <b>attachments will be
                stripped when sending an email to the mailing list</b>,
              so to make sure the results get to us you should paste
              them inline</span>. Also, include the console output of
            running any JavaFX app on D3D12 backend with
            "-Dprism.verbose=true".<o:p></o:p></p>
          <p class="MsoNormal"><o:p> </o:p></p>
          <p class="MsoNormal">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-u<span lang="EN-US">p</span> 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.<o:p></o:p></p>
          <p class="MsoNormal"><o:p> </o:p></p>
          <p class="MsoNormal"><o:p> </o:p></p>
          <p class="MsoNormal"><b><u>Test script reference:<o:p></o:p></u></b></p>
          <p class="MsoNormal">    <b>./run_renderperf_all.sh -j/--jfx
            </b><b><span lang="EN-US"><</span>path_to_jfx_sdk>
              [-b/--backend <backend>] [-r/--runs <runs>]<o:p></o:p></b></p>
          <p class="MsoNormal"><o:p> </o:p></p>
          <p class="MsoNormal">Where:<o:p></o:p></p>
          <p class="MsoNormal">    <b>-j, --jfx </b> -  required; path
            to directory where JavaFX SDK is located (has to be where
            JavaFX bin and lib folders are located)<o:p></o:p></p>
          <p class="MsoNormal">    <b>-b, --backend</b>  -  optional,
            defaults to "d3d12"; short-hand for which Prism backend to
            use. Whatever is set here will be forwarded to
            "-Dprism.order" property.<o:p></o:p></p>
          <p class="MsoNormal">    <b>-r, --runs</b>  -  optional,
            defaults to 3; how many times each test case should run.
            Script will average FPS results from these runs.<o:p></o:p></p>
          <p class="MsoNormal"><o:p> </o:p></p>
          <p class="MsoNormal">Notes:<o:p></o:p></p>
          <p class="MsoNormal">   * Closing <span lang="EN-US">currently
              running test during the</span> warm-up stage (first 5
            seconds since starting the execution of the test case)
            should stop the test script earl<span lang="EN-US">y</span>.<o:p></o:p></p>
          <p class="MsoNormal">  * 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 <span lang="EN-US">a </span>"Timeout"<span lang="EN-US"> message</span><span lang="EN-US"> </span>(the
            script will then exit early) <span lang="EN-US">or perform
              significantly worse on D3D backend (below 20 FPS) </span>you
            <span lang="EN-US">can </span>lower the object count and
            retry.<o:p></o:p></p>
          <p class="MsoNormal"><o:p> </o:p></p>
          <p class="MsoNormal"><o:p> </o:p></p>
          <p class="MsoNormal"><span lang="EN-US">Let me know if you
              have any problems with running the tests. And, in advance,
              thanks for your help!<o:p></o:p></span></p>
          <p class="MsoNormal"><o:p> </o:p></p>
          <p class="MsoNormal">Regards,<o:p></o:p></p>
          <p class="MsoNormal">Lukasz<o:p></o:p></p>
        </div>
      </blockquote>
    </blockquote>
    <br>
  </body>
</html>