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

    <tr>
        <th>Summary</th>
        <td>
            Implement the `ObjectToWorld` 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 `ObjectToWorld` clang builtin,
- [ ] Link `ObjectToWorld` clang builtin with `hlsl_intrinsics.h`
- [ ] Add sema checks for `ObjectToWorld` to `CheckHLSLBuiltinFunctionCall` in `SemaChecking.cpp`
- [ ] Add codegen for `ObjectToWorld` to `EmitHLSLBuiltinExpr` in `CGBuiltin.cpp`
- [ ] Add codegen tests to `clang/test/CodeGenHLSL/builtins/ObjectToWorld.hlsl`
- [ ] Add sema tests to `clang/test/SemaHLSL/BuiltIns/ObjectToWorld-errors.hlsl`
- [ ] Create the `int_dx_ObjectToWorld` intrinsic in `IntrinsicsDirectX.td`
- [ ] Create the `DXILOpMapping` of `int_dx_ObjectToWorld` to  `151` in `DXIL.td`
- [ ] Create the  `ObjectToWorld.ll` and `ObjectToWorld_errors.ll` tests in `llvm/test/CodeGen/DirectX/`

## DirectX

| DXIL Opcode | DXIL OpName | Shader Model | Shader Stages |
| ----------- | ----------- | ------------ | ------------- |
| 151 | ObjectToWorld | 6.3 | ('library', 'intersection', 'anyhit', 'closesthit') |

## SPIR-V

There is no support for `ObjectToWorld` when targeting SPIR-V.

## Test Case(s)

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

export float3x4 fn() {
    return ObjectToWorld();
}
```
## HLSL:

## Syntax


```syntax
float<3@4> ObjectToWorld();
```


## Type Description

| Name  | [**Template Type**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/../direct3dhlsl/dx-graphics-hlsl-data-types.md)| [**Component Type**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/../direct3dhlsl/dx-graphics-hlsl-data-types.md) | Size |
|-------|--------------------------------------------------------------------|----------------------------------------------------------------------|------|
| *ret* | [**scalar**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/../direct3dhlsl/dx-graphics-hlsl-scalar.md) | [**float**](../WinProg/windows-data-types) | 1 |

## Minimum Shader Model

This function is supported in the following shader models.
|Shader Model | Supported|
|-------------|----------|
|[Shader Model 6.3](https://github.com/microsoft/DirectXShaderCompiler/wiki/Shader-Model-6.3) and higher shader models | yes |

## Shader Stages

* **Library Shader**
* [**Intersection Shader**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/../direct3d12/intersection-shader.md)
* [**Anyhit Shader**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/../direct3d12/any-hit-shader.md)
* [**Closesthit Shader**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/../direct3d12/closest-hit-shader.md)


## See also


- [**Intrinsic Functions (DirectX HLSL)**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/../direct3dhlsl/dx-graphics-hlsl-intrinsic-functions.md)
- **See [DXR Functional Spec](https://microsoft.github.io/DirectX-Specs/d3d/Raytracing.html)**
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzUV1tv2zoS_jX0CyFBoiw7fvCDL3E3QLIpmmDbt4CSaIkbihRIurH76xdDyrrUqfOwBzg5QYpUw-E3w29uJDWGl5KxJUrXKN1O6MFWSi_3VP9SUkwyVZyWAUbpGqN0i-_qRrCaSYvRLHrM_sty-6y-Ky0KNItwLqgscXbgwnKJyAZFq37rPZevH-_Cb9xWoFYJI164tJpLw3MTVmgWjfBWRYENqynOK5a_GrxX-l14q0C8AaV_3T_dr72d3UHmliu5oUKAFpeg9cRq6jS5LMO8ad6zmauClUx-YO-25nZg7vbY6N7M5ksr_siGZcaaFtHRhMgOZIjsNqpgX5gEG4jsWvYMIruRQyHQ-EfmrsADEy228_XuEjtgWitt3jWx0Yxahm3FAJtL-1IcXy6o6sLb8nLXhXvLNcvtj9AW15G3P-7uH5sH2jRclgCp9tcMWoVhOU7jPhgAcd3ORZhDnzNUFhdLLy0pXsMT7O0I8bO-CB8iu_aoiOy8C_BLEkQSfF7xsvkGg6v4sYHswIPvf9Pafz9VtGAaP6iCiaHgydKSGZC0QEH_gz_4vhQEA6A4jd36iAMnmYWJ-4vIDSJzwTNN9QmROSIgm3NpmTbM1WAvpfJUcdt_50IZZuxZtjhb7ih6-nr3LfiPFz1XTDPMDZYKm0PTKG3_WKRvFVQX1SWzXJYtTDiCfmbG4g01DJEbg8jCL2L3z2mA0u2RQkfEMazOIv_rCgJwdojsimM-ZucFMsAVDQ6eseDZy-zlBgdM0kywIJ5l3Ab21DCDg8c2H9jRH0YoapPjFO-lYxXoWIM_GGPN7EHLsSWvhJK1C9Z26GJ_TFfkyWrM6klaemxFg13mLHeeoGSToGk0RcntFbtDiyN6Tw3DW2ZyzRuXBF2Wu3T2uZOuEVkhsnpmdSOgHGGXF6F0i8hNZW1jwH3HdcltdcjCXEGhPfBcK6P2dqty6F1vXCYEWqVQGcTFSwtmXq1qAqPzNl6u6JLCBZHswvBSVhyDUtOm4rkJQBQU1FIfs7Au4OhD3zeqbpSEkfnPcN43Dv6L9WXe1n3_v__r5y-CGQD1_QiRlWYWkdU4f0xOBdWfj3vv14D3zmNfYQOHHd53Lr9qVXqnCvVmBtE7Q8QXTfKBS14f6tF4OLdMbvC-vQpB62z7JitgaMHs2ysh1Bv0SON317DbhJ7v3wcOihZPZ4Tfs-ed4HcqKF2PoGZh8mGY6nOY-hnqMaDguGDasfTK4TLj5IHDDgCbLNzwrnhZMT0-mePw1E_LvikOZ-l5BWYB_Ln3861VauPWKpxDejcYeWPFvyEjY9g_HMKBZ6FtYL-5vnJz-XM4TeUpqLi96u-muzd8Dp_be8y7fo9yjDFMhVGdPBilT3tZPr9dDFyu2tT3c5wsPl-P6y75wbnRmO7wQVs-cG6Urrc_vnWHowI_NSx_7yRd5Yftmbjqe0AAu5zzSYHI7hs9WU1zeM9VthYdQ5NimRSLZEEnbBnPSRzPosV0NqmWs4IVCzJPZ_skJ2mcRfsblmaLfFrE-c2C7Cd8SSIyjebxjERxOk3DOUmi_XSa3LBZMk32KZpGrKZchHDjD5UuJ9yYA1suFiSeTwTNmDDutU1IzSzNDiUiBF7LhGQ0f2WyQMmqexW0Kz68ZzVlUbI6i9LtRC_BVpAdSoOmkeDGmt665VawZf9yb59OF3diwOvonxy0WF5JoPY148w2WgEUNBQ4KJDvz_pzSf4XAAD__26n50I">