-
Notifications
You must be signed in to change notification settings - Fork 37
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add a proposal to describe 202x and 202y (#178)
I've talked about 202x and 202y in passing but haven't really written down my thoughts. This proposal is the start of writing down how I think we should classify the two language versions.
- Loading branch information
1 parent
c320853
commit e199572
Showing
1 changed file
with
74 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
<!-- {% raw %} --> | ||
|
||
# HLSL 202x and 202y | ||
|
||
* Proposal: [0020](0020-hlsl-202x-202y.md) | ||
* Author(s): [Chris Bieneman](https://github.com/llvm-beanz) | ||
* Sponsor: [Chris Bieneman](https://github.com/llvm-beanz) | ||
* Status: **Under Consideration** | ||
* Impacted Projects: DXC & Clang | ||
|
||
## Introduction | ||
|
||
This proposal seeks to provide a framework for defining the next two versions of | ||
the HLSL programming language. It seeks to define HLSL 202x as a bridge between | ||
DXC's implementation and Clang's implementation, and HLSL 202y as the next major | ||
feature release. | ||
|
||
## Motivation | ||
|
||
The HLSL compiler is undergoing a massive transition moving to Clang. Since | ||
the HLSL language is not formally specified and existing implementations | ||
disagree about fundamental behaviors, the new compiler will not be fully | ||
compatible with the previous compilers. This will create three conflicting | ||
implementations. | ||
|
||
This poses a challenge for users as they seek to migrate to Clang. Sources used | ||
with DXC may not be compatible with Clang by preventing the ability to switch to | ||
Clang piecemeal or being able to A/B test shaders. | ||
|
||
## Version Naming and Management | ||
|
||
HLSL versions names match the intended year of completion. Historically we | ||
missed with HLSL 2021 not completing the implementation and deployment in 2023. | ||
Due to schedule uncertainty and a desire to not repeat _that mistake_, future | ||
versions have placeholder names. | ||
|
||
The next language version is HLSL 202x. HLSL 202y will release after 202x. As we | ||
near the final release of 202x the release name will change to the target year. | ||
The same will follow for 202y. | ||
|
||
The expectation is that HLSL `x` is a placeholder integer value less than `y`. | ||
All features added to HLSL 202x will be implicitly inherited by HLSL 202y. | ||
|
||
## Proposed Solution | ||
|
||
This proposal adopts the development of two new language versions for HLSL in | ||
parallel. The proposal adopts a narrowly focused HLSL 202x which will be | ||
supported by both DXC and Clang, and a wider focused HLSL 202y feature release | ||
which will only be supported by Clang. | ||
|
||
### HLSL 202x | ||
|
||
HLSL 202x shall contain features that bridge compatibility between DXC and | ||
Clang. This shall be limited to cases where Clang's implementations do not match | ||
DXC and it is expected to cause potential disruption. | ||
|
||
Existing proposals that fall into this category are: | ||
* [Numeric Constants](/proposals/0003-numeric-constants.md) | ||
* [Conforming Literals](/proposals/0017-conforming-literals.md) | ||
|
||
HLSL 202x will not include features for all differences between DXC and Clang. | ||
Some of the | ||
[differences](https://clang.llvm.org/docs/HLSL/ExpectedDifferences.html), are | ||
not expected to have meaningful difference to users, or have reasonable source | ||
compatible workarounds. HLSL 202x is specifically for differences that do not | ||
have workarounds and may pose a barrier to adoption. | ||
|
||
### HLSL 202y | ||
|
||
HLSL 202y shall contain features that expand HLSL. This is all other outstanding | ||
feature proposals. | ||
|
||
|
||
<!-- {% endraw %} --> |