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

    <tr>
        <th>Summary</th>
        <td>
            [HLSL] Implement `GetDimensions` method on structured buffers
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    Introduce a clang builtin that will be used to implement the implement `GetDimensions` method on structured buffers. The builtin could be something like this:

    `void __builtin_hlsl_resource_get_dimensions(resource_t x, uint &numStructs, uint &stride);`

It would be lowered to appropriate LLVM DirectX intrinsic during clang codegen. Depends on llvm/llvm-project#112982.

Applieds to:

`StructuredBuffer`
`RWStructuredBuffer`
`RasterizerOrderedStructuredBuffer `
`AppendStructuredBuffer`
`ConsumeStructuredBuffer`

Docs:
https://learn.microsoft.com/en-us/windows/win32/direct3dhlsl/sm5-object-structuredbuffer-getdimensions

Example:
https://godbolt.org/z/bz7zxsf5n

AC:
- The builtin is available and lowers to appropriate LLVM DirectX intrinsics during clang codegen
- `GetDimensions` method can be implemented using this builtin

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyclMFu4zYQhp-GugxsUJRlRwcdkrhuA6Qo0BRtbwYljiR2KVIgh3Hqpy8oO7Y32A2KvdCmSM78_PnNyBB0bxFrVj6wcpvJSIPz9YBfHMmscerf-smSdyq2CBJaI20PTdSGtAUaJMFBGwMNQgyogBzocTI4oiWgAW9mbM1_RtrqEW3Qzga25jAiDU6BsxDIx5aiRwVN7Dr0YQl_DHhJ1bpoVEoTXDqkbQ9Gf0GgQQdW3DO-Zfw8AkBK9uq0gv3-HGA_mGD2HoOLvsV9j7RXVyni7rJC8MbEI0SdJIu1jePLLC3cfg3ktUImKlY8sDW_zf5EcHjXatwB_ckVOU3eTV5LQnh-_vNX2GqPLf0N2pLXNugWVPTpWieLW6ewR7uELU5oVUgeGfM6MrFLP4vJu3-wJSaKPBfVnVjearifJqNRBSD3wRu25i8Xpx9mo6_61_z3vz5dlYHQ6yP637xKF_u4GW53309J-GfxHp0NccTvb5nHrWuvLzwQTfNM7JITKL1djrr1LriOlq1L_qBdxMDE7qCtcofzv0IwsVOz54VKLDCxC2O5cE2ycXHF70Tfoke64eNGzk9vMiH9HUW9U40ztHS-Z2J3ZGLXHDfHt9CV9qsHerycX3yFuQ4gX6U2sjEI0qoTQuH_ERS-idB7mk_qr5U24XqpVVQQQwqUqutd2ylOpupCVUUlM6zzjajEXZlvqmyoqzJHJQouuhzLpmtXVbdq5Fq0vGzzjpeZrgUXq5znd4KXVVEtqw3mq3JTdlwU5abkbMVxlNosE-DJwUyHELGeAV9lRjZowtynhLB4gHmVCZHalq_nqmhiH9iKGx0oXMOQJjM3uF-eX55ZuYWnH25KWfSm_vDkmobYnNn7ZonuZqUJxPNVXmvxXwAAAP__t6jNug">