Opening HLSL Planning

Chris Bieneman

Since early 2017, the DirectX Shader Compiler (DXC) has been open source and available on GitHub. DXC is based on the LLVM 3.7 release of Clang, which enables compiler-driven IDE integrations, powerful language tooling, and has empowered HLSL to grow as a language to include highly requested features like C++ templates and operator overloading.

In the years since DXC’s release on GitHub the HLSL compiler team has valued and appreciated many contributions from contributors across the industry. Earlier this year, the HLSL compiler team announced the start of an effort to bring HLSL support to Clang. This ongoing effort is a part of our commitment to open-source software development and continuing advancement of the HLSL tools and language.

HLSL Shiba Playing with LLVM Wyvren

Today we are taking the next step in expanding the HLSL community, by introducing a new public language feature planning process. The new process is hosted on GitHub and takes inspiration from Rust and Swift’s open language design process.

There are a few important caveats to this process.

First and foremost, not all HLSL features can go through this process. Some features added to HLSL require coordination with hardware vendors which our team conducts under non-disclosure agreements. Those features will not go through this process publicly.

Second, with this process we’re introducing a goal statement to focus language evolution. The goal statement may change with each version highlighting the changing needs of the industry. The goal statement for the next version of HLSL can be found here.

Under this process, there are two ways that contributors can propose features. The simplest way is to file a GitHub issue against the repository. For more advanced contributors who want to take an active role in designing a language feature, you can write a proposal using the template and submit a pull request. Before contributing, please read the process documentation to familiarize yourself with the process. The full process documentation is in the GitHub repository.

Process Overview

Image Flow Chart 2

Under the new process proposals are written and contributed to the new HLSL-Specs repository. Newly merged proposals start in the Under Consideration state. Features Under Consideration must seem useful to our users and be consistent with the goals of the upcoming HLSL version. Features that are worth consideration may be approved and merged into the repository to enable wider collaboration. The author, sponsor, and any other interested contributors will work together to build a detailed feature description. After completing the feature description, the proposal is marked Under Review, and we solicit for wider feedback from contributors and partners.

Proposals in the Under Consideration or Under Review states are actively being worked on, but it is not a commitment to include them in HLSL. Once a feature completes its review, it will either be marked RejectedDeferred or Accepted.

Proposals marked Accepted are features we want to add to the language with a target language version. Marking a feature as Accepted is a signal to the community that we will accept contributions implementing the feature.

Accepted features may not make a specific release, and if it becomes clear that they are not going to make a release the feature will be marked Deferred. Features may also be marked Deferred when we believe they are valuable, but may not align with the current release goals, or available resources. Marking them as Deferred signals that we will re-evaluate them at a later time.

This is distinct from Rejected features. Features will only be Rejected if we believe they are inconsistent with the goals and direction of the HLSL language in a way that is unlikely to change in the future. Any feature proposal that is Rejected will be updated with a detailed explanation so that if the topic resurfaces, we have a documented thought process for why the feature was Rejected.

We ask that anyone contributing a feature request or proposal search the existing issues and pull requests to see if your feature has already been submitted.

We are very excited about the future of HLSL and about welcoming the ideas and contributions of our growing open-source community. If you’re interested in getting involved, we have a monthly HLSL LLVM Working Group meeting on the LLVM Community Calendar. You can also find the HLSL team at either of our GitHub repositories, or you can find me as @beanz on a variety of Slack, and Discord servers, or on any of LLVM’s communication platforms.

We can’t wait to see what great ideas you bring our way!