llvm / llvm-project

The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.
http://llvm.org
Other
27.92k stars 11.52k forks source link

Implement the `asfloat` HLSL Function #70098

Open llvm-beanz opened 10 months ago

llvm-beanz commented 10 months ago

DirectX

There were no DXIL opcodes found for asfloat.

SPIR-V

Description:

Test Case(s)

Example 1

//dxc asfloat_test.hlsl -T lib_6_8  -enable-16bit-types -spirv -fspv-target-env=universal1.5 -fcgl -O0

export float4 fn(float p1) {
    return asfloat(p1);
}

Example 2

//dxc asfloat_1_test.hlsl -T lib_6_8 -enable-16bit-types -O0

export float4 fn(uint p1) {
    return asfloat(p1);
}

Example 3

//dxc asfloat_2_test.hlsl -T lib_6_8 -enable-16bit-types -O0

export float4 fn(int p1) {
    return asfloat(p1);
}

HLSL:

Interprets the bit pattern of x as a floating-point number.

ret asfloat(x)

Parameters

Item Description
x
[in] The input value.

Return Value

The input interpreted as a floating-point number.

Type Description

Name Template Type Component Type Size
x scalar, vector, or matrix float, int, uint any
ret same as input x float same dimension(s) as input x

Function Overloads

`float<x> asfloat(float<x> value);` `float<x> asfloat(int<x> value);` `float<x> asfloat(uint<x> value);`

Minimum Shader Model

This function is supported in the following shader models.

Shader Model Supported
Shader Model 4 and higher shader models yes
Shader Model 3 (DirectX HLSL) no
Shader Model 2 (DirectX HLSL) no
Shader Model 1 (DirectX HLSL) no

Remarks

Older compilers incorrectly allowed asfloat(bool), but note that bool inputs are not supported.

See also

[**Intrinsic Functions (DirectX HLSL)**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/dx-graphics-hlsl-intrinsic-functions.md)
farzonl commented 1 month ago

@damyanp This one is already refined, but we should prioritize getting it assigned out. This is used in DirectML shader PixelPacking_Velocity.hlsli:28 and PixelPacking_Velocity.hlsli:41

joaosaffran commented 6 days ago

I can work on this