Skip to content

Commit

Permalink
Add a proposal to describe 202x and 202y (#178)
Browse files Browse the repository at this point in the history
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
llvm-beanz authored Mar 27, 2024
1 parent c320853 commit e199572
Showing 1 changed file with 74 additions and 0 deletions.
74 changes: 74 additions & 0 deletions proposals/0020-hlsl-202x-202y.md
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 %} -->

0 comments on commit e199572

Please sign in to comment.