================
@@ -9384,6 +9384,31 @@ The full documentation is available here: 
<https://learn.microsoft.com/en-us/win
   }];
 }
 
+def HLSLInterpolationModifierDocs : Documentation {
+  let Category = DocCatVariable;
+  let Heading = "HLSL Interpolation Modifiers";
+  let Content = [{
+The HLSL keywords `nointerpolation`, `linear`, `centroid`,
+`noperspective`, `sample`, and `center` control interpolation of pixel
+shader inputs and vertex shader outputs.
+
+When applied to an aggregate type, the modifier propagates recursively to every
+scalar or vector of the type. A modifier on an inner field overrides one
+inherited from an enclosing declaration.
+
+`nointerpolation` cannot be combined with another interpolation modifier.
+For pixel shader inputs and vertex shader outputs, it cannot be used on
+`SV_Position`, and integer, boolean, and 64-bit floating-point components only
+support `nointerpolation`.
----------------
Icohedron wrote:

Should the [0047 
proposal](https://github.com/llvm/wg-hlsl/blob/a7681e78c9219ee05170b3ea97e4dc9e6a12ca51/proposals/0047-semantic-signatures-metadata-schema.md)
 in wg-hlsl be updated to include this statement?

> For pixel shader inputs and vertex shader outputs, `nointerpolation` cannot 
> be used on
`SV_Position`, and integer, boolean, and 64-bit floating-point components only
support `nointerpolation`.

Right now, [the wording in 
0047](https://github.com/llvm/wg-hlsl/blob/a7681e78c9219ee05170b3ea97e4dc9e6a12ca51/proposals/0047-semantic-signatures-metadata-schema.md?plain=1#L302-L303)
 seems to imply that `nointerpolation` can not be used on *any* integer, 
boolean, or 64-bit floating-point:

>    - Error: Any non-`nointerpolation` modifier on integer, boolean and 64-bit
     floating point

Which would imply something like this is invalid:
```hlsl
linear uint helper() { return 1; } // use of `linear` on a `uint`
struct VSOut {
  float4 position : SV_Position;
  centroid float value : TEXCOORD0;
};
VSOut vs(float4 position : POSITION) {
  VSOut output;
  output.position = position;
  output.value = position.x + helper();
  return output;
}
```
but it is valid according to this current PR implementation, and DXC 
(https://hlsl.godbolt.org/z/Mb6x54n7x)


https://github.com/llvm/llvm-project/pull/225452
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to