<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/99206>99206</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Implement the `NonUniformResourceIndex` 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 `NonUniformResourceIndex` clang builtin,
- [ ] Link `NonUniformResourceIndex` clang builtin with `hlsl_intrinsics.h`
- [ ] Add sema checks for `NonUniformResourceIndex` to `CheckHLSLBuiltinFunctionCall` in `SemaChecking.cpp`
- [ ] Add codegen for `NonUniformResourceIndex` to `EmitHLSLBuiltinExpr` in `CGBuiltin.cpp`
- [ ] Add codegen tests to `clang/test/CodeGenHLSL/builtins/NonUniformResourceIndex.hlsl`
- [ ] Add sema tests to `clang/test/SemaHLSL/BuiltIns/NonUniformResourceIndex-errors.hlsl`
- [ ] Create the `int_spv_NonUniformResourceIndex` intrinsic in `IntrinsicsSPIRV.td`
- [ ] In SPIRVInstructionSelector.cpp create the `NonUniformResourceIndex` lowering and map it to `int_spv_NonUniformResourceIndex` in `SPIRVInstructionSelector::selectIntrinsic`.
- [ ] Create SPIR-V backend test case in `llvm/test/CodeGen/SPIRV/hlsl-intrinsics/NonUniformResourceIndex.ll`
## DirectX
There were no DXIL opcodes found for `NonUniformResourceIndex`.
## SPIR-V
# [OpCopyObject](https://registry.khronos.org/SPIR-V/specs/unified1/SPIRV.html#OpCopyObject):
## Description:
Make a copy of *Operand*. There are no pointer dereferences involved.
*Result Type* must equal *Operand* type. *Result Type* can be any type
except [**OpTypeVoid**](https://registry.khronos.org/SPIR-V/specs/unified1/SPIRV.html#OpTypeVoid).
<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>Word Count</th>
<th>Opcode</th>
<th>Results</th>
<th>Operands</th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p>4</p></td>
<td class="tableblock halign-left valign-top"><p>83</p></td>
<td
class="tableblock halign-left valign-top"><p><em><id></em><br />
<em>Result Type</em></p></td>
<td class="tableblock halign-left valign-top"><p><a
href="#ResultId"><em>Result <id></em></a></p></td>
<td
class="tableblock halign-left valign-top"><p><em><id></em><br />
<em>Operand</em></p></td>
</tr>
</tbody>
</table>
## Test Case(s)
### Example 1
```hlsl
//dxc NonUniformResourceIndex_test.hlsl -T lib_6_8 -enable-16bit-types -O0
export float4 fn(float4 p1) {
return NonUniformResourceIndex(p1);
}
```
## HLSL:
## Syntax
```syntax
any<> NonUniformResourceIndex(any<> index);
```
## 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), [**vector**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/../direct3dhlsl/dx-graphics-hlsl-vector.md), or [**matrix**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/../direct3dhlsl/dx-graphics-hlsl-matrix.md) | **bool**, [**float**](../WinProg/windows-data-types), or [**int**](../WinProg/windows-data-types) | any |
| *index* | [**scalar**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/../direct3dhlsl/dx-graphics-hlsl-scalar.md), [**vector**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/../direct3dhlsl/dx-graphics-hlsl-vector.md), or [**matrix**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/../direct3dhlsl/dx-graphics-hlsl-matrix.md) | **bool**, [**float**](../WinProg/windows-data-types), or [**int**](../WinProg/windows-data-types) | any |
## Minimum Shader Model
This function is supported in the following shader models.
|Shader Model | Supported|
|-------------|----------|
|[Shader Model 6](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/../direct3dhlsl/shader-model-6-0.md) and higher shader models | yes |
## Shader Stages
## See also
- [**Intrinsic Functions (DirectX HLSL)**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/../direct3dhlsl/dx-graphics-hlsl-intrinsic-functions.md)
- **See [NonUniformResourceIndex semantics](https://microsoft.github.io/DirectX-Specs/d3d/WorkGraphs#nonuniformresourceindex-semantics)**
- [**Resource Binding**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/../direct3d12/resource-binding-in-hlsl.md).
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWV1v27jS_jX0zUCCTMVOfOELx4n7Bmg3izpvd-8CShxLPKFIHZJK4v31ByTlDzVx0j1nF22BDQxHIoczzzwz1IxoZq2oFOKcTC7J5GrEOldrM98w84dWclRovp0nQCaXQCZXcNO0EhtUDsg0-0Wr_1dio03zGa3uTIk3iuMzmWZQSqYqKDohnVCELkm2OCj5KNTDn1kPT8LVfkEtrbwXyhmhrChtWpNpNtC84BwsNgzKGssHCxtt3jHktBdYevH_-7j-eBktrjpVOqHVkknppYTyUmtsWJAUqkrLtn3Neqk5Vqi-2fJ1I9yR4evn1hwMLj_0w-9Zc2id7TUG6ghd-TFCV0vN8QMqb4PQVc-oJXR1AlrqST7J6xuGPDu9lYD65i0rCRqjjX3V2NIgcwiuRm9FKHdv28f7N5jcZ0RP280-Q9a_3nz-kjr-tYkbBWHqRllnuhDqNUosnTaeaigHEN4wLfUTGqEqYIpDw1oA4Xp6vgl4SKsTSEi-IPnChru9S2Sapa-x5ZUkX6Bg5QMqHuIEJbPY25DysXmREz5o3jahKx-H5LCz3kgP2cfLf2hOaA5XwmDpfo9jdzUahCf_pTRc_X7zEXTr09Rvxk7x9zdGOlAe_doPebdv26Vut7fFv7B0ZHJF6EXtXGs9XXRF6MpgJawz2_ShNlppm2pT9a4m3lfbYvCwU2IjkI93NKS1aySh-UA_nXm9A3fRlka0PlJxCoBki0_sAYFBqdst6A0Qurht0TDFCV2kEFlhkZRWC-XQAEeDGzSoSrQg1KOWj8jToC18Ebr4jLaTDu62LRK6gKazDvDfHZNDA-C2LabwckHJFBQITG2DCMkW-Fxi6zyNhC6CEi_7RQse7_8eQg82Zrvw5kvHCokkv453pZaV0V17PADWbb3IFaH0SXBXk3wBNCN0QigFD-5nFiZ09cJpVyPjhztzNEHy69-04bDUnXJxeRg8mr8NO-31uZgZ9tTCkEonZl-M-jszuBvC9k3Dq05wX9itjeyE-BdSlw9QMykqlUjcOHiM1063hNJo3fNzFi21Bzz8L9F7kb-pmGSL_1o1yZfY-P90Kh3JL33-Tyt_FQ3FyXxZmEFehOHjjTwQ_js4IPmSkWxRG9zE5YTmEcAN3wsew3rPI0JX7D2434vZ3WPzm1h9memD3PYDR0-xbFgp7nwRXjKLhF5YX0nCZHi-RwkvdP3MfE8NYz87zeIntEVZ__jlzyWcKJf3vqCHJgqSO5CiuJ_eX0CCyoNKxtNCuMQ_-C0kt33RxudWGwcbqZk7g40i9KK_bseEzoCcX4YCBGDQdUadMk3oRVjgOc8W5PzqGP-Bg9ARflVB11vl2POBrd0quxtnauvJza_fMH6QEXFkh-QYwyAa2xYHxTtOni_hF9YggL_al8U7bFrp-6q-kp6ojJVwdVekpfbN1SdRGm31xl3pUA6fhMqp77mlLnwY4yhH--B0m1hT9uEN7VPOQ8zpKk1fjvHnpDKsrUVpk9CpceZYDGza-KI6wL7UTauVf0f7OcAH5tfiD_QXMSRJ_Dtc_U9_f5GaI0V7oL7nMuh8rzWIgS2ZZObH4z7i6pOGHgF-jK8cPxzgiOsA2L897DA3zBnx_ONhjriOkjtCLLSWPdhj5sPT99iJYOM3oX41uopAuX6yR9vmFSqE-tMqAjL_ZjBI5v5h-k86_5POP3c67-v-J6FE0zWwrhlHA580R7k7qxAWNv1RHwgLtmt9c4QchAqHPxstpX4SqgIbVzd-tU3jfjnWGM3O1jsNX5eyVyrRXoRMLgeqpt8x-tHPJPiZTJOsDztTHGpR1WiGTATWt2hfsN47tHasQvtKb7xGBCat3o8nh-jvD7tgdw5rgdCL_pwptpQ-Z360jbI_P0t2SbVrz4J7Aa_3m0wuT_S14ZBVOVHa1_xqdq6kvYdCE7rqaUnW_SkMz7nfLdo8fPDoLKG50qqL1kxvLTzmk4O1PZ3ZAo4isQMHl0Jxoarvx_mYhoOoCCcpIpxEqMB8ZDkd8XnOZ_mMjXA-Pqfj8TS7oLNRPZ9OMWcF5nTKGCvzcpaPN3ycIS85xfMJjsScZvQsOx9PaTbOzybpJh9fZOUkK4pNfj7GGTnLsGFCplI-Nqk21UhY2-F8NqPZdCRZgdKGX1AobdCxoqvCW_SSUBrTtb_pz2dJvtidnu0mtCP5Yic7uRqZuTeVFF1lyVkmhXX2YNwJJ3F--DHm_YNqr3m_nUadkfM34tefFgcArdHxIHQVPPaBi04_zul_AgAA__-llvwR">