RFR: 8271024: Implement macOS Metal Rendering Pipeline
Kevin Rushforth
kcr at openjdk.org
Thu Jun 12 23:32:31 UTC 2025
On Thu, 12 Jun 2025 05:41:23 GMT, Ambarish Rapte <arapte at openjdk.org> wrote:
> ### Description
> This is the implementation of new graphics rendering pipeline for JavaFX using Metal APIs on MacOS.
> We released two Early Access (EA) builds and have reached a stage where it is ready to be integrated.
> Default rendering pipeline on macOS has not been changed by this PR. OpenGL still stays as the default rendering pipeline and Metal rendering pipeline is optional to choose (by providing `-Dprism.order=mtl`)
> The `-Dprism.verbose=true` option can be used to verify the rendering pipeline in use.
>
> ### Details about the changes
>
> **Shader changes**
> - MSLBackend class: This is the primary class that parses (Prism and Decora) jsl shaders into Metal shaders(msl)
> - There are a few additional Metal shader files added under directory : modules/javafx.graphics/src/main/native-prism-mtl/msl
>
> **Build changes** - There are new tasks added to build.gradle for
> - Generation/ Compilation/ linking of Metal shaders
> - Compilation of Prism Java and Objective C files
>
> **Prism** - Prism is the rendering engine of JavaFX.
> - Added Metal specific Java classes and respective native implementation which use Metal APIs
> - Java side changes:
> - New Metal specific classes: Classes prefixed with MTL, are added here : modules/javafx.graphics/src/main/java/com/sun/prism/mtl
> - Modification to Prism common classes: A few limited changes were required in Prism common classes to support Metal classes.
> - Native side changes:
> - New Metal specific Objective C implementation is added here: modules/javafx.graphics/src/main/native-prism-mtl
>
> **Glass** - Glass is the windowing toolkit of JavaFX
> - Existing Glass classes are refactored to support both OpenGL and Metal pipelines
> - Added Metal specific Glass implementation.
>
> ### Testing
> - Testing performed on different hardware and macOS versions.
> - HW - macBooks with Intel, Intel with discrete graphics card, Apple Silicon (M1, M2 and M4)
> - macOS versions - macOS 13, macOS 14 and macOS 15
> - Functional Testing:
> - All headful tests pass with Metal pipeline.
> - Verified samples applications: Ensemble and toys
> - Performance Testing:
> - Tested with RenderPerfTest: Almost all tests match/exceed es2 performance except a few that fall a little short on different hardwares. These will be addressed separately (there are open bugs already filed)
>
> ### Note to reviewers :
> - Providing `-Dprism.order=mtl` option is a must for testing the Metal pipeline
> - It would be a good idea to test both OpenGL and Metal pipelines
> - Known issues and tasks ...
@tiainen Would you be able to look at the build changes and also do a test build?
-------------
PR Comment: https://git.openjdk.org/jfx/pull/1824#issuecomment-2968435463
More information about the openjfx-dev
mailing list