<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/99144>99144</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Implement the `ProcessIsolineTessFactors` HLSL Function
</td>
</tr>
<tr>
<th>Labels</th>
<td>
metabug,
backend:DirectX,
HLSL,
bot:HLSL
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
farzonl
</td>
</tr>
</table>
<pre>
- [ ] Implement `ProcessIsolineTessFactors` clang builtin,
- [ ] Link `ProcessIsolineTessFactors` clang builtin with `hlsl_intrinsics.h`
- [ ] Add sema checks for `ProcessIsolineTessFactors` to `CheckHLSLBuiltinFunctionCall` in `SemaChecking.cpp`
- [ ] Add codegen for `ProcessIsolineTessFactors` to `EmitHLSLBuiltinExpr` in `CGBuiltin.cpp`
- [ ] Add codegen tests to `clang/test/CodeGenHLSL/builtins/ProcessIsolineTessFactors.hlsl`
- [ ] Add sema tests to `clang/test/SemaHLSL/BuiltIns/ProcessIsolineTessFactors-errors.hlsl`
- [ ] Create the `int_dx_ProcessIsolineTessFactors` intrinsic in `IntrinsicsDirectX.td`
- [ ] Create the `DXILOpMapping` of `int_dx_ProcessIsolineTessFactors` to `106` in `DXIL.td`
- [ ] Create the `ProcessIsolineTessFactors.ll` and `ProcessIsolineTessFactors_errors.ll` tests in `llvm/test/CodeGen/DirectX/`
## DirectX
| DXIL Opcode | DXIL OpName | Shader Model | Shader Stages |
| ----------- | ----------- | ------------ | ------------- |
| 106 | StorePatchConstant | 6.0 | ('hull',) |
## SPIR-V
There is no support for `ProcessIsolineTessFactors` when targeting SPIR-V.
## Test Case(s)
### Example 1
```hlsl
//dxc ProcessIsolineTessFactors_test.hlsl -T hs_6_8 -enable-16bit-types -O0
struct HSPerPatchData
{
float edges[ 3 ] : SV_TessFactor;
float inside : SV_InsideTessFactor;
};
struct PSSceneIn {
float4 pos : SV_Position;
float2 tex : TEXCOORD0;
float3 norm : NORMAL;
};
struct HSPerVertexData {
PSSceneIn v;
};
export HSPerPatchData fn( const InputPatch< PSSceneIn, 3 > points ) {
HSPerPatchData d;
float4 edgeFactor;
float2 insideFactor;float p1;
float p2;
float p3;
float p4;
ProcessIsolineTessFactors(p1, p2, p3, p4);
d.edges[0]=edgeFactor.x;
d.edges[1]=edgeFactor.y;
d.edges[2]=edgeFactor.z + edgeFactor.w;
d.inside = insideFactor.x + insideFactor.y;
return d;
}
[domain("tri")]
[outputtopology("triangle_cw")]
[patchconstantfunc("fn")]
[outputcontrolpoints(3)]
[partitioning("pow2")]
HSPerVertexData main( const uint id : SV_OutputControlPointID,const InputPatch< PSSceneIn, 3 > points ) {
HSPerVertexData v;
v.v = points[ id ];
return v;
}
```
## HLSL:
Generates the rounded tessellation factors for an isoline.
## Syntax
``` syntax
void ProcessIsolineTessFactors(
in float RawDetailFactor,
in float RawDensityFactor,
out float RoundedDetailFactor,
out float RoundedDensityFactor
);
```
## Parameters
<dl> <dt>
*RawDetailFactor* \[in\]
</dt> <dd>
Type: **float**
The desired detail factor.
</dd> <dt>
*RawDensityFactor* \[in\]
</dt> <dd>
Type: **float**
The desired density factor.
</dd> <dt>
*RoundedDetailFactor* \[out\]
</dt> <dd>
Type: **float**
The rounded detail factor clamped to a range that can be used by the tessellator.
</dd> <dt>
*RoundedDensityFactor* \[out\]
</dt> <dd>
Type: **float**
The rounded density factor clamped to a rangethat can be used by the tessellator.
</dd> </dl>
## Return value
This function does not return a value.
## Remarks
### Minimum Shader Model
This function is supported in the following shader models.
| Shader Model | Supported |
|-----------------------------------------------------------------------------|-----------|
| [Shader Model 5](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/d3d11-graphics-reference-sm5.md) and higher shader models | yes |
This function is supported in the following types of shaders:
| Vertex | Hull | Domain | Geometry | Pixel | Compute |
|--------|------|--------|----------|-------|---------|
| | x | | | | |
## See also
<dl> <dt>
[Intrinsic Functions](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/dx-graphics-hlsl-intrinsic-functions.md)
</dt> <dt>
[Shader Model 5](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/d3d11-graphics-reference-sm5.md)
</dt> </dl>
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMWN1v4rgW_2vMiwUKDuHjgQdIygxSu61KNZq3yiQH8K1jR7bTwv71V7bzQVrKbPfuXC1qIT45Pr_zaR-bas32AmCOoiWKkh4tzUGq-Y6qP6Xgva3MTvM-RtESoyjB67zgkIMwGI2DByVT0HqtJWcCnkDrFU2NVBqNA5xyKvZ4WzJumEAkRsGiFXPLxMvXJOA3Zg52yoFr_syEUUxolurBAY2DjuxFlmENOcXpAdIXjXdS_RLKSMsS2wnfbze3S4-5KkVqmBQx5dxyMWG5NpBTx8nEfpAWxSX8VGawB_EF7JucmTPom2OhWsj4W0X-FZ4BbXQl0bkPkZWlIbKKZQbfQFgMRFaVVzUiq0-VG1hXf-rdK1DWQxWO03t9HacPSn0GFyugBrA5gMVhwjxnx-er7mxSo_LdukmVhClIzc-Bya6jJD_Xt_fFHS0KJvZWpNz9VXAjsWUdBuM2eFbcdcyrKTLwuUdFdpXtuXKi5_bB8ficv-Yf0gCRVeUORFZeNftHQkRCXL_xtEmMrQn4vrBZhs_Gf9DcjzcHmoHCdzIDfk7YGLoHbSmVoH77wb8YfyT0zwQNg7EHMlLBAzXpIZZCG2oXpkmMx4PA_SIyRWRyKDlHZGIXITKrhTTWbh7Wj_0fnvR0AAWYaSwk1mVRSGX-Ug2_HWzxUbUHw8S-EjnowDyBNjimGhCZakRm_iV2_47DMt0cqV1g8dC-HQf-z9WFlbNCZJUdU_x5EtgguzrC_Sd80M_j5ynug6BbDv3heMtM35wK0Lh_X0VcG1WmBn_fPIBybkyooc7HS8cw23FJDYZsD9pmbuhyF4ULvPnx3CKjsMNu682mimdbu9EH5kniHyoVHjabFASsBe5ij3AhdS3qQWpmV-QuHsEGjo7l6eZnfH__mARdhhALqXLH8cf9493i9rIKzgs_QBk4Wje0irS6vb6biYIFHF2adF2IdwKRKU5tUuK1KErjXqEwbg1FJLb-DG9wIZkwGvvsrDDfycu6Fo1cSC45n1Teb975kBRDz1aNSGcUdkYjP_o84cm0GFrlC-K-Q_c9sjld-wQFs2xQJ02AogSFSavw4Nio3HINP3CdLnCRD1x_YkSWZ94YvJ1NaxIx6XhlcHSTOqQWTYEplWg8Pkkqm6JlJnNqm5kpIsQohgixRkeJfytLU5TGyEJyuT81XFTsOTynb--4CxvatFq0dqVI_QSbNxekplIYJblPFESmYVeUMq4s7H7lpBTyjZzLeZ_ZlRlVfpZMGMyyusjuHWLsER8s4jpBJP77udyk85kGr427XwevLkCVbdHSqRIl7-Px2olHvTi2C6zrOEIPt_gGAhQ1oN0Gq2QpMsjstqiBc2p9hXc-m936TgVmPs-7i_bmJAw9VqQaEuua-ipZ9vlqbEMRLDBmAsUELQL_7Yvskb4lYCjjVZm6_vgKq9DMnLq8sjQdNm_jJamfcZ4LtSbX9Xvu28YVD1TRHAwoXZHDOOM24PbBoPCm5l58sG2BURSjaMmE-038bLuZmVpA1gh4OhVgExERK8tp7B-bHRpnoJmCDGcOpQrkoFHLCs4-16zjyt-nmoP5im6X4lerZyP4j-hXV0LHdfaklRe2PiSmWFGxt30pNTilAm8BlxoyvD25UmpK6ItWXfT6bzDr3O0X7PrbZtlnfmaZq4nHamWivIRaGabxrjo34kyCbSUNrpYw6lkH74TkVL3oc5ol3zHB8jLv9NaXMJiuO1XIbMdvrdlJzuWb7US1n53b2brGbfr6Tt_-P36cvEaRplPv_5Ofrrz2NICiZceUyKYUmR6MKbTdElznvGfmUG4HqbSnoTuWKqnlziQytYfTNyZCYs_FXG5tqD01A_1iZNHXKq26b3cyCjPXkpNVFmbDYX-vaHFgqe4r2IECkUJf59Egz-weaM9tB7Y_gOrGwvnrBLr1Xic4fhf4crh9dy93FZZu9sM25n4PdvDfS-6Pa4nra9zjN5A5GHVygwd2rA50scyL0sDHuDaPl2jdwTm5jd1Z-hzrhzMa_jg4J1_xW72FA2DKtby-a0XL5p4A19c--v-VRcc2hSyp31xh9Ouwa59NF5bJjg3_0iL4qHa9mvayeZjNwhntwXw4IcPhOBiOg95hPhulk5SGu206nqY0CsMUhrMh0BmdhBGZTntsTgIyCibDMQnswwAm2_FoBIQE0XYyghCNAsgp4wPOX_OBVPse07qE-Ww2HI16nG6Ba3fnSUgOhm7LvWuYY0TIlqYvIDIULpo7kuqNv9Wq2aRB4aImRUlPzS1Wf1vuNRoFnGmjW3TDDId5e39aXTZdvVawspt07JWKz69Es7rncSoUSv4HUoPIyhltw-jtfp2T_wYAAP__MoiN6A">