<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/99183>99183</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Implement the `DispatchRaysIndex` HLSL Function
</td>
</tr>
<tr>
<th>Labels</th>
<td>
metabug,
backend:DirectX,
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 `DispatchRaysIndex` clang builtin,
- [ ] Link `DispatchRaysIndex` clang builtin with `hlsl_intrinsics.h`
- [ ] Add sema checks for `DispatchRaysIndex` to `CheckHLSLBuiltinFunctionCall` in `SemaChecking.cpp`
- [ ] Add codegen for `DispatchRaysIndex` to `EmitHLSLBuiltinExpr` in `CGBuiltin.cpp`
- [ ] Add codegen tests to `clang/test/CodeGenHLSL/builtins/DispatchRaysIndex.hlsl`
- [ ] Add sema tests to `clang/test/SemaHLSL/BuiltIns/DispatchRaysIndex-errors.hlsl`
- [ ] Create the `int_dx_DispatchRaysIndex` intrinsic in `IntrinsicsDirectX.td`
- [ ] Create the `DXILOpMapping` of `int_dx_DispatchRaysIndex` to `145` in `DXIL.td`
- [ ] Create the `DispatchRaysIndex.ll` and `DispatchRaysIndex_errors.ll` tests in `llvm/test/CodeGen/DirectX/`
- [ ] Create the `int_spv_DispatchRaysIndex` intrinsic in `IntrinsicsSPIRV.td`
- [ ] In SPIRVInstructionSelector.cpp create the `DispatchRaysIndex` lowering and map it to `int_spv_DispatchRaysIndex` in `SPIRVInstructionSelector::selectIntrinsic`.
- [ ] Create SPIR-V backend test case in `llvm/test/CodeGen/SPIRV/hlsl-intrinsics/DispatchRaysIndex.ll`
## DirectX
| DXIL Opcode | DXIL OpName | Shader Model | Shader Stages |
| ----------- | ----------- | ------------ | ------------- |
| 145 | DispatchRaysIndex | 6.3 | ('library', 'raygeneration', 'intersection', 'anyhit', 'closesthit', 'miss', 'callable') |
## SPIR-V
<div id="header">
# [LaunchIdKHR](https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/LaunchIdKHR.html)
## Short Description
<div class="sectionbody">
LaunchIdKHR - Launch Id for ray shaders
</div>
</div>
<div id="content" class="loadable">
<div class="sect1">
## <a href="#_description" class="anchor"></a> Description
<div class="sectionbody">
<div class="dlist">
` LaunchIdKHR `
A variable decorated with the ` LaunchIdKHR ` decoration will specify
the index of the work item being processed. One work item is generated
for each of the ` width ` × ` height ` × ` depth ` items dispatched by
a [vkCmdTraceRaysKHR](https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/None) command. All shader
invocations inherit the same value for variables decorated with
` LaunchIdKHR ` .
</div>
<div class="sidebarblock">
<div class="content">
<div class="title">
Valid Usage
</div>
<div class="ulist">
- <a href="#VUID-LaunchIdKHR-LaunchIdKHR-04266"
id="VUID-LaunchIdKHR-LaunchIdKHR-04266"></a> <span class="vuid">
VUID-LaunchIdKHR-LaunchIdKHR-04266 </span>
The ` LaunchIdKHR ` decoration **must** be used only within the
` RayGenerationKHR ` , ` IntersectionKHR ` , ` AnyHitKHR ` ,
` ClosestHitKHR ` , ` MissKHR ` , or ` CallableKHR ` ` Execution `
` Model `
- <a href="#VUID-LaunchIdKHR-LaunchIdKHR-04267"
id="VUID-LaunchIdKHR-LaunchIdKHR-04267"></a> <span class="vuid">
VUID-LaunchIdKHR-LaunchIdKHR-04267 </span>
The variable decorated with ` LaunchIdKHR ` **must** be declared using
the ` Input ` ` Storage ` ` Class `
- <a href="#VUID-LaunchIdKHR-LaunchIdKHR-04268"
id="VUID-LaunchIdKHR-LaunchIdKHR-04268"></a> <span class="vuid">
VUID-LaunchIdKHR-LaunchIdKHR-04268 </span>
The variable decorated with ` LaunchIdKHR ` **must** be declared as a
three-component vector of 32-bit integer values
</div>
</div>
</div>
</div>
</div>
</div>
## Test Case(s)
### Example 1
```hlsl
//dxc DispatchRaysIndex_test.hlsl -T lib_6_8 -enable-16bit-types -O0
export uint3 fn() {
return DispatchRaysIndex();
}
```
### SPIRV Example(s):
### Example 2
```hlsl
//dxc DispatchRaysIndex_spirv_test.hlsl -T lib_6_8 -E fn -enable-16bit-types -spirv -fspv-target-env=universal1.5 -fcgl -O0
[shader("intersection")]
void fn() {
uint3 ret = DispatchRaysIndex();
}
```
## HLSL:
Gets the current location within the width, height, and depth obtained with the [**DispatchRaysDimensions**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/dispatchraysdimensions.md) system value intrinsic.
## Syntax
```syntax
uint3 DispatchRaysIndex();
```
## Remarks
This function can be called from the following raytracing shader types.
* [**Any Hit Shader**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/any-hit-shader.md)
* [**Callable Shader**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/callable-shader.md)
* [**Closest Hit Shader**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/closest-hit-shader.md)
* [**Intersection Shader**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/intersection-shader.md)
* [**Miss Shader**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/miss-shader.md)
* [**Ray Generation Shader**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/ray-generation-shader.md)
## See also
* [Direct3D 12 Raytracing HLSL Reference](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/direct3d-12-raytracing-hlsl-reference.md)
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzEWV1v4rrW_jXujRUUHKBwwQWFMoPemT2v2tmjfVeZeEF86tiR7dByfv3RskMILaXTs8_sqZCKl-318awPLxvunNxqgCkZ3pDh4orXvjB2uuH230arq7UR-2lCyfCGkuGCrspKQQnaUzJKF9JV3OfFHd-7lRbwTEYpzRXXW7qupfJSEzYn6ey4_YvUjz-3kz5JX-DSQjn1ILW3UjuZu15BRukJz5kQ1EHJaV5A_ujoxtg3RXiDU3Nc-PnL_ZebKGtZ69xLo-dcKVwlNa66h5KHlVJve3lVnZObGwFb0D8h87aUviPy9rmyR1HzTw35PTkenHcNxwAXYUukEbacGwGfQKMMwpYNio6w5SulegjpmyheEIGINPyDvqvz_BOw1lh3VszcAvdAfQHIX2r_IJ4fzsLWurzBaNWGwEJayP1fPS8uc1_8tfryrfrKq0rqLbI0m_eEekNxSX8wPDoH2VyWddb1vRhLXIuz0w8NSHFVBD3KU2pXvnJrwDmYTdjyfVBdtfsoqvf_v7r7ccbOlaZhaqWdt3XIk3tQkHtjMVppfor5OaHKPIGVehvAKHlFqfRNhL2jbMjDN6STbEaymQuj1gwySnvnsEEmyQ-65vkjaBHwpjl38A7mQTZhSwzl5FiEzmaVaoIdPywjLKMHj0Xa9ZxiKNFvFWYz7Yz_4GUc3xdcgKVfjQDVJdx7vgWHlIZRcvyj74xfE5IOo_5gGDV5aU6gjnpZ-E_YmLBrJdeW2z1h14Qh7dry_RY0WI5uOZKl9mAd5KdUrveF9MdxrowD509opXSus4IrxdcKAmVyULpFN7q0IWVzIXdUCpItCGMFIGyEMZLdtnswJL7wWufFSvzf5zsyXBA2LryvHEYSWxK2tLCVztt977GwRhvXMxbL365WjxzDwVUQnN_vZQk8e9BOmlADyzBd-FIRtuwI6UXS5FTxwlhPF-ByK6sAUteGXHHnohkNhngEd23p8KcJjSO6EuEQsnxPXQga13IlbCnk7gjFOUoXvdxoD9oTxrrKKMNF9AZ7ufGFyv0XwAfsszmnhYVNXEZY9iA6AJyK4jovzMF9QVtOstu_gdjrhUJJTPXOklFKu8DimJJ0NqM7biUaTgXkxnIPIvYmTcV7tatZJg32MEpRDBq52ZN0hjtkSC6zCdufjH2k0kNJ14D1sbImB-dA9Og33Z2WjjaZBoKkM_Q08Lw48EGxT1LEhomSeUbGGbllZJySySDQCpDbwr85LaBqNqM4R0VTDkDQNWrOMXl2j_NSfLc8B6wSvzSF_jAaMOdzU5Zcix6dIZAhrkk6k3pn8oAwnpkFWDxOCqAO6-iOqxpCLhwc51547g1v995Jj26YSQFrbtfK5I-X4-yYSxcWeelP8-oHV1LQPx3fws8rVb8M6eRM1v34c7VIOpaffE8HbDTCdemMttXg53acJCrJ5q7iuqvcrpai1Y3S95nSyA_5IEsatn1_P-UImxE2K2uEAr_RNdDagaBGq31wv9QYLIEf7r3j-0_tIXZgGE6gUUpXnaPs5dxM7z9L36G2LOfxaDudDf-_Sue6tHhtoPPmpGunRim9fYa8jiaFtiKyblqDQ6PxX7n4-sMuvv4VLr5-08VvVdxzrj_nbwG54hYErR12_sj2UCVXuqp9i_G9N5ZvoR3P0Zq_ie74w-iOfwW641-PLneUN-BagCQ3ZWU0aE93oT_HwyljyVp6vHXAFmyszR9rTP43lLYP-Y6N_5w7IGzs2sYsgBNX4KLbZ15WCmg_nhTxE26zaXPKief8dcv8gNeHcOulyXeq5Pph9DCmCWhEO-mP1tInfl-Bo8m3JsLgucJesJbaZ3SjQ5-Nne5NwJVSC762-rWouJBkN6GNX3T1PDUlXGAOBh1szmYHs1-ZzD5osquk3b1h-C3d6PPmh1002bhql3hut-AT0DuSLWotd2AdV_3ekCabfKuOWJHhTdMBoPHs9JbB0K4hArEzUryEMuJL0okFT0m2-CigDUjh7eMA3ifwLpSVvLYWo141PUnnkIlNGRb62H_hN7wDx3bLrD2X-qSdHN7EPOvqt5Bl2yXh3Lmuayt9Ua97ucFb7FeZW-PMxi9MaLWepM4YYcu1Mmt0ZKQKcI_eVImzeePgcFvNRPA6DqMKlu-daFXolQJhdXuHbWnstdp7ce_0mrPXnj-33XX8uAMxuuSyH7oeaNneQcntY1NEvhfS0U3zfEdzrrFA4b0RBN1YUwZUN0Yp84T9teV7b3mOX2Mo0RCQrd6zowdmek8_S9_cwP9R5LneJ4X0SVQxIv5SvUPH8Dv0O9zLLysYe6DfhWHzuvAujt0G73fo2a1iFxXFzvF3KFhK5y4qdsf39NhA_w4VLd8nx3eoV8oeCxIA5cqZk2yPb3TZgvYZXgUO5QFLPb2DDVjQOfxjJTcOkz5LjqUqCY-P9qBLNOxKTDMxySb8Cqb9a9bvj9LhpH9VTMeDSX_AhoPxYDIaZTDsj4dDwa43eZaPWH-yuZJTlrJBet0fsTSdDPs9gAmDTGSbNE0n_UFGBimUXKqeUrsSr-9X0rkappNJf5xdKb4G5cKPRYyV4Pm63objd04Ya55XSTZrH6ubmfizwatlzRteO2E8yWaHtcPFlZ2iEsm63joySPGC645qhWvz9PiL1KUn6ODPw-88V7VV0wvebF6Dg-jKmn9B7jFVEQV0YwRiN2X_CQAA__-pGkrB">