<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/99104>99104</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Implement the `degrees` HLSL Function
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            metabug,
            HLSL,
            backend:SPIR-V,
            bot:HLSL
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          farzonl
      </td>
    </tr>
</table>

<pre>
    - [ ] Implement `degrees` clang builtin,
- [ ] Link `degrees` clang builtin with `hlsl_intrinsics.h`
- [ ] Add sema checks for `degrees` to `CheckHLSLBuiltinFunctionCall` in `SemaChecking.cpp`
- [ ] Add codegen for `degrees` to `EmitHLSLBuiltinExpr` in `CGBuiltin.cpp`
- [ ] Add codegen tests to `clang/test/CodeGenHLSL/builtins/degrees.hlsl`
- [ ] Add sema tests to `clang/test/SemaHLSL/BuiltIns/degrees-errors.hlsl`
- [ ] Create the `int_spv_degrees` intrinsic in `IntrinsicsSPIRV.td`
- [ ] In SPIRVInstructionSelector.cpp create the `degrees` lowering and map  it to `int_spv_degrees` in `SPIRVInstructionSelector::selectIntrinsic`.
- [ ] Create SPIR-V backend test case in `llvm/test/CodeGen/SPIRV/hlsl-intrinsics/degrees.ll`

## DirectX

There were no DXIL opcodes found for `degrees`.

## SPIR-V

# Degrees:

## Description:
**Degrees**  
  
Converts *radians* to degrees, i.e., *radians* \* 180 / π.  
  
The operand *radians* must be a scalar or vector whose component type is
16-bit or 32-bit floating-point.  
  
*Result Type* and the type of *radians* must be the same type. Results
are computed per component.

<table>
<colgroup>
<col style="width: 20%" />
<col style="width: 20%" />
<col style="width: 20%" />
<col style="width: 20%" />
<col style="width: 20%" />
</colgroup>
<thead>
<tr>
<th>Number</th>
<th>Operand 1</th>
<th>Operand 2</th>
<th>Operand 3</th>
<th>Operand 4</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p>12</p></td>
<td
class="tableblock halign-left valign-top"><p><em>&lt;id&gt;</em><br />
<em>radians</em></p></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>



## Test Case(s)

 
 ### Example 1
```hlsl
//dxc degrees_test.hlsl -T lib_6_8 -enable-16bit-types -O0

export float4 fn(float4 p1) {
    return degrees(p1);
}
```
## HLSL:

Converts the specified value from radians to degrees.



| *ret* degrees(*x*) |
|--------------------|



 

## Parameters



| Item                                                   | Description                            |
|--------------------------------------------------------|----------------------------------------|
| <span id="x"></span><span id="X"></span>*x*<br/> | \[in\] The specified value.<br/> |



 

## Return Value

The result of converting the *x* parameter from radians to degrees.

## 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**](/windows/desktop/WinProg/windows-data-types)                        | any                            |
| *ret* | same as input *x*                                                                                              | [**float**](/windows/desktop/WinProg/windows-data-types)                        | same dimension(s) as input *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)                          | vs\_1\_1  |



 

## See also

<dl> <dt>

[**Intrinsic Functions (DirectX HLSL)**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/dx-graphics-hlsl-intrinsic-functions.md)
</dt> </dl>
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzUGNlu4zjya-iXgg2Zinw8-MGR49kAPTONTtDbbwEllS1uKFIgqRzz9YuiZFvK4b5md3sFwRbJYt0XKZyTe424YsklSzYj0fjS2NVO2L-MVqPMFM-rMbDkEliygeuqVlih9sBmUYF7i-jYLIJcCb2HrJHKS814yqL1adMHqe_PwcOj9CUBlMqpO6m9ldrJ3E1KNosGmNZFAQ4rAXmJ-b2DnbEvEHtDEykt_-PDzYfLlsK20bmXRqdCKYKSmqBusBIBUur9JK_rt6jlpsA96ncpXVXS9whdPdX2RCD9rZv-GnaPzrsOY1AN41uaY3ybmgJ_Q000GN92GnOMbztWJqS0d_V0BjFJ32ENXF73sY7RWmPfRp5aFB7Bl0hYpfZ3rn6462nmaMFODddHi958vP70eeKLlyivNYSla-28bYKpblBh7o0l1UE-INkjpcwjWqn3IHQBlagBpO_EfZOxYPZ3KLF4zeK1C6Mjy2wWTd6SnpCMP0Mm8nvURdAz5MJhR0Oph-qVDUnpRJvxLel1fPL0njlVp296ecx4DBtpMfdf2rnbEi3CI_1oA5sv1x_A1ORGFAyNLl476mSArOX7OAWbDi5eD2miy62sST3dEqf3AB0GACxqf1KjH9B6B4yvrSikIFdakx0ObPAU5AQn9D-EYUlKf9NFBIxvgaVbtogmJ9S3JYKp0ZJ9hzurxnnIEAS4XChhwVh4CIaEx9I4hNxUtdGUq_xzjSAdi9bT2TiTnkBjHr52yggv9X5cG6l9jzDj60_oGuXh9rlGIkgskAcGbGb3DjsE4UTVgk2gxUGkhW1ZajwWUKM98XewUJx6kSlk8VU7yo3aW9PU_Qlw_plANozzR1n4ksVr4BHjCeOcVPh_Dcz49pXQvkRRnEa2t8Diqz-aKkPbbg0TvbU_O7-Znl_m55fj88sXr5ZpZAejoQRUUt-Up6Cy6FyrqOAKmTL5PZRCyb0eK9x5eGi_vakZ57Q1TklV006Iup0ioj2KBYvWP4yaxSlW9M9nyrP4UhaMz_b01RJqF-M0swNThulDfAwAz7D5k7OvNT_QNU30AiwaprxbSuGpcMj4wjG-bBdDPmghCOjqSVAHBFNanUXtG4ok4dlSHn_KD1nvjtJ_KKEwvgUls7vZ3QLGqImJ8XSWST-mLOFg_GeX8vGpNrbLShew04wvuu96yvgS2PwyJCgAi76x-pRgFwGArBKt2XzT5-8kY6j3h1R_zNohZdWYy53EgtygQdhZU0Fnvl4inwwUN2-zOXpKgCdOGF8_hRJB_KYt4PiNp1s8vDAwx0dhRYUerXtJ8tpjBd__0NZeWfsK6Ptcf8vzHVuPtIDFqauFBlm0Yfp0DEPGt7TSDgYwX96C6dRPIdlGZJCdKm1yKXX438Dta6NPXmx53zifWuf7TLuOfQnYtl6aHeSta1FjFnq2liOoDzb9mnt1EUmFtt-JvHCEP6jMdrJdtj3JLVa1ov6sK9r0JhvGF6X3dehyQpDupS-bbJIbatJ-l7k1zuz8xoRO7FHqmFOvrUxGAW26_szde1OPnc27QA9tWVyE6Ke4H--tqEuZu_GwuxvvutOHm1QFBcUPue5RxPTY1vzKMhLLN_Iv_I4o-4l4-9HnbyD5DSh6Id4FwguTtg3sL2rKrmdnfN121x2bPKUuuh1Uwlv51J0KBpKF4tUXrGW4MI89Jhnf_lPqj9bsT6vjQnjRVsczIUO0hH7-plzeK1U0Cj26cCB13fieYf6Dz39bM0HEQlaoHWXPtq15LfPZTP-71LJqKrgpRYEWfjcFqkPGlw4OvgLSgWtqal6woDMwpf2dUco8UhFw7e6Kdr_uIfq4_0ZV3xz5-el6_u0JoOduyeVAMDrpLLqzfNuI8eX_Kthdxbs8TUeYUu5LtEMjBQ0-ozvp8x2xpr-UWNOvlVgS4cGxJL2bhh847_43iCCUM8cTeqFCcxSnhT8dIw4xfbw1gsOFo3tLO79onj-ckYJk0H2TuKNiFRfLeClGuJrO-XSaLOfJfFSuZtniAhMhdrudWCxm2SKaJ4ukiJJ4WSDGi5Fc8YhfRPPpbLpMkmQ-me-WOL3gs10SLTK-nLOLCCsh1USph2pi7H4knWtwtVxOo4uREhkqF26mOa_Qi6zZU8PLU8Z5q81u0N3DsXjdXXAdF4xn8foAm2xGdkWkxlmzd-wiUtJ5dyLupVe4Ol1yv75wJExH644aq1ZnTNjdAgaCtTX_wtwzvg0Sku1aIR9W_N8BAAD__-A-nYU">