[Matrix] Implement matrix support for the `lerp` HLSL Function
- Dominant language
- LLVM
- Stars
- 40.5k
- Forks
- 18.7k
- PR merge metrics
- PR metrics pending
Description
> Note: This issue tracks matrix support for `lerp`. The original implementation issue is [here](https://github.com/llvm/llvm-project/issues/70102).
Matrix requirements:
- [ ] https://github.com/llvm/wg-hlsl/issues/387
## HLSL:
Performs a linear interpolation.
## Parameters
| Item | Description |
|--------------------------------------------------------|-------------------------------------------------------------------------------------------------------|
| *x*
| \[in\] The first-floating point value.
|
| *y*
| \[in\] The second-floating point value.
|
| *s*
| \[in\] A value that linearly interpolates between the *x* parameter and the *y* parameter.
|
## Return Value
The result of the linear interpolation.
## Type Description
| Name | [**Template Type**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src/direct3dhlsl/dx-graphics-hlsl-intrinsic-functions.md) | [**Component Type**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src/direct3dhlsl/dx-graphics-hlsl-intrinsic-functions.md) | Size |
|-------|----------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------|--------------------------------|
| *x* | [**scalar**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src/direct3dhlsl/dx-graphics-hlsl-intrinsic-functions.md), **vector**, or **matrix** | [**float**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src/WinProg/windows-data-types.md) | any |
| *y* | same as input *x* | [**float**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src/WinProg/windows-data-types.md) | same dimension(s) as input *x* |
| *s* | same as input *x* | [**float**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src/WinProg/windows-data-types.md) | same dimension(s) as input *x* |
| *ret* | same as input *x* | [**float**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src/WinProg/windows-data-types.md) | same dimension(s) as input *x* |
## Remarks
Linear interpolation is based on the following formula: x\*(1-s) + y\*s which can equivalently be written as x + s\*(y-x).
## Minimum Shader Model
This function is supported in the following shader models.
| Shader Model | Supported |
|------------------------------------------------------------------------------------|-----------------------------|
| [Shader Model 2 (DirectX HLSL)](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src/direct3dhlsl/dx-graphics-hlsl-sm2.md) and higher shader models | yes |
| [Shader Model 1 (DirectX HLSL)](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src/direct3dhlsl/dx-graphics-hlsl-sm1.md) | yes (vs\_1\_1 and ps\_1\_1) |
## See also
-
[**Intrinsic Functions (DirectX HLSL)**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src/direct3dhlsl/dx-graphics-hlsl-intrinsic-functions.md)
Contributor guide
Research direction
Start with the original implementation issue (LLVM #70102) and the linked HLSL matrix requirement (wg-hlsl #387), then compare the documented lerp signature and matrix behavior in this issue with the existing implementation. Done means matrix inputs are supported consistently with the stated dimensions and interpolation semantics, with relevant validation covered.
Written by the indexing model from the issue text.
Assessment
- Domain
- compilers
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100