hlsl-specs

HLSL 202x and 202y

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:

HLSL 202x will not include features for all differences between DXC and Clang. Some of the differences, 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.