diff options
| author | 3gg <3gg@shellblade.net> | 2025-12-02 16:39:36 -0800 |
|---|---|---|
| committer | 3gg <3gg@shellblade.net> | 2025-12-02 16:39:36 -0800 |
| commit | 6c8ae19be66cee247980a48e736a4e05d14de179 (patch) | |
| tree | d860767907bf0cbe17ec66422e11bea700cf56d9 /contrib/dxc_2025_07_14 | |
| parent | 8f594c8ebd11f0e5f8a0c6369c3fe7383d250cbe (diff) | |
Diffstat (limited to 'contrib/dxc_2025_07_14')
34 files changed, 4777 insertions, 0 deletions
diff --git a/contrib/dxc_2025_07_14/LICENSE-LLVM.txt b/contrib/dxc_2025_07_14/LICENSE-LLVM.txt new file mode 100644 index 0000000..d2edb2f --- /dev/null +++ b/contrib/dxc_2025_07_14/LICENSE-LLVM.txt | |||
| @@ -0,0 +1,43 @@ | |||
| 1 | ============================================================================== | ||
| 2 | LLVM Release License | ||
| 3 | ============================================================================== | ||
| 4 | University of Illinois/NCSA | ||
| 5 | Open Source License | ||
| 6 | |||
| 7 | Copyright (c) 2003-2015 University of Illinois at Urbana-Champaign. | ||
| 8 | All rights reserved. | ||
| 9 | |||
| 10 | Developed by: | ||
| 11 | |||
| 12 | LLVM Team | ||
| 13 | |||
| 14 | University of Illinois at Urbana-Champaign | ||
| 15 | |||
| 16 | http://llvm.org | ||
| 17 | |||
| 18 | Permission is hereby granted, free of charge, to any person obtaining a copy of | ||
| 19 | this software and associated documentation files (the "Software"), to deal with | ||
| 20 | the Software without restriction, including without limitation the rights to | ||
| 21 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies | ||
| 22 | of the Software, and to permit persons to whom the Software is furnished to do | ||
| 23 | so, subject to the following conditions: | ||
| 24 | |||
| 25 | * Redistributions of source code must retain the above copyright notice, | ||
| 26 | this list of conditions and the following disclaimers. | ||
| 27 | |||
| 28 | * Redistributions in binary form must reproduce the above copyright notice, | ||
| 29 | this list of conditions and the following disclaimers in the | ||
| 30 | documentation and/or other materials provided with the distribution. | ||
| 31 | |||
| 32 | * Neither the names of the LLVM Team, University of Illinois at | ||
| 33 | Urbana-Champaign, nor the names of its contributors may be used to | ||
| 34 | endorse or promote products derived from this Software without specific | ||
| 35 | prior written permission. | ||
| 36 | |||
| 37 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 38 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS | ||
| 39 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
| 40 | CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| 41 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
| 42 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE | ||
| 43 | SOFTWARE. | ||
diff --git a/contrib/dxc_2025_07_14/LICENSE-MIT.txt b/contrib/dxc_2025_07_14/LICENSE-MIT.txt new file mode 100644 index 0000000..63447fd --- /dev/null +++ b/contrib/dxc_2025_07_14/LICENSE-MIT.txt | |||
| @@ -0,0 +1,21 @@ | |||
| 1 | Copyright (c) Microsoft Corporation. | ||
| 2 | |||
| 3 | MIT License | ||
| 4 | |||
| 5 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
| 6 | of this software and associated documentation files (the "Software"), to deal | ||
| 7 | in the Software without restriction, including without limitation the rights | ||
| 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
| 9 | copies of the Software, and to permit persons to whom the Software is | ||
| 10 | furnished to do so, subject to the following conditions: | ||
| 11 | |||
| 12 | The above copyright notice and this permission notice shall be included in all | ||
| 13 | copies or substantial portions of the Software. | ||
| 14 | |||
| 15 | THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
| 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
| 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
| 21 | SOFTWARE. \ No newline at end of file | ||
diff --git a/contrib/dxc_2025_07_14/LICENSE-MS.txt b/contrib/dxc_2025_07_14/LICENSE-MS.txt new file mode 100644 index 0000000..6c9c3c6 --- /dev/null +++ b/contrib/dxc_2025_07_14/LICENSE-MS.txt | |||
| @@ -0,0 +1,158 @@ | |||
| 1 | MICROSOFT SOFTWARE LICENSE TERMS | ||
| 2 | |||
| 3 | MICROSOFT DIRECTX SHADER COMPILER | ||
| 4 | |||
| 5 | These license terms are an agreement between you and Microsoft | ||
| 6 | Corporation (or one of its affiliates). They apply to the software named | ||
| 7 | above and any Microsoft services or software updates (except to the | ||
| 8 | extent such services or updates are accompanied by new or additional | ||
| 9 | terms, in which case those different terms apply prospectively and do | ||
| 10 | not alter your or Microsoft’s rights relating to pre-updated software or | ||
| 11 | services). IF YOU COMPLY WITH THESE LICENSE TERMS, YOU HAVE THE RIGHTS | ||
| 12 | BELOW. BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. | ||
| 13 | |||
| 14 | INSTALLATION AND USE RIGHTS. | ||
| 15 | |||
| 16 | General. Subject to the terms of this agreement, you may install and use any number of copies of the software, and solely for use on Windows. | ||
| 17 | |||
| 18 | Included Microsoft Applications. The software may include other Microsoft applications. These license terms apply to those included applications, if any, unless other license terms are provided with the other Microsoft applications. | ||
| 19 | |||
| 20 | Microsoft Platforms. The software may include components from Microsoft Windows. These components are governed by separate agreements and their own product support policies, as described in the license terms found in the installation directory for that component or in the “Licenses” folder accompanying the software. | ||
| 21 | |||
| 22 | Third Party Components. The software may include third party components with separate legal notices or governed by other agreements, as may be described in the ThirdPartyNotices file(s) accompanying the software. | ||
| 23 | |||
| 24 | DATA. | ||
| 25 | |||
| 26 | Data Collection. The software may collect information about you and your use of the software, and send that to Microsoft. Microsoft may use this information to provide services and improve our products and services. You may opt-out of many of these scenarios, but not all, as described in the product documentation. There are also some features in the software that may enable you to collect data from users of your applications. If you use these features to enable data collection in your applications, you must comply with applicable law, including providing appropriate notices to users of your applications. You can learn more about data collection and use in the help documentation and the privacy statement at https://aka.ms/privacy. Your use of the software operates as your consent to these practices. | ||
| 27 | |||
| 28 | Processing of Personal Data. To the extent Microsoft is a processor or subprocessor of personal data in connection with the software, Microsoft makes the commitments in the European Union General Data Protection Regulation Terms of the Online Services Terms to all customers effective May 25, 2018, at https://docs.microsoft.com/en-us/legal/gdpr. | ||
| 29 | |||
| 30 | DISTRIBUTABLE CODE. The software may contain code you are permitted to distribute (i.e. make available for third parties) in applications you develop, as described in this Section. | ||
| 31 | |||
| 32 | Distribution Rights. The code and test files described below are distributable if included with the software. | ||
| 33 | |||
| 34 | Distributables. You may copy and distribute the object code form of the software listed in the distributables file list in the software; and | ||
| 35 | |||
| 36 | Third Party Distribution. You may permit distributors of your applications to copy and distribute any of this distributable code you elect to distribute with your applications. | ||
| 37 | |||
| 38 | Distribution Requirements. For any code you distribute, you must: | ||
| 39 | |||
| 40 | add significant primary functionality to it in your applications; | ||
| 41 | |||
| 42 | i. require distributors and external end users to agree to terms that protect it and Microsoft at least as much as this agreement; and | ||
| 43 | |||
| 44 | ii. indemnify, defend, and hold harmless Microsoft from any claims, including attorneys’ fees, related to the distribution or use of your applications, except to the extent that any claim is based solely on the unmodified distributable code. | ||
| 45 | |||
| 46 | Distribution Restrictions. You may not: | ||
| 47 | |||
| 48 | use Microsoft’s trademarks or trade dress in your application in any way that suggests your application comes from or is endorsed by Microsoft; or modify or distribute the source code of any distributable code so that any part of it becomes subject to any license that requires that the distributable code, any other part of the software, or any of Microsoft’s other intellectual property be disclosed or distributed in source code form, or that others have the right to modify it. | ||
| 49 | |||
| 50 | SCOPE OF LICENSE. The software is licensed, not sold. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you will not (and have no right to): | ||
| 51 | |||
| 52 | work around any technical limitations in the software that only allow you to use it in certain ways; | ||
| 53 | |||
| 54 | reverse engineer, decompile or disassemble the software, or otherwise attempt to derive the source code for the software, except and to the extent required by third party licensing terms governing use of certain open source components that may be included in the software; | ||
| 55 | |||
| 56 | remove, minimize, block, or modify any notices of Microsoft or its suppliers in the software; | ||
| 57 | |||
| 58 | use the software in any way that is against the law or to create or propagate malware; or | ||
| 59 | |||
| 60 | share, publish, distribute, or lease the software (except for any distributable code, subject to the terms above), provide the software as a stand-alone offering for others to use, or transfer the software or this agreement to any third party. | ||
| 61 | |||
| 62 | EXPORT RESTRICTIONS. You must comply with all domestic and international export laws and regulations that apply to the software, which include restrictions on destinations, end users, and end use. For further information on export restrictions, visit https://aka.ms/exporting. | ||
| 63 | |||
| 64 | SUPPORT SERVICES. Microsoft is not obligated under this agreement to provide any support services for the software. Any support provided is “as is”, “with all faults”, and without warranty of any kind. | ||
| 65 | |||
| 66 | UPDATES. The software may periodically check for updates, and download and install them for you. You may obtain updates only from Microsoft or authorized sources. Microsoft may need to update your system to provide you with updates. You agree to receive these automatic updates without any additional notice. Updates may not include or support all existing software features, services, or peripheral devices. | ||
| 67 | |||
| 68 | ENTIRE AGREEMENT. This agreement, and any other terms Microsoft may provide for supplements, updates, or third-party applications, is the entire agreement for the software. | ||
| 69 | |||
| 70 | APPLICABLE LAW AND PLACE TO RESOLVE DISPUTES. If you acquired the software in the United States or Canada, the laws of the state or province where you live (or, if a business, where your principal place of business is located) govern the interpretation of this agreement, claims for its breach, and all other claims (including consumer protection, unfair competition, and tort claims), regardless of conflict of laws principles. If you acquired the software in any other country, its laws apply. If U.S. federal jurisdiction exists, you and Microsoft consent to exclusive jurisdiction and venue in the federal court in King County, Washington for all disputes heard in court. If not, you and Microsoft consent to exclusive jurisdiction and venue in the Superior Court of King County, Washington for all disputes heard in court. | ||
| 71 | |||
| 72 | CONSUMER RIGHTS; REGIONAL VARIATIONS. This agreement describes certain legal rights. You may have other rights, including consumer rights, under the laws of your state or country. Separate and apart from your relationship with Microsoft, you may also have rights with respect to the party from which you acquired the software. This agreement does not change those other rights if the laws of your state or country do not permit it to do so. For example, if you acquired the software in one of the below regions, or mandatory country law applies, then the following provisions apply to you: | ||
| 73 | |||
| 74 | a. Australia. You have statutory guarantees under the Australian | ||
| 75 | Consumer Law and nothing in this agreement is intended to affect | ||
| 76 | those rights. | ||
| 77 | |||
| 78 | b. Canada. If you acquired this software in Canada, you may stop | ||
| 79 | receiving updates by turning off the automatic update feature, | ||
| 80 | disconnecting your device from the Internet (if and when you | ||
| 81 | re-connect to the Internet, however, the software will resume | ||
| 82 | checking for and installing updates), or uninstalling the software. | ||
| 83 | The product documentation, if any, may also specify how to turn off | ||
| 84 | updates for your specific device or software. | ||
| 85 | |||
| 86 | c. Germany and Austria. | ||
| 87 | |||
| 88 | i. Warranty. The properly licensed software will perform substantially | ||
| 89 | as described in any Microsoft materials that accompany the software. | ||
| 90 | However, Microsoft gives no contractual guarantee in relation to the | ||
| 91 | licensed software. | ||
| 92 | |||
| 93 | ii. Limitation of Liability. In case of intentional conduct, gross | ||
| 94 | negligence, claims based on the Product Liability Act, as well as, in | ||
| 95 | case of death or personal or physical injury, Microsoft is liable | ||
| 96 | according to the statutory law. | ||
| 97 | |||
| 98 | Subject to the foregoing clause ii., Microsoft will only be liable for slight negligence if Microsoft is in breach of such material contractual obligations, the fulfillment of which facilitate the due performance of this agreement, the breach of which would endanger the purpose of this agreement and the compliance with which a party may constantly trust in (so-called "cardinal obligations"). In other cases of slight negligence, Microsoft will not be liable for slight negligence. | ||
| 99 | |||
| 100 | DISCLAIMER OF WARRANTY. THE SOFTWARE IS LICENSED “AS IS.” YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES, OR CONDITIONS. TO THE EXTENT PERMITTED UNDER APPLICABLE LAWS, MICROSOFT EXCLUDES ALL IMPLIED WARRANTIES, INCLUDING MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. | ||
| 101 | |||
| 102 | LIMITATION ON AND EXCLUSION OF DAMAGES. IF YOU HAVE ANY BASIS FOR RECOVERING DAMAGES DESPITE THE PRECEDING DISCLAIMER OF WARRANTY, YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT, OR INCIDENTAL DAMAGES. | ||
| 103 | |||
| 104 | This limitation applies to (a) anything related to the software, | ||
| 105 | services, content (including code) on third party Internet sites, or | ||
| 106 | third party applications; and (b) claims for breach of contract, | ||
| 107 | warranty, guarantee, or condition; strict liability, negligence, or | ||
| 108 | other tort; or any other claim; in each case to the extent permitted by | ||
| 109 | applicable law. | ||
| 110 | |||
| 111 | It also applies even if Microsoft knew or should have known about the | ||
| 112 | possibility of the damages. The above limitation or exclusion may not | ||
| 113 | apply to you because your state, province, or country may not allow the | ||
| 114 | exclusion or limitation of incidental, consequential, or other damages. | ||
| 115 | |||
| 116 | Please note: As this software is distributed in Canada, some of the | ||
| 117 | clauses in this agreement are provided below in French. | ||
| 118 | |||
| 119 | Remarque: Ce logiciel étant distribué au Canada, certaines des clauses | ||
| 120 | dans ce contrat sont fournies ci-dessous en français. | ||
| 121 | |||
| 122 | EXONÉRATION DE GARANTIE. Le logiciel visé par une licence est offert « | ||
| 123 | tel quel ». Toute utilisation de ce logiciel est à votre seule risque et | ||
| 124 | péril. Microsoft n’accorde aucune autre garantie expresse. Vous pouvez | ||
| 125 | bénéficier de droits additionnels en vertu du droit local sur la | ||
| 126 | protection des consommateurs, que ce contrat ne peut modifier. La ou | ||
| 127 | elles sont permises par le droit locale, les garanties implicites de | ||
| 128 | qualité marchande, d’adéquation à un usage particulier et d’absence de | ||
| 129 | contrefaçon sont exclues. | ||
| 130 | |||
| 131 | LIMITATION DES DOMMAGES-INTÉRÊTS ET EXCLUSION DE RESPONSABILITÉ POUR LES | ||
| 132 | DOMMAGES. Vous pouvez obtenir de Microsoft et de ses fournisseurs une | ||
| 133 | indemnisation en cas de dommages directs uniquement à hauteur de 5,00 $ | ||
| 134 | US. Vous ne pouvez prétendre à aucune indemnisation pour les autres | ||
| 135 | dommages, y compris les dommages spéciaux, indirects ou accessoires et | ||
| 136 | pertes de bénéfices. | ||
| 137 | |||
| 138 | Cette limitation concerne: | ||
| 139 | |||
| 140 | • tout ce qui est relié au logiciel, aux services ou au contenu (y | ||
| 141 | compris le code) figurant sur des sites Internet tiers ou dans des | ||
| 142 | programmes tiers; et | ||
| 143 | |||
| 144 | • les réclamations au titre de violation de contrat ou de garantie, ou | ||
| 145 | au titre de responsabilité stricte, de négligence ou d’une autre faute | ||
| 146 | dans la limite autorisée par la loi en vigueur. | ||
| 147 | |||
| 148 | Elle s’applique également, même si Microsoft connaissait ou devrait | ||
| 149 | connaître l’éventualité d’un tel dommage. Si votre pays n’autorise pas | ||
| 150 | l’exclusion ou la limitation de responsabilité pour les dommages | ||
| 151 | indirects, accessoires ou de quelque nature que ce soit, il se peut que | ||
| 152 | la limitation ou l’exclusion ci-dessus ne s’appliquera pas à votre | ||
| 153 | égard. | ||
| 154 | |||
| 155 | EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. | ||
| 156 | Vous pourriez avoir d’autres droits prévus par les lois de votre pays. | ||
| 157 | Le présent contrat ne modifie pas les droits que vous confèrent les lois | ||
| 158 | de votre pays si celles-ci ne le permettent pas. | ||
diff --git a/contrib/dxc_2025_07_14/ReleaseNotes.md b/contrib/dxc_2025_07_14/ReleaseNotes.md new file mode 100644 index 0000000..588bda6 --- /dev/null +++ b/contrib/dxc_2025_07_14/ReleaseNotes.md | |||
| @@ -0,0 +1,219 @@ | |||
| 1 | # DirectX Shader Compiler Redistributable Package | ||
| 2 | |||
| 3 | This package contains a copy of the DirectX Shader Compiler redistributable and its associated development headers. | ||
| 4 | |||
| 5 | For help getting started, please see: | ||
| 6 | |||
| 7 | <https://github.com/microsoft/DirectXShaderCompiler/wiki> | ||
| 8 | |||
| 9 | ## Licenses | ||
| 10 | |||
| 11 | The included licenses apply to the following files: | ||
| 12 | |||
| 13 | | License file | Applies to | | ||
| 14 | |---|---| | ||
| 15 | |LICENSE-MIT.txt |d3d12shader.h| | ||
| 16 | |LICENSE-LLVM.txt |all other files| | ||
| 17 | |||
| 18 | ## Changelog | ||
| 19 | |||
| 20 | ### Version 1.8.2505.1 | ||
| 21 | |||
| 22 | - Fix regression: [#7510](https://github.com/microsoft/DirectXShaderCompiler/issues/7510) crash when calling `sizeof` on templated type. | ||
| 23 | - Fix regression: [#7508](https://github.com/microsoft/DirectXShaderCompiler/issues/7508) crash when calling `Load` with `status`. | ||
| 24 | - Header file `dxcpix.h` was added to the release package. | ||
| 25 | |||
| 26 | ### Version 1.8.2505 | ||
| 27 | |||
| 28 | #### Potentially breaking changes | ||
| 29 | |||
| 30 | - Typed buffers (including ROV buffers) no longer accept types other than vectors and scalars. Any other types will produce descriptive errors. This removes support for appropriately sized matrices and structs. Though it worked in some contexts, code generated from such types was unreliable. | ||
| 31 | - Load and Store operations have been refactored as a consequence. Behavior should be identical, please file issues if discrepancies are observed. | ||
| 32 | - The compiler will now always use the internal validator instead of searching for an external DXIL.dll. The (hidden) `-select-validator` option has been removed. | ||
| 33 | |||
| 34 | #### Notable SPIR-V updates | ||
| 35 | |||
| 36 | - Fix unnecessary Int64 requirement when loading Float64 | ||
| 37 | - Added vk::BufferPointer, see [proposal](https://github.com/microsoft/hlsl-specs/blob/main/proposals/0010-vk-buffer-ref.md) for more details. | ||
| 38 | - Implement QuadAny and QuadAll (#7266) | ||
| 39 | - Fix -fvk-invert-y (#7447) | ||
| 40 | |||
| 41 | #### Shader Model 6.9 Preview | ||
| 42 | |||
| 43 | You can now compile shaders to SM 6.9, but this is a preview, so shader hashes will be set to the PREVIEW_BYPASS pattern. | ||
| 44 | SM 6.9 shaders will only work with AgilitySDK 1.717.0-preview, a supported preview driver, and use of experimental shader models in developer mode. | ||
| 45 | Preview shaders will not be compatible with the SM 6.9 release, or likely even later versions of the SM 6.9 preview. | ||
| 46 | |||
| 47 | SM 6.9 Preview Additions: | ||
| 48 | |||
| 49 | - Long vectors are allowed in HLSL when targeting shader model 6.9. Vectors up to 1024 elements in length can be loaded from/stored to raw buffers and used in elementwise operations. See the [long vector proposal](https://github.com/microsoft/hlsl-specs/blob/main/proposals/0026-hlsl-long-vector-type.md) for more details. | ||
| 50 | - HLSL Vectors are still limited to a maximum of 4 elements when used in certain contexts: | ||
| 51 | - entry function inputs/outputs | ||
| 52 | - parameter, payload, attribute, and node record types for mesh, raytracing, and node shaders | ||
| 53 | - constant buffers (cbuffer), texture buffers (tbuffer), textures and typed buffers | ||
| 54 | - Note: some HLSL elementwise intrinsics do not yet support long vectors in this preview | ||
| 55 | - Native vectors of up to 1024 elements are now present in DXIL. This includes vector llvm instructions, load/store, and various elementwise DXIL operations. This may result in smaller DXIL and potentially other performance improvements. See the [dxil vectors proposal](https://github.com/microsoft/hlsl-specs/blob/main/proposals/0030-dxil-vectors.md) for more details. | ||
| 56 | - Cooperative Vector operations, a subset of Linear Algebra (LinAlg). See the [cooperative vectors proposal](https://github.com/microsoft/hlsl-specs/blob/main/proposals/0029-cooperative-vector.md) and the [HLSL header based API proposal](https://github.com/microsoft/hlsl-specs/blob/main/proposals/0031-hlsl-vector-matrix-operations.md) for more details. | ||
| 57 | - New built-in operations are added for multiplying long vectors with a matrix in a ByteAddressBuffer, optionally with accumulation and bias data, as well as outer product and vector accumulate operations. | ||
| 58 | - An HLSL header shipped with this release provides a more convenient API for using these built-in operations. | ||
| 59 | - Support for [Opacity Micromaps](https://github.com/microsoft/hlsl-specs/blob/main/proposals/0024-opacity-micromaps.md) in DXR shaders as well as for RayQuery. | ||
| 60 | - Unlocks DXR performance improvements using triangle sub-divisions for fast hit/miss detection to reduce the need for anyhit invocations. | ||
| 61 | - Support for [Shader Execution Reordering](https://github.com/microsoft/hlsl-specs/blob/main/proposals/0027-shader-execution-reordering.md) in DXR. | ||
| 62 | - Introduces `MaybeReorderThread()` to explicitly specify where and how shader execution coherence can be improved. `MaybeReorderThread()` can be used in raygeneration shaders. | ||
| 63 | - `HitObject` decouples traversal, intersection testing and anyhit shading from closesthit and miss shading for more control and better reordering opportunities. `HitObject` can be used in raygeneration, closesthit and miss shaders. | ||
| 64 | |||
| 65 | ### Version 1.8.2502 | ||
| 66 | |||
| 67 | This cumulative release contains numerous bug fixes and stability improvements. | ||
| 68 | |||
| 69 | Here are some highlights: | ||
| 70 | |||
| 71 | - The incomplete WaveMatrix implementation has been removed. [#6807](https://github.com/microsoft/DirectXShaderCompiler/pull/6807) | ||
| 72 | - DXIL Validator Hash is open sourced. [#6846](https://github.com/microsoft/DirectXShaderCompiler/pull/6846) | ||
| 73 | - DXIL container validation for PSV0 part allows any content ordering inside string and semantic index tables. [#6859](https://github.com/microsoft/DirectXShaderCompiler/pull/6859) | ||
| 74 | - The and() and or() intrinsics will now accept non-integer parameters by casting them to bools. [#7060](https://github.com/microsoft/DirectXShaderCompiler/pull/7060) | ||
| 75 | - Released executables will now expect the filenames associated with the released pdbs. Instead of expecting `dxc_full.pdb`, `dxc.exe` will now expect `dxc.pdb`. | ||
| 76 | |||
| 77 | ### Version 1.8.2407 | ||
| 78 | |||
| 79 | This cumulative release contains numerous bug fixes and stability improvments. | ||
| 80 | |||
| 81 | Here are some highlights: | ||
| 82 | |||
| 83 | - dxc generates invalid alignment on groupshared matrix load/store instructions in [#6416](https://github.com/microsoft/DirectXShaderCompiler/issues/6416) | ||
| 84 | - [Optimization] DXC is missing common factor optimization in some cases in [#6593](https://github.com/microsoft/DirectXShaderCompiler/issues/6593) | ||
| 85 | - [SPIR-V] Implement WaveMutliPrefix* in [#6600](https://github.com/microsoft/DirectXShaderCompiler/issues/6600) | ||
| 86 | - [SPIR-V] Implement SampleCmpLevel for SM6.7 in [#6613](https://github.com/microsoft/DirectXShaderCompiler/issues/6613) | ||
| 87 | - Avoid adding types to default namespace in [#6646](https://github.com/microsoft/DirectXShaderCompiler/issues/6646) | ||
| 88 | - Release notes once found in `README.md` can now be found in `ReleaseNotes.md` | ||
| 89 | - Fixed several bugs in the loop restructurizer. Shader developers who are using -opt-disable structurize-loop-exits-for-unroll to disable the loop restructurizer should consider removing that workaround. | ||
| 90 | |||
| 91 | ### Version 1.8.2405 | ||
| 92 | |||
| 93 | DX Compiler Release for May 2024 | ||
| 94 | |||
| 95 | This release includes two major new elements: | ||
| 96 | |||
| 97 | - The introduction of the first component of HLSL 202x | ||
| 98 | - The inclusion of clang-built Windows binaries | ||
| 99 | |||
| 100 | See [the official blog post](https://devblogs.microsoft.com/directx/dxc-1-8-2405-available) for a more detailed description of this release. | ||
| 101 | |||
| 102 | HLSL 202x is a placeholder designation for what will ultimately be a new language version that further aligns HLSL with modern language features. It is intended to serve as a bridge to help transition to the expected behavior of the modernized compiler. | ||
| 103 | |||
| 104 | To experiment with 202x, use the `-HV 202x` flag. We recommend enabling these warnings as well to catch potential changes in behavior: `-Wconversion -Wdouble-promotion -Whlsl-legacy-literal`. | ||
| 105 | |||
| 106 | The first feature available in 202x updates HLSL's treatment of literals to better conform with C/C++. In previous versions, un-suffixed literal types targeted the highest possible precision. This feature revises that to mostly conform with C/C++ behavior. See the above blog post for details. | ||
| 107 | |||
| 108 | Clang-built Windows binaries are included in addition to the MSVC-built binaries that have always been shipped before. The clang-built compiler is expected to improve HLSL compile times in many cases. We are eager for feedback about this build positive or negative, related to compile times or correctness. | ||
| 109 | |||
| 110 | ### Version 1.8.2403.2 | ||
| 111 | |||
| 112 | DX Compiler Release for March 2024 - Patch 2 | ||
| 113 | |||
| 114 | - Fix regression: [#6426](https://github.com/microsoft/DirectXShaderCompiler/issues/6426) Regression, SIGSEGV instead of diagnostics when encountering bool operator==(const T&, const T&). | ||
| 115 | |||
| 116 | ### Version 1.8.2403.1 | ||
| 117 | |||
| 118 | DX Compiler Release for March 2024 - Patch 1 | ||
| 119 | |||
| 120 | - Fix regression: [#6419](https://github.com/microsoft/DirectXShaderCompiler/issues/6419) crash when using literal arguments with `fmod`. | ||
| 121 | |||
| 122 | ### Version 1.8.2403 | ||
| 123 | |||
| 124 | DX Compiler release for March 2024 | ||
| 125 | |||
| 126 | - Shader Model 6.8 is fully supported | ||
| 127 | - Work Graphs allow node shaders with user-defined input and output payloads | ||
| 128 | - New Barrier builtin functions with specific memory types and semantics | ||
| 129 | - Expanded Comparison sampler intrinsics: SampleCmpBias, SampleCmpGrad, and CalculateLevelOfDetail | ||
| 130 | - StartVertexLocation and StartInstanceLocation semantics | ||
| 131 | - WaveSizeRange entry point attribute allows specifying a range of supported wave sizes | ||
| 132 | - Improved compile-time validation and runtime validation information | ||
| 133 | - Various stability improvements including numerous address sanitation fixes | ||
| 134 | - Several Diagnostic improvements | ||
| 135 | - Many diagnostics are generated earlier and with more detailed information | ||
| 136 | - Library profile diagnostic improvements | ||
| 137 | - No longer infer library shader type when not specified | ||
| 138 | - More helpful diagnostics for numthreads and other entry point attributes | ||
| 139 | - Validation errors more accurately determine usage by the entry point | ||
| 140 | - Improve debug info generation | ||
| 141 | - Further improvements to Linux build quality | ||
| 142 | - File paths arguments for `IDxcIncludeHandler::LoadSource` will now be normalized to use OS specific slashes | ||
| 143 | (`\` for windows, `/` for *nix) and no longer have double slashes except for UNC paths (`\\my\unc\path`).” | ||
| 144 | |||
| 145 | ### Version 1.7.2308 | ||
| 146 | |||
| 147 | DX Compiler release for August 2023 | ||
| 148 | |||
| 149 | - HLSL 2021 is now enabled by default | ||
| 150 | - Various HLSL 2021 fixes have been made to | ||
| 151 | - Operator overloading fixes | ||
| 152 | - Templates fixes | ||
| 153 | - Select() with samplers | ||
| 154 | - Bitfields show in reflections | ||
| 155 | - Bitfields can be used on enums | ||
| 156 | - Allow function template default params | ||
| 157 | - Issues with loading and using Linux binaries have been resolved | ||
| 158 | - Support #pragma region/endregion | ||
| 159 | - Various stability and diagnostic improvements | ||
| 160 | - Dxcapi.h inline documentation is improved | ||
| 161 | - Linking of libraries created by different compilers is disallowed to prevent interface Issues | ||
| 162 | - Inout parameter correctness improved | ||
| 163 | |||
| 164 | The package includes dxc.exe, dxcompiler.dll, corresponding lib and headers, and dxil.dll for x64 and arm64 platforms on Windows. | ||
| 165 | The package also includes Linux version of the compiler with corresponding executable, libdxcompiler.so, corresponding headers, and libdxil.so for x64 platforms. | ||
| 166 | |||
| 167 | The new DirectX 12 Agility SDK (Microsoft.Direct3D.D3D12 nuget package) and a hardware driver with appropriate support | ||
| 168 | are required to run shader model 6.7 shaders. Please see <https://aka.ms/directx12agility> for details. | ||
| 169 | |||
| 170 | The SPIR-V backend of the compiler has been enabled in this release. | ||
| 171 | |||
| 172 | ### Version 1.7.2212 | ||
| 173 | |||
| 174 | DX Compiler release for December 2022. | ||
| 175 | |||
| 176 | - Includes full support of HLSL 2021 for SPIRV generation as well as many HLSL 2021 fixes and enhancements: | ||
| 177 | - HLSL 2021's `and`, `or` and `select` intrinsics are now exposed in all language modes. This was done to ease porting code bases to HLSL2021, but may cause name conflicts in existing code. | ||
| 178 | - Improved template utility with user-defined types | ||
| 179 | - Many additional bug fixes | ||
| 180 | - Linux binaries are now included. | ||
| 181 | This includes the compiler executable, the dynamic library, and the dxil signing library. | ||
| 182 | - New flags for inspecting compile times: | ||
| 183 | - `-ftime-report` flag prints a high level summary of compile time broken down by major phase or pass in the compiler. The DXC | ||
| 184 | command line will print the output to stdout. | ||
| 185 | - `-ftime-trace` flag prints a Chrome trace json file. The output can be routed to a specific file by providing a filename to | ||
| 186 | the argument using the format `-ftime-trace=<filename>`. Chrome trace files can be opened in Chrome by loading the built-in tracing tool | ||
| 187 | at chrome://tracing. The trace file captures hierarchial timing data with additional context enabling a much more in-depth profiling | ||
| 188 | experience. | ||
| 189 | - Both new options are supported via the DXC API using the `DXC_OUT_TIME_REPORT` and `DXC_OUT_TIME_TRACE` output kinds respectively. | ||
| 190 | - IDxcPdbUtils2 enables reading new PDB container part | ||
| 191 | - `-P` flag will now behave as it does with cl using the file specified by `-Fi` or a default | ||
| 192 | - Unbound multidimensional resource arrays are allowed | ||
| 193 | - Diagnostic improvements | ||
| 194 | - Reflection support on non-Windows platforms; minor updates adding RequiredFeatureFlags to library function reflection and thread group size for AS and MS. | ||
| 195 | |||
| 196 | The package includes dxc.exe, dxcompiler.dll, corresponding lib and headers, and dxil.dll for x64 and arm64 platforms on Windows. | ||
| 197 | For the first time the package also includes Linux version of the compiler with corresponding executable, libdxcompiler.so, corresponding headers, and libdxil.so for x64 platforms. | ||
| 198 | |||
| 199 | The new DirectX 12 Agility SDK (Microsoft.Direct3D.D3D12 nuget package) and a hardware driver with appropriate support | ||
| 200 | are required to run shader model 6.7 shaders. Please see <https://aka.ms/directx12agility> for details. | ||
| 201 | |||
| 202 | The SPIR-V backend of the compiler has been enabled in this release. Please note that Microsoft does not perform testing/verification of the SPIR-V backend. | ||
| 203 | |||
| 204 | ### Version 1.7.2207 | ||
| 205 | |||
| 206 | DX Compiler release for July 2022. Contains shader model 6.7 and many bug fixes and improvements, such as: | ||
| 207 | |||
| 208 | - Features: Shader Model 6.7 includes support for Raw Gather, Programmable Offsets, QuadAny/QuadAll, WaveOpsIncludeHelperLanes, and more! | ||
| 209 | - Platforms: ARM64 support | ||
| 210 | - HLSL 2021 : Enable “using” keyword | ||
| 211 | - Optimizations: Loop unrolling and dead code elimination improvements | ||
| 212 | - Developer tools: Improved disassembly output | ||
| 213 | |||
| 214 | The package includes dxc.exe, dxcompiler.dll, corresponding lib and headers, and dxil.dll for x64 and, for the first time, arm64 platforms! | ||
| 215 | |||
| 216 | The new DirectX 12 Agility SDK (Microsoft.Direct3D.D3D12 nuget package) and a hardware driver with appropriate support | ||
| 217 | are required to run shader model 6.7 shaders. Please see <https://aka.ms/directx12agility> for details. | ||
| 218 | |||
| 219 | The SPIR-V backend of the compiler has been enabled in this release. Please note that Microsoft does not perform testing/verification of the SPIR-V backend. | ||
diff --git a/contrib/dxc_2025_07_14/bin/arm64/dxc.exe b/contrib/dxc_2025_07_14/bin/arm64/dxc.exe new file mode 100644 index 0000000..ee93ccf --- /dev/null +++ b/contrib/dxc_2025_07_14/bin/arm64/dxc.exe | |||
| Binary files differ | |||
diff --git a/contrib/dxc_2025_07_14/bin/arm64/dxcompiler.dll b/contrib/dxc_2025_07_14/bin/arm64/dxcompiler.dll new file mode 100644 index 0000000..d3192d6 --- /dev/null +++ b/contrib/dxc_2025_07_14/bin/arm64/dxcompiler.dll | |||
| Binary files differ | |||
diff --git a/contrib/dxc_2025_07_14/bin/arm64/dxil.dll b/contrib/dxc_2025_07_14/bin/arm64/dxil.dll new file mode 100644 index 0000000..e78a1bc --- /dev/null +++ b/contrib/dxc_2025_07_14/bin/arm64/dxil.dll | |||
| Binary files differ | |||
diff --git a/contrib/dxc_2025_07_14/bin/arm64/dxv.exe b/contrib/dxc_2025_07_14/bin/arm64/dxv.exe new file mode 100644 index 0000000..2c6a8a7 --- /dev/null +++ b/contrib/dxc_2025_07_14/bin/arm64/dxv.exe | |||
| Binary files differ | |||
diff --git a/contrib/dxc_2025_07_14/bin/x64/dxc.exe b/contrib/dxc_2025_07_14/bin/x64/dxc.exe new file mode 100644 index 0000000..1e24002 --- /dev/null +++ b/contrib/dxc_2025_07_14/bin/x64/dxc.exe | |||
| Binary files differ | |||
diff --git a/contrib/dxc_2025_07_14/bin/x64/dxcompiler.dll b/contrib/dxc_2025_07_14/bin/x64/dxcompiler.dll new file mode 100644 index 0000000..a52c4ab --- /dev/null +++ b/contrib/dxc_2025_07_14/bin/x64/dxcompiler.dll | |||
| Binary files differ | |||
diff --git a/contrib/dxc_2025_07_14/bin/x64/dxil.dll b/contrib/dxc_2025_07_14/bin/x64/dxil.dll new file mode 100644 index 0000000..c3d1ebf --- /dev/null +++ b/contrib/dxc_2025_07_14/bin/x64/dxil.dll | |||
| Binary files differ | |||
diff --git a/contrib/dxc_2025_07_14/bin/x64/dxv.exe b/contrib/dxc_2025_07_14/bin/x64/dxv.exe new file mode 100644 index 0000000..6bae637 --- /dev/null +++ b/contrib/dxc_2025_07_14/bin/x64/dxv.exe | |||
| Binary files differ | |||
diff --git a/contrib/dxc_2025_07_14/bin/x86/dxc.exe b/contrib/dxc_2025_07_14/bin/x86/dxc.exe new file mode 100644 index 0000000..f851cdd --- /dev/null +++ b/contrib/dxc_2025_07_14/bin/x86/dxc.exe | |||
| Binary files differ | |||
diff --git a/contrib/dxc_2025_07_14/bin/x86/dxcompiler.dll b/contrib/dxc_2025_07_14/bin/x86/dxcompiler.dll new file mode 100644 index 0000000..ca78b1d --- /dev/null +++ b/contrib/dxc_2025_07_14/bin/x86/dxcompiler.dll | |||
| Binary files differ | |||
diff --git a/contrib/dxc_2025_07_14/bin/x86/dxil.dll b/contrib/dxc_2025_07_14/bin/x86/dxil.dll new file mode 100644 index 0000000..82ee82e --- /dev/null +++ b/contrib/dxc_2025_07_14/bin/x86/dxil.dll | |||
| Binary files differ | |||
diff --git a/contrib/dxc_2025_07_14/bin/x86/dxv.exe b/contrib/dxc_2025_07_14/bin/x86/dxv.exe new file mode 100644 index 0000000..b5f3196 --- /dev/null +++ b/contrib/dxc_2025_07_14/bin/x86/dxv.exe | |||
| Binary files differ | |||
diff --git a/contrib/dxc_2025_07_14/inc/Support/ErrorCodes.h b/contrib/dxc_2025_07_14/inc/Support/ErrorCodes.h new file mode 100644 index 0000000..5239c81 --- /dev/null +++ b/contrib/dxc_2025_07_14/inc/Support/ErrorCodes.h | |||
| @@ -0,0 +1,160 @@ | |||
| 1 | /////////////////////////////////////////////////////////////////////////////// | ||
| 2 | // // | ||
| 3 | // ErrorCodes.h // | ||
| 4 | // Copyright (C) Microsoft Corporation. All rights reserved. // | ||
| 5 | // This file is distributed under the University of Illinois Open Source // | ||
| 6 | // License. See LICENSE.TXT for details. // | ||
| 7 | // // | ||
| 8 | // Provides error code values for the DirectX compiler and tools. // | ||
| 9 | // // | ||
| 10 | /////////////////////////////////////////////////////////////////////////////// | ||
| 11 | |||
| 12 | #pragma once | ||
| 13 | |||
| 14 | // Redeclare some macros to not depend on winerror.h | ||
| 15 | #define DXC_SEVERITY_ERROR 1 | ||
| 16 | #define DXC_MAKE_HRESULT(sev, fac, code) \ | ||
| 17 | ((HRESULT)(((unsigned long)(sev) << 31) | ((unsigned long)(fac) << 16) | \ | ||
| 18 | ((unsigned long)(code)))) | ||
| 19 | |||
| 20 | #define HRESULT_IS_WIN32ERR(hr) \ | ||
| 21 | ((HRESULT)(hr & 0xFFFF0000) == \ | ||
| 22 | MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, 0)) | ||
| 23 | #define HRESULT_AS_WIN32ERR(hr) (HRESULT_CODE(hr)) | ||
| 24 | |||
| 25 | // Error codes from C libraries (0n150) - 0x8096xxxx | ||
| 26 | #define FACILITY_ERRNO (0x96) | ||
| 27 | #define HRESULT_FROM_ERRNO(x) \ | ||
| 28 | MAKE_HRESULT(DXC_SEVERITY_ERROR, FACILITY_ERRNO, (x)) | ||
| 29 | |||
| 30 | // Error codes from DXC libraries (0n170) - 0x8013xxxx | ||
| 31 | #define FACILITY_DXC (0xAA) | ||
| 32 | |||
| 33 | // 0x00000000 - The operation succeeded. | ||
| 34 | #define DXC_S_OK 0 // _HRESULT_TYPEDEF_(0x00000000L) | ||
| 35 | |||
| 36 | // 0x80AA0001 - The operation failed because overlapping semantics were found. | ||
| 37 | #define DXC_E_OVERLAPPING_SEMANTICS \ | ||
| 38 | DXC_MAKE_HRESULT(DXC_SEVERITY_ERROR, FACILITY_DXC, (0x0001)) | ||
| 39 | |||
| 40 | // 0x80AA0002 - The operation failed because multiple depth semantics were | ||
| 41 | // found. | ||
| 42 | #define DXC_E_MULTIPLE_DEPTH_SEMANTICS \ | ||
| 43 | DXC_MAKE_HRESULT(DXC_SEVERITY_ERROR, FACILITY_DXC, (0x0002)) | ||
| 44 | |||
| 45 | // 0x80AA0003 - Input file is too large. | ||
| 46 | #define DXC_E_INPUT_FILE_TOO_LARGE \ | ||
| 47 | DXC_MAKE_HRESULT(DXC_SEVERITY_ERROR, FACILITY_DXC, (0x0003)) | ||
| 48 | |||
| 49 | // 0x80AA0004 - Error parsing DXBC container. | ||
| 50 | #define DXC_E_INCORRECT_DXBC \ | ||
| 51 | DXC_MAKE_HRESULT(DXC_SEVERITY_ERROR, FACILITY_DXC, (0x0004)) | ||
| 52 | |||
| 53 | // 0x80AA0005 - Error parsing DXBC bytecode. | ||
| 54 | #define DXC_E_ERROR_PARSING_DXBC_BYTECODE \ | ||
| 55 | DXC_MAKE_HRESULT(DXC_SEVERITY_ERROR, FACILITY_DXC, (0x0005)) | ||
| 56 | |||
| 57 | // 0x80AA0006 - Data is too large. | ||
| 58 | #define DXC_E_DATA_TOO_LARGE \ | ||
| 59 | DXC_MAKE_HRESULT(DXC_SEVERITY_ERROR, FACILITY_DXC, (0x0006)) | ||
| 60 | |||
| 61 | // 0x80AA0007 - Incompatible converter options. | ||
| 62 | #define DXC_E_INCOMPATIBLE_CONVERTER_OPTIONS \ | ||
| 63 | DXC_MAKE_HRESULT(DXC_SEVERITY_ERROR, FACILITY_DXC, (0x0007)) | ||
| 64 | |||
| 65 | // 0x80AA0008 - Irreducible control flow graph. | ||
| 66 | #define DXC_E_IRREDUCIBLE_CFG \ | ||
| 67 | DXC_MAKE_HRESULT(DXC_SEVERITY_ERROR, FACILITY_DXC, (0x0008)) | ||
| 68 | |||
| 69 | // 0x80AA0009 - IR verification error. | ||
| 70 | #define DXC_E_IR_VERIFICATION_FAILED \ | ||
| 71 | DXC_MAKE_HRESULT(DXC_SEVERITY_ERROR, FACILITY_DXC, (0x0009)) | ||
| 72 | |||
| 73 | // 0x80AA000A - Scope-nested control flow recovery failed. | ||
| 74 | #define DXC_E_SCOPE_NESTED_FAILED \ | ||
| 75 | DXC_MAKE_HRESULT(DXC_SEVERITY_ERROR, FACILITY_DXC, (0x000A)) | ||
| 76 | |||
| 77 | // 0x80AA000B - Operation is not supported. | ||
| 78 | #define DXC_E_NOT_SUPPORTED \ | ||
| 79 | DXC_MAKE_HRESULT(DXC_SEVERITY_ERROR, FACILITY_DXC, (0x000B)) | ||
| 80 | |||
| 81 | // 0x80AA000C - Unable to encode string. | ||
| 82 | #define DXC_E_STRING_ENCODING_FAILED \ | ||
| 83 | DXC_MAKE_HRESULT(DXC_SEVERITY_ERROR, FACILITY_DXC, (0x000C)) | ||
| 84 | |||
| 85 | // 0x80AA000D - DXIL container is invalid. | ||
| 86 | #define DXC_E_CONTAINER_INVALID \ | ||
| 87 | DXC_MAKE_HRESULT(DXC_SEVERITY_ERROR, FACILITY_DXC, (0x000D)) | ||
| 88 | |||
| 89 | // 0x80AA000E - DXIL container is missing the DXIL part. | ||
| 90 | #define DXC_E_CONTAINER_MISSING_DXIL \ | ||
| 91 | DXC_MAKE_HRESULT(DXC_SEVERITY_ERROR, FACILITY_DXC, (0x000E)) | ||
| 92 | |||
| 93 | // 0x80AA000F - Unable to parse DxilModule metadata. | ||
| 94 | #define DXC_E_INCORRECT_DXIL_METADATA \ | ||
| 95 | DXC_MAKE_HRESULT(DXC_SEVERITY_ERROR, FACILITY_DXC, (0x000F)) | ||
| 96 | |||
| 97 | // 0x80AA0010 - Error parsing DDI signature. | ||
| 98 | #define DXC_E_INCORRECT_DDI_SIGNATURE \ | ||
| 99 | DXC_MAKE_HRESULT(DXC_SEVERITY_ERROR, FACILITY_DXC, (0x0010)) | ||
| 100 | |||
| 101 | // 0x80AA0011 - Duplicate part exists in dxil container. | ||
| 102 | #define DXC_E_DUPLICATE_PART \ | ||
| 103 | DXC_MAKE_HRESULT(DXC_SEVERITY_ERROR, FACILITY_DXC, (0x0011)) | ||
| 104 | |||
| 105 | // 0x80AA0012 - Error finding part in dxil container. | ||
| 106 | #define DXC_E_MISSING_PART \ | ||
| 107 | DXC_MAKE_HRESULT(DXC_SEVERITY_ERROR, FACILITY_DXC, (0x0012)) | ||
| 108 | |||
| 109 | // 0x80AA0013 - Malformed DXIL Container. | ||
| 110 | #define DXC_E_MALFORMED_CONTAINER \ | ||
| 111 | DXC_MAKE_HRESULT(DXC_SEVERITY_ERROR, FACILITY_DXC, (0x0013)) | ||
| 112 | |||
| 113 | // 0x80AA0014 - Incorrect Root Signature for shader. | ||
| 114 | #define DXC_E_INCORRECT_ROOT_SIGNATURE \ | ||
| 115 | DXC_MAKE_HRESULT(DXC_SEVERITY_ERROR, FACILITY_DXC, (0x0014)) | ||
| 116 | |||
| 117 | // 0X80AA0015 - DXIL container is missing DebugInfo part. | ||
| 118 | #define DXC_E_CONTAINER_MISSING_DEBUG \ | ||
| 119 | DXC_MAKE_HRESULT(DXC_SEVERITY_ERROR, FACILITY_DXC, (0x0015)) | ||
| 120 | |||
| 121 | // 0X80AA0016 - Unexpected failure in macro expansion. | ||
| 122 | #define DXC_E_MACRO_EXPANSION_FAILURE \ | ||
| 123 | DXC_MAKE_HRESULT(DXC_SEVERITY_ERROR, FACILITY_DXC, (0x0016)) | ||
| 124 | |||
| 125 | // 0X80AA0017 - DXIL optimization pass failed. | ||
| 126 | #define DXC_E_OPTIMIZATION_FAILED \ | ||
| 127 | DXC_MAKE_HRESULT(DXC_SEVERITY_ERROR, FACILITY_DXC, (0x0017)) | ||
| 128 | |||
| 129 | // 0X80AA0018 - General internal error. | ||
| 130 | #define DXC_E_GENERAL_INTERNAL_ERROR \ | ||
| 131 | DXC_MAKE_HRESULT(DXC_SEVERITY_ERROR, FACILITY_DXC, (0x0018)) | ||
| 132 | |||
| 133 | // 0X80AA0019 - Abort compilation error. | ||
| 134 | #define DXC_E_ABORT_COMPILATION_ERROR \ | ||
| 135 | DXC_MAKE_HRESULT(DXC_SEVERITY_ERROR, FACILITY_DXC, (0x0019)) | ||
| 136 | |||
| 137 | // 0X80AA001A - Error in extension mechanism. | ||
| 138 | #define DXC_E_EXTENSION_ERROR \ | ||
| 139 | DXC_MAKE_HRESULT(DXC_SEVERITY_ERROR, FACILITY_DXC, (0x001A)) | ||
| 140 | |||
| 141 | // 0X80AA001B - LLVM Fatal Error | ||
| 142 | #define DXC_E_LLVM_FATAL_ERROR \ | ||
| 143 | DXC_MAKE_HRESULT(DXC_SEVERITY_ERROR, FACILITY_DXC, (0x001B)) | ||
| 144 | |||
| 145 | // 0X80AA001C - LLVM Unreachable code | ||
| 146 | #define DXC_E_LLVM_UNREACHABLE \ | ||
| 147 | DXC_MAKE_HRESULT(DXC_SEVERITY_ERROR, FACILITY_DXC, (0x001C)) | ||
| 148 | |||
| 149 | // 0X80AA001D - LLVM Cast Failure | ||
| 150 | #define DXC_E_LLVM_CAST_ERROR \ | ||
| 151 | DXC_MAKE_HRESULT(DXC_SEVERITY_ERROR, FACILITY_DXC, (0x001D)) | ||
| 152 | |||
| 153 | // 0X80AA001E - External validator (DXIL.dll) required, and missing. | ||
| 154 | #define DXC_E_VALIDATOR_MISSING \ | ||
| 155 | DXC_MAKE_HRESULT(DXC_SEVERITY_ERROR, FACILITY_DXC, (0x001E)) | ||
| 156 | |||
| 157 | // 0X80AA001F - DXIL container Program Version mismatches Dxil module shader | ||
| 158 | // model | ||
| 159 | #define DXC_E_INCORRECT_PROGRAM_VERSION \ | ||
| 160 | DXC_MAKE_HRESULT(DXC_SEVERITY_ERROR, FACILITY_DXC, (0x001F)) \ No newline at end of file | ||
diff --git a/contrib/dxc_2025_07_14/inc/d3d12shader.h b/contrib/dxc_2025_07_14/inc/d3d12shader.h new file mode 100644 index 0000000..749e933 --- /dev/null +++ b/contrib/dxc_2025_07_14/inc/d3d12shader.h | |||
| @@ -0,0 +1,487 @@ | |||
| 1 | ////////////////////////////////////////////////////////////////////////////// | ||
| 2 | // | ||
| 3 | // Copyright (c) Microsoft Corporation. | ||
| 4 | // Licensed under the MIT license. | ||
| 5 | // | ||
| 6 | // File: D3D12Shader.h | ||
| 7 | // Content: D3D12 Shader Types and APIs | ||
| 8 | // | ||
| 9 | ////////////////////////////////////////////////////////////////////////////// | ||
| 10 | |||
| 11 | #ifndef __D3D12SHADER_H__ | ||
| 12 | #define __D3D12SHADER_H__ | ||
| 13 | |||
| 14 | #include "d3dcommon.h" | ||
| 15 | |||
| 16 | typedef enum D3D12_SHADER_VERSION_TYPE | ||
| 17 | { | ||
| 18 | D3D12_SHVER_PIXEL_SHADER = 0, | ||
| 19 | D3D12_SHVER_VERTEX_SHADER = 1, | ||
| 20 | D3D12_SHVER_GEOMETRY_SHADER = 2, | ||
| 21 | |||
| 22 | // D3D11 Shaders | ||
| 23 | D3D12_SHVER_HULL_SHADER = 3, | ||
| 24 | D3D12_SHVER_DOMAIN_SHADER = 4, | ||
| 25 | D3D12_SHVER_COMPUTE_SHADER = 5, | ||
| 26 | |||
| 27 | // D3D12 Shaders | ||
| 28 | D3D12_SHVER_LIBRARY = 6, | ||
| 29 | |||
| 30 | D3D12_SHVER_RAY_GENERATION_SHADER = 7, | ||
| 31 | D3D12_SHVER_INTERSECTION_SHADER = 8, | ||
| 32 | D3D12_SHVER_ANY_HIT_SHADER = 9, | ||
| 33 | D3D12_SHVER_CLOSEST_HIT_SHADER = 10, | ||
| 34 | D3D12_SHVER_MISS_SHADER = 11, | ||
| 35 | D3D12_SHVER_CALLABLE_SHADER = 12, | ||
| 36 | |||
| 37 | D3D12_SHVER_MESH_SHADER = 13, | ||
| 38 | D3D12_SHVER_AMPLIFICATION_SHADER = 14, | ||
| 39 | |||
| 40 | D3D12_SHVER_RESERVED0 = 0xFFF0, | ||
| 41 | } D3D12_SHADER_VERSION_TYPE; | ||
| 42 | |||
| 43 | #define D3D12_SHVER_GET_TYPE(_Version) \ | ||
| 44 | (((_Version) >> 16) & 0xffff) | ||
| 45 | #define D3D12_SHVER_GET_MAJOR(_Version) \ | ||
| 46 | (((_Version) >> 4) & 0xf) | ||
| 47 | #define D3D12_SHVER_GET_MINOR(_Version) \ | ||
| 48 | (((_Version) >> 0) & 0xf) | ||
| 49 | |||
| 50 | // Slot ID for library function return | ||
| 51 | #define D3D_RETURN_PARAMETER_INDEX (-1) | ||
| 52 | |||
| 53 | typedef D3D_RESOURCE_RETURN_TYPE D3D12_RESOURCE_RETURN_TYPE; | ||
| 54 | |||
| 55 | typedef D3D_CBUFFER_TYPE D3D12_CBUFFER_TYPE; | ||
| 56 | |||
| 57 | |||
| 58 | typedef struct _D3D12_SIGNATURE_PARAMETER_DESC | ||
| 59 | { | ||
| 60 | LPCSTR SemanticName; // Name of the semantic | ||
| 61 | UINT SemanticIndex; // Index of the semantic | ||
| 62 | UINT Register; // Number of member variables | ||
| 63 | D3D_NAME SystemValueType;// A predefined system value, or D3D_NAME_UNDEFINED if not applicable | ||
| 64 | D3D_REGISTER_COMPONENT_TYPE ComponentType; // Scalar type (e.g. uint, float, etc.) | ||
| 65 | BYTE Mask; // Mask to indicate which components of the register | ||
| 66 | // are used (combination of D3D10_COMPONENT_MASK values) | ||
| 67 | BYTE ReadWriteMask; // Mask to indicate whether a given component is | ||
| 68 | // never written (if this is an output signature) or | ||
| 69 | // always read (if this is an input signature). | ||
| 70 | // (combination of D3D_MASK_* values) | ||
| 71 | UINT Stream; // Stream index | ||
| 72 | D3D_MIN_PRECISION MinPrecision; // Minimum desired interpolation precision | ||
| 73 | } D3D12_SIGNATURE_PARAMETER_DESC; | ||
| 74 | |||
| 75 | typedef struct _D3D12_SHADER_BUFFER_DESC | ||
| 76 | { | ||
| 77 | LPCSTR Name; // Name of the constant buffer | ||
| 78 | D3D_CBUFFER_TYPE Type; // Indicates type of buffer content | ||
| 79 | UINT Variables; // Number of member variables | ||
| 80 | UINT Size; // Size of CB (in bytes) | ||
| 81 | UINT uFlags; // Buffer description flags | ||
| 82 | } D3D12_SHADER_BUFFER_DESC; | ||
| 83 | |||
| 84 | typedef struct _D3D12_SHADER_VARIABLE_DESC | ||
| 85 | { | ||
| 86 | LPCSTR Name; // Name of the variable | ||
| 87 | UINT StartOffset; // Offset in constant buffer's backing store | ||
| 88 | UINT Size; // Size of variable (in bytes) | ||
| 89 | UINT uFlags; // Variable flags | ||
| 90 | LPVOID DefaultValue; // Raw pointer to default value | ||
| 91 | UINT StartTexture; // First texture index (or -1 if no textures used) | ||
| 92 | UINT TextureSize; // Number of texture slots possibly used. | ||
| 93 | UINT StartSampler; // First sampler index (or -1 if no textures used) | ||
| 94 | UINT SamplerSize; // Number of sampler slots possibly used. | ||
| 95 | } D3D12_SHADER_VARIABLE_DESC; | ||
| 96 | |||
| 97 | typedef struct _D3D12_SHADER_TYPE_DESC | ||
| 98 | { | ||
| 99 | D3D_SHADER_VARIABLE_CLASS Class; // Variable class (e.g. object, matrix, etc.) | ||
| 100 | D3D_SHADER_VARIABLE_TYPE Type; // Variable type (e.g. float, sampler, etc.) | ||
| 101 | UINT Rows; // Number of rows (for matrices, 1 for other numeric, 0 if not applicable) | ||
| 102 | UINT Columns; // Number of columns (for vectors & matrices, 1 for other numeric, 0 if not applicable) | ||
| 103 | UINT Elements; // Number of elements (0 if not an array) | ||
| 104 | UINT Members; // Number of members (0 if not a structure) | ||
| 105 | UINT Offset; // Offset from the start of structure (0 if not a structure member) | ||
| 106 | LPCSTR Name; // Name of type, can be NULL | ||
| 107 | } D3D12_SHADER_TYPE_DESC; | ||
| 108 | |||
| 109 | typedef D3D_TESSELLATOR_DOMAIN D3D12_TESSELLATOR_DOMAIN; | ||
| 110 | |||
| 111 | typedef D3D_TESSELLATOR_PARTITIONING D3D12_TESSELLATOR_PARTITIONING; | ||
| 112 | |||
| 113 | typedef D3D_TESSELLATOR_OUTPUT_PRIMITIVE D3D12_TESSELLATOR_OUTPUT_PRIMITIVE; | ||
| 114 | |||
| 115 | typedef struct _D3D12_SHADER_DESC | ||
| 116 | { | ||
| 117 | UINT Version; // Shader version | ||
| 118 | LPCSTR Creator; // Creator string | ||
| 119 | UINT Flags; // Shader compilation/parse flags | ||
| 120 | |||
| 121 | UINT ConstantBuffers; // Number of constant buffers | ||
| 122 | UINT BoundResources; // Number of bound resources | ||
| 123 | UINT InputParameters; // Number of parameters in the input signature | ||
| 124 | UINT OutputParameters; // Number of parameters in the output signature | ||
| 125 | |||
| 126 | UINT InstructionCount; // Number of emitted instructions | ||
| 127 | UINT TempRegisterCount; // Number of temporary registers used | ||
| 128 | UINT TempArrayCount; // Number of temporary arrays used | ||
| 129 | UINT DefCount; // Number of constant defines | ||
| 130 | UINT DclCount; // Number of declarations (input + output) | ||
| 131 | UINT TextureNormalInstructions; // Number of non-categorized texture instructions | ||
| 132 | UINT TextureLoadInstructions; // Number of texture load instructions | ||
| 133 | UINT TextureCompInstructions; // Number of texture comparison instructions | ||
| 134 | UINT TextureBiasInstructions; // Number of texture bias instructions | ||
| 135 | UINT TextureGradientInstructions; // Number of texture gradient instructions | ||
| 136 | UINT FloatInstructionCount; // Number of floating point arithmetic instructions used | ||
| 137 | UINT IntInstructionCount; // Number of signed integer arithmetic instructions used | ||
| 138 | UINT UintInstructionCount; // Number of unsigned integer arithmetic instructions used | ||
| 139 | UINT StaticFlowControlCount; // Number of static flow control instructions used | ||
| 140 | UINT DynamicFlowControlCount; // Number of dynamic flow control instructions used | ||
| 141 | UINT MacroInstructionCount; // Number of macro instructions used | ||
| 142 | UINT ArrayInstructionCount; // Number of array instructions used | ||
| 143 | UINT CutInstructionCount; // Number of cut instructions used | ||
| 144 | UINT EmitInstructionCount; // Number of emit instructions used | ||
| 145 | D3D_PRIMITIVE_TOPOLOGY GSOutputTopology; // Geometry shader output topology | ||
| 146 | UINT GSMaxOutputVertexCount; // Geometry shader maximum output vertex count | ||
| 147 | D3D_PRIMITIVE InputPrimitive; // GS/HS input primitive | ||
| 148 | UINT PatchConstantParameters; // Number of parameters in the patch constant signature | ||
| 149 | UINT cGSInstanceCount; // Number of Geometry shader instances | ||
| 150 | UINT cControlPoints; // Number of control points in the HS->DS stage | ||
| 151 | D3D_TESSELLATOR_OUTPUT_PRIMITIVE HSOutputPrimitive; // Primitive output by the tessellator | ||
| 152 | D3D_TESSELLATOR_PARTITIONING HSPartitioning; // Partitioning mode of the tessellator | ||
| 153 | D3D_TESSELLATOR_DOMAIN TessellatorDomain; // Domain of the tessellator (quad, tri, isoline) | ||
| 154 | // instruction counts | ||
| 155 | UINT cBarrierInstructions; // Number of barrier instructions in a compute shader | ||
| 156 | UINT cInterlockedInstructions; // Number of interlocked instructions | ||
| 157 | UINT cTextureStoreInstructions; // Number of texture writes | ||
| 158 | } D3D12_SHADER_DESC; | ||
| 159 | |||
| 160 | typedef struct _D3D12_SHADER_INPUT_BIND_DESC | ||
| 161 | { | ||
| 162 | LPCSTR Name; // Name of the resource | ||
| 163 | D3D_SHADER_INPUT_TYPE Type; // Type of resource (e.g. texture, cbuffer, etc.) | ||
| 164 | UINT BindPoint; // Starting bind point | ||
| 165 | UINT BindCount; // Number of contiguous bind points (for arrays) | ||
| 166 | |||
| 167 | UINT uFlags; // Input binding flags | ||
| 168 | D3D_RESOURCE_RETURN_TYPE ReturnType; // Return type (if texture) | ||
| 169 | D3D_SRV_DIMENSION Dimension; // Dimension (if texture) | ||
| 170 | UINT NumSamples; // Number of samples (0 if not MS texture) | ||
| 171 | UINT Space; // Register space | ||
| 172 | UINT uID; // Range ID in the bytecode | ||
| 173 | } D3D12_SHADER_INPUT_BIND_DESC; | ||
| 174 | |||
| 175 | #define D3D_SHADER_REQUIRES_DOUBLES 0x00000001 | ||
| 176 | #define D3D_SHADER_REQUIRES_EARLY_DEPTH_STENCIL 0x00000002 | ||
| 177 | #define D3D_SHADER_REQUIRES_UAVS_AT_EVERY_STAGE 0x00000004 | ||
| 178 | #define D3D_SHADER_REQUIRES_64_UAVS 0x00000008 | ||
| 179 | #define D3D_SHADER_REQUIRES_MINIMUM_PRECISION 0x00000010 | ||
| 180 | #define D3D_SHADER_REQUIRES_11_1_DOUBLE_EXTENSIONS 0x00000020 | ||
| 181 | #define D3D_SHADER_REQUIRES_11_1_SHADER_EXTENSIONS 0x00000040 | ||
| 182 | #define D3D_SHADER_REQUIRES_LEVEL_9_COMPARISON_FILTERING 0x00000080 | ||
| 183 | #define D3D_SHADER_REQUIRES_TILED_RESOURCES 0x00000100 | ||
| 184 | #define D3D_SHADER_REQUIRES_STENCIL_REF 0x00000200 | ||
| 185 | #define D3D_SHADER_REQUIRES_INNER_COVERAGE 0x00000400 | ||
| 186 | #define D3D_SHADER_REQUIRES_TYPED_UAV_LOAD_ADDITIONAL_FORMATS 0x00000800 | ||
| 187 | #define D3D_SHADER_REQUIRES_ROVS 0x00001000 | ||
| 188 | #define D3D_SHADER_REQUIRES_VIEWPORT_AND_RT_ARRAY_INDEX_FROM_ANY_SHADER_FEEDING_RASTERIZER 0x00002000 | ||
| 189 | #define D3D_SHADER_REQUIRES_WAVE_OPS 0x00004000 | ||
| 190 | #define D3D_SHADER_REQUIRES_INT64_OPS 0x00008000 | ||
| 191 | #define D3D_SHADER_REQUIRES_VIEW_ID 0x00010000 | ||
| 192 | #define D3D_SHADER_REQUIRES_BARYCENTRICS 0x00020000 | ||
| 193 | #define D3D_SHADER_REQUIRES_NATIVE_16BIT_OPS 0x00040000 | ||
| 194 | #define D3D_SHADER_REQUIRES_SHADING_RATE 0x00080000 | ||
| 195 | #define D3D_SHADER_REQUIRES_RAYTRACING_TIER_1_1 0x00100000 | ||
| 196 | #define D3D_SHADER_REQUIRES_SAMPLER_FEEDBACK 0x00200000 | ||
| 197 | #define D3D_SHADER_REQUIRES_ATOMIC_INT64_ON_TYPED_RESOURCE 0x00400000 | ||
| 198 | #define D3D_SHADER_REQUIRES_ATOMIC_INT64_ON_GROUP_SHARED 0x00800000 | ||
| 199 | #define D3D_SHADER_REQUIRES_DERIVATIVES_IN_MESH_AND_AMPLIFICATION_SHADERS 0x01000000 | ||
| 200 | #define D3D_SHADER_REQUIRES_RESOURCE_DESCRIPTOR_HEAP_INDEXING 0x02000000 | ||
| 201 | #define D3D_SHADER_REQUIRES_SAMPLER_DESCRIPTOR_HEAP_INDEXING 0x04000000 | ||
| 202 | #define D3D_SHADER_REQUIRES_WAVE_MMA 0x08000000 | ||
| 203 | #define D3D_SHADER_REQUIRES_ATOMIC_INT64_ON_DESCRIPTOR_HEAP_RESOURCE 0x10000000 | ||
| 204 | |||
| 205 | typedef struct _D3D12_LIBRARY_DESC | ||
| 206 | { | ||
| 207 | LPCSTR Creator; // The name of the originator of the library. | ||
| 208 | UINT Flags; // Compilation flags. | ||
| 209 | UINT FunctionCount; // Number of functions exported from the library. | ||
| 210 | } D3D12_LIBRARY_DESC; | ||
| 211 | |||
| 212 | typedef struct _D3D12_FUNCTION_DESC | ||
| 213 | { | ||
| 214 | UINT Version; // Shader version | ||
| 215 | LPCSTR Creator; // Creator string | ||
| 216 | UINT Flags; // Shader compilation/parse flags | ||
| 217 | |||
| 218 | UINT ConstantBuffers; // Number of constant buffers | ||
| 219 | UINT BoundResources; // Number of bound resources | ||
| 220 | |||
| 221 | UINT InstructionCount; // Number of emitted instructions | ||
| 222 | UINT TempRegisterCount; // Number of temporary registers used | ||
| 223 | UINT TempArrayCount; // Number of temporary arrays used | ||
| 224 | UINT DefCount; // Number of constant defines | ||
| 225 | UINT DclCount; // Number of declarations (input + output) | ||
| 226 | UINT TextureNormalInstructions; // Number of non-categorized texture instructions | ||
| 227 | UINT TextureLoadInstructions; // Number of texture load instructions | ||
| 228 | UINT TextureCompInstructions; // Number of texture comparison instructions | ||
| 229 | UINT TextureBiasInstructions; // Number of texture bias instructions | ||
| 230 | UINT TextureGradientInstructions; // Number of texture gradient instructions | ||
| 231 | UINT FloatInstructionCount; // Number of floating point arithmetic instructions used | ||
| 232 | UINT IntInstructionCount; // Number of signed integer arithmetic instructions used | ||
| 233 | UINT UintInstructionCount; // Number of unsigned integer arithmetic instructions used | ||
| 234 | UINT StaticFlowControlCount; // Number of static flow control instructions used | ||
| 235 | UINT DynamicFlowControlCount; // Number of dynamic flow control instructions used | ||
| 236 | UINT MacroInstructionCount; // Number of macro instructions used | ||
| 237 | UINT ArrayInstructionCount; // Number of array instructions used | ||
| 238 | UINT MovInstructionCount; // Number of mov instructions used | ||
| 239 | UINT MovcInstructionCount; // Number of movc instructions used | ||
| 240 | UINT ConversionInstructionCount; // Number of type conversion instructions used | ||
| 241 | UINT BitwiseInstructionCount; // Number of bitwise arithmetic instructions used | ||
| 242 | D3D_FEATURE_LEVEL MinFeatureLevel; // Min target of the function byte code | ||
| 243 | UINT64 RequiredFeatureFlags; // Required feature flags | ||
| 244 | |||
| 245 | LPCSTR Name; // Function name | ||
| 246 | INT FunctionParameterCount; // Number of logical parameters in the function signature (not including return) | ||
| 247 | BOOL HasReturn; // TRUE, if function returns a value, false - it is a subroutine | ||
| 248 | BOOL Has10Level9VertexShader; // TRUE, if there is a 10L9 VS blob | ||
| 249 | BOOL Has10Level9PixelShader; // TRUE, if there is a 10L9 PS blob | ||
| 250 | } D3D12_FUNCTION_DESC; | ||
| 251 | |||
| 252 | typedef struct _D3D12_PARAMETER_DESC | ||
| 253 | { | ||
| 254 | LPCSTR Name; // Parameter name. | ||
| 255 | LPCSTR SemanticName; // Parameter semantic name (+index). | ||
| 256 | D3D_SHADER_VARIABLE_TYPE Type; // Element type. | ||
| 257 | D3D_SHADER_VARIABLE_CLASS Class; // Scalar/Vector/Matrix. | ||
| 258 | UINT Rows; // Rows are for matrix parameters. | ||
| 259 | UINT Columns; // Components or Columns in matrix. | ||
| 260 | D3D_INTERPOLATION_MODE InterpolationMode; // Interpolation mode. | ||
| 261 | D3D_PARAMETER_FLAGS Flags; // Parameter modifiers. | ||
| 262 | |||
| 263 | UINT FirstInRegister; // The first input register for this parameter. | ||
| 264 | UINT FirstInComponent; // The first input register component for this parameter. | ||
| 265 | UINT FirstOutRegister; // The first output register for this parameter. | ||
| 266 | UINT FirstOutComponent; // The first output register component for this parameter. | ||
| 267 | } D3D12_PARAMETER_DESC; | ||
| 268 | |||
| 269 | |||
| 270 | ////////////////////////////////////////////////////////////////////////////// | ||
| 271 | // Interfaces //////////////////////////////////////////////////////////////// | ||
| 272 | ////////////////////////////////////////////////////////////////////////////// | ||
| 273 | |||
| 274 | typedef interface ID3D12ShaderReflectionType ID3D12ShaderReflectionType; | ||
| 275 | typedef interface ID3D12ShaderReflectionType *LPD3D12SHADERREFLECTIONTYPE; | ||
| 276 | |||
| 277 | typedef interface ID3D12ShaderReflectionVariable ID3D12ShaderReflectionVariable; | ||
| 278 | typedef interface ID3D12ShaderReflectionVariable *LPD3D12SHADERREFLECTIONVARIABLE; | ||
| 279 | |||
| 280 | typedef interface ID3D12ShaderReflectionConstantBuffer ID3D12ShaderReflectionConstantBuffer; | ||
| 281 | typedef interface ID3D12ShaderReflectionConstantBuffer *LPD3D12SHADERREFLECTIONCONSTANTBUFFER; | ||
| 282 | |||
| 283 | typedef interface ID3D12ShaderReflection ID3D12ShaderReflection; | ||
| 284 | typedef interface ID3D12ShaderReflection *LPD3D12SHADERREFLECTION; | ||
| 285 | |||
| 286 | typedef interface ID3D12LibraryReflection ID3D12LibraryReflection; | ||
| 287 | typedef interface ID3D12LibraryReflection *LPD3D12LIBRARYREFLECTION; | ||
| 288 | |||
| 289 | typedef interface ID3D12FunctionReflection ID3D12FunctionReflection; | ||
| 290 | typedef interface ID3D12FunctionReflection *LPD3D12FUNCTIONREFLECTION; | ||
| 291 | |||
| 292 | typedef interface ID3D12FunctionParameterReflection ID3D12FunctionParameterReflection; | ||
| 293 | typedef interface ID3D12FunctionParameterReflection *LPD3D12FUNCTIONPARAMETERREFLECTION; | ||
| 294 | |||
| 295 | |||
| 296 | // {E913C351-783D-48CA-A1D1-4F306284AD56} | ||
| 297 | interface DECLSPEC_UUID("E913C351-783D-48CA-A1D1-4F306284AD56") ID3D12ShaderReflectionType; | ||
| 298 | DEFINE_GUID(IID_ID3D12ShaderReflectionType, | ||
| 299 | 0xe913c351, 0x783d, 0x48ca, 0xa1, 0xd1, 0x4f, 0x30, 0x62, 0x84, 0xad, 0x56); | ||
| 300 | |||
| 301 | #undef INTERFACE | ||
| 302 | #define INTERFACE ID3D12ShaderReflectionType | ||
| 303 | |||
| 304 | DECLARE_INTERFACE(ID3D12ShaderReflectionType) | ||
| 305 | { | ||
| 306 | STDMETHOD(GetDesc)(THIS_ _Out_ D3D12_SHADER_TYPE_DESC *pDesc) PURE; | ||
| 307 | |||
| 308 | STDMETHOD_(ID3D12ShaderReflectionType*, GetMemberTypeByIndex)(THIS_ _In_ UINT Index) PURE; | ||
| 309 | STDMETHOD_(ID3D12ShaderReflectionType*, GetMemberTypeByName)(THIS_ _In_ LPCSTR Name) PURE; | ||
| 310 | STDMETHOD_(LPCSTR, GetMemberTypeName)(THIS_ _In_ UINT Index) PURE; | ||
| 311 | |||
| 312 | STDMETHOD(IsEqual)(THIS_ _In_ ID3D12ShaderReflectionType* pType) PURE; | ||
| 313 | STDMETHOD_(ID3D12ShaderReflectionType*, GetSubType)(THIS) PURE; | ||
| 314 | STDMETHOD_(ID3D12ShaderReflectionType*, GetBaseClass)(THIS) PURE; | ||
| 315 | STDMETHOD_(UINT, GetNumInterfaces)(THIS) PURE; | ||
| 316 | STDMETHOD_(ID3D12ShaderReflectionType*, GetInterfaceByIndex)(THIS_ _In_ UINT uIndex) PURE; | ||
| 317 | STDMETHOD(IsOfType)(THIS_ _In_ ID3D12ShaderReflectionType* pType) PURE; | ||
| 318 | STDMETHOD(ImplementsInterface)(THIS_ _In_ ID3D12ShaderReflectionType* pBase) PURE; | ||
| 319 | }; | ||
| 320 | |||
| 321 | // {8337A8A6-A216-444A-B2F4-314733A73AEA} | ||
| 322 | interface DECLSPEC_UUID("8337A8A6-A216-444A-B2F4-314733A73AEA") ID3D12ShaderReflectionVariable; | ||
| 323 | DEFINE_GUID(IID_ID3D12ShaderReflectionVariable, | ||
| 324 | 0x8337a8a6, 0xa216, 0x444a, 0xb2, 0xf4, 0x31, 0x47, 0x33, 0xa7, 0x3a, 0xea); | ||
| 325 | |||
| 326 | #undef INTERFACE | ||
| 327 | #define INTERFACE ID3D12ShaderReflectionVariable | ||
| 328 | |||
| 329 | DECLARE_INTERFACE(ID3D12ShaderReflectionVariable) | ||
| 330 | { | ||
| 331 | STDMETHOD(GetDesc)(THIS_ _Out_ D3D12_SHADER_VARIABLE_DESC *pDesc) PURE; | ||
| 332 | |||
| 333 | STDMETHOD_(ID3D12ShaderReflectionType*, GetType)(THIS) PURE; | ||
| 334 | STDMETHOD_(ID3D12ShaderReflectionConstantBuffer*, GetBuffer)(THIS) PURE; | ||
| 335 | |||
| 336 | STDMETHOD_(UINT, GetInterfaceSlot)(THIS_ _In_ UINT uArrayIndex) PURE; | ||
| 337 | }; | ||
| 338 | |||
| 339 | // {C59598B4-48B3-4869-B9B1-B1618B14A8B7} | ||
| 340 | interface DECLSPEC_UUID("C59598B4-48B3-4869-B9B1-B1618B14A8B7") ID3D12ShaderReflectionConstantBuffer; | ||
| 341 | DEFINE_GUID(IID_ID3D12ShaderReflectionConstantBuffer, | ||
| 342 | 0xc59598b4, 0x48b3, 0x4869, 0xb9, 0xb1, 0xb1, 0x61, 0x8b, 0x14, 0xa8, 0xb7); | ||
| 343 | |||
| 344 | #undef INTERFACE | ||
| 345 | #define INTERFACE ID3D12ShaderReflectionConstantBuffer | ||
| 346 | |||
| 347 | DECLARE_INTERFACE(ID3D12ShaderReflectionConstantBuffer) | ||
| 348 | { | ||
| 349 | STDMETHOD(GetDesc)(THIS_ D3D12_SHADER_BUFFER_DESC *pDesc) PURE; | ||
| 350 | |||
| 351 | STDMETHOD_(ID3D12ShaderReflectionVariable*, GetVariableByIndex)(THIS_ _In_ UINT Index) PURE; | ||
| 352 | STDMETHOD_(ID3D12ShaderReflectionVariable*, GetVariableByName)(THIS_ _In_ LPCSTR Name) PURE; | ||
| 353 | }; | ||
| 354 | |||
| 355 | // The ID3D12ShaderReflection IID may change from SDK version to SDK version | ||
| 356 | // if the reflection API changes. This prevents new code with the new API | ||
| 357 | // from working with an old binary. Recompiling with the new header | ||
| 358 | // will pick up the new IID. | ||
| 359 | |||
| 360 | // {5A58797D-A72C-478D-8BA2-EFC6B0EFE88E} | ||
| 361 | interface DECLSPEC_UUID("5A58797D-A72C-478D-8BA2-EFC6B0EFE88E") ID3D12ShaderReflection; | ||
| 362 | DEFINE_GUID(IID_ID3D12ShaderReflection, | ||
| 363 | 0x5a58797d, 0xa72c, 0x478d, 0x8b, 0xa2, 0xef, 0xc6, 0xb0, 0xef, 0xe8, 0x8e); | ||
| 364 | |||
| 365 | #undef INTERFACE | ||
| 366 | #define INTERFACE ID3D12ShaderReflection | ||
| 367 | |||
| 368 | DECLARE_INTERFACE_(ID3D12ShaderReflection, IUnknown) | ||
| 369 | { | ||
| 370 | STDMETHOD(QueryInterface)(THIS_ _In_ REFIID iid, | ||
| 371 | _Out_ LPVOID *ppv) PURE; | ||
| 372 | STDMETHOD_(ULONG, AddRef)(THIS) PURE; | ||
| 373 | STDMETHOD_(ULONG, Release)(THIS) PURE; | ||
| 374 | |||
| 375 | STDMETHOD(GetDesc)(THIS_ _Out_ D3D12_SHADER_DESC *pDesc) PURE; | ||
| 376 | |||
| 377 | STDMETHOD_(ID3D12ShaderReflectionConstantBuffer*, GetConstantBufferByIndex)(THIS_ _In_ UINT Index) PURE; | ||
| 378 | STDMETHOD_(ID3D12ShaderReflectionConstantBuffer*, GetConstantBufferByName)(THIS_ _In_ LPCSTR Name) PURE; | ||
| 379 | |||
| 380 | STDMETHOD(GetResourceBindingDesc)(THIS_ _In_ UINT ResourceIndex, | ||
| 381 | _Out_ D3D12_SHADER_INPUT_BIND_DESC *pDesc) PURE; | ||
| 382 | |||
| 383 | STDMETHOD(GetInputParameterDesc)(THIS_ _In_ UINT ParameterIndex, | ||
| 384 | _Out_ D3D12_SIGNATURE_PARAMETER_DESC *pDesc) PURE; | ||
| 385 | STDMETHOD(GetOutputParameterDesc)(THIS_ _In_ UINT ParameterIndex, | ||
| 386 | _Out_ D3D12_SIGNATURE_PARAMETER_DESC *pDesc) PURE; | ||
| 387 | STDMETHOD(GetPatchConstantParameterDesc)(THIS_ _In_ UINT ParameterIndex, | ||
| 388 | _Out_ D3D12_SIGNATURE_PARAMETER_DESC *pDesc) PURE; | ||
| 389 | |||
| 390 | STDMETHOD_(ID3D12ShaderReflectionVariable*, GetVariableByName)(THIS_ _In_ LPCSTR Name) PURE; | ||
| 391 | |||
| 392 | STDMETHOD(GetResourceBindingDescByName)(THIS_ _In_ LPCSTR Name, | ||
| 393 | _Out_ D3D12_SHADER_INPUT_BIND_DESC *pDesc) PURE; | ||
| 394 | |||
| 395 | STDMETHOD_(UINT, GetMovInstructionCount)(THIS) PURE; | ||
| 396 | STDMETHOD_(UINT, GetMovcInstructionCount)(THIS) PURE; | ||
| 397 | STDMETHOD_(UINT, GetConversionInstructionCount)(THIS) PURE; | ||
| 398 | STDMETHOD_(UINT, GetBitwiseInstructionCount)(THIS) PURE; | ||
| 399 | |||
| 400 | STDMETHOD_(D3D_PRIMITIVE, GetGSInputPrimitive)(THIS) PURE; | ||
| 401 | STDMETHOD_(BOOL, IsSampleFrequencyShader)(THIS) PURE; | ||
| 402 | |||
| 403 | STDMETHOD_(UINT, GetNumInterfaceSlots)(THIS) PURE; | ||
| 404 | STDMETHOD(GetMinFeatureLevel)(THIS_ _Out_ enum D3D_FEATURE_LEVEL* pLevel) PURE; | ||
| 405 | |||
| 406 | STDMETHOD_(UINT, GetThreadGroupSize)(THIS_ | ||
| 407 | _Out_opt_ UINT* pSizeX, | ||
| 408 | _Out_opt_ UINT* pSizeY, | ||
| 409 | _Out_opt_ UINT* pSizeZ) PURE; | ||
| 410 | |||
| 411 | STDMETHOD_(UINT64, GetRequiresFlags)(THIS) PURE; | ||
| 412 | }; | ||
| 413 | |||
| 414 | // {8E349D19-54DB-4A56-9DC9-119D87BDB804} | ||
| 415 | interface DECLSPEC_UUID("8E349D19-54DB-4A56-9DC9-119D87BDB804") ID3D12LibraryReflection; | ||
| 416 | DEFINE_GUID(IID_ID3D12LibraryReflection, | ||
| 417 | 0x8e349d19, 0x54db, 0x4a56, 0x9d, 0xc9, 0x11, 0x9d, 0x87, 0xbd, 0xb8, 0x4); | ||
| 418 | |||
| 419 | #undef INTERFACE | ||
| 420 | #define INTERFACE ID3D12LibraryReflection | ||
| 421 | |||
| 422 | DECLARE_INTERFACE_(ID3D12LibraryReflection, IUnknown) | ||
| 423 | { | ||
| 424 | STDMETHOD(QueryInterface)(THIS_ _In_ REFIID iid, _Out_ LPVOID * ppv) PURE; | ||
| 425 | STDMETHOD_(ULONG, AddRef)(THIS) PURE; | ||
| 426 | STDMETHOD_(ULONG, Release)(THIS) PURE; | ||
| 427 | |||
| 428 | STDMETHOD(GetDesc)(THIS_ _Out_ D3D12_LIBRARY_DESC * pDesc) PURE; | ||
| 429 | |||
| 430 | STDMETHOD_(ID3D12FunctionReflection *, GetFunctionByIndex)(THIS_ _In_ INT FunctionIndex) PURE; | ||
| 431 | }; | ||
| 432 | |||
| 433 | // {1108795C-2772-4BA9-B2A8-D464DC7E2799} | ||
| 434 | interface DECLSPEC_UUID("1108795C-2772-4BA9-B2A8-D464DC7E2799") ID3D12FunctionReflection; | ||
| 435 | DEFINE_GUID(IID_ID3D12FunctionReflection, | ||
| 436 | 0x1108795c, 0x2772, 0x4ba9, 0xb2, 0xa8, 0xd4, 0x64, 0xdc, 0x7e, 0x27, 0x99); | ||
| 437 | |||
| 438 | #undef INTERFACE | ||
| 439 | #define INTERFACE ID3D12FunctionReflection | ||
| 440 | |||
| 441 | DECLARE_INTERFACE(ID3D12FunctionReflection) | ||
| 442 | { | ||
| 443 | STDMETHOD(GetDesc)(THIS_ _Out_ D3D12_FUNCTION_DESC * pDesc) PURE; | ||
| 444 | |||
| 445 | STDMETHOD_(ID3D12ShaderReflectionConstantBuffer *, GetConstantBufferByIndex)(THIS_ _In_ UINT BufferIndex) PURE; | ||
| 446 | STDMETHOD_(ID3D12ShaderReflectionConstantBuffer *, GetConstantBufferByName)(THIS_ _In_ LPCSTR Name) PURE; | ||
| 447 | |||
| 448 | STDMETHOD(GetResourceBindingDesc)(THIS_ _In_ UINT ResourceIndex, | ||
| 449 | _Out_ D3D12_SHADER_INPUT_BIND_DESC * pDesc) PURE; | ||
| 450 | |||
| 451 | STDMETHOD_(ID3D12ShaderReflectionVariable *, GetVariableByName)(THIS_ _In_ LPCSTR Name) PURE; | ||
| 452 | |||
| 453 | STDMETHOD(GetResourceBindingDescByName)(THIS_ _In_ LPCSTR Name, | ||
| 454 | _Out_ D3D12_SHADER_INPUT_BIND_DESC * pDesc) PURE; | ||
| 455 | |||
| 456 | // Use D3D_RETURN_PARAMETER_INDEX to get description of the return value. | ||
| 457 | STDMETHOD_(ID3D12FunctionParameterReflection *, GetFunctionParameter)(THIS_ _In_ INT ParameterIndex) PURE; | ||
| 458 | }; | ||
| 459 | |||
| 460 | // {EC25F42D-7006-4F2B-B33E-02CC3375733F} | ||
| 461 | interface DECLSPEC_UUID("EC25F42D-7006-4F2B-B33E-02CC3375733F") ID3D12FunctionParameterReflection; | ||
| 462 | DEFINE_GUID(IID_ID3D12FunctionParameterReflection, | ||
| 463 | 0xec25f42d, 0x7006, 0x4f2b, 0xb3, 0x3e, 0x2, 0xcc, 0x33, 0x75, 0x73, 0x3f); | ||
| 464 | |||
| 465 | #undef INTERFACE | ||
| 466 | #define INTERFACE ID3D12FunctionParameterReflection | ||
| 467 | |||
| 468 | DECLARE_INTERFACE(ID3D12FunctionParameterReflection) | ||
| 469 | { | ||
| 470 | STDMETHOD(GetDesc)(THIS_ _Out_ D3D12_PARAMETER_DESC * pDesc) PURE; | ||
| 471 | }; | ||
| 472 | |||
| 473 | |||
| 474 | ////////////////////////////////////////////////////////////////////////////// | ||
| 475 | // APIs ////////////////////////////////////////////////////////////////////// | ||
| 476 | ////////////////////////////////////////////////////////////////////////////// | ||
| 477 | |||
| 478 | #ifdef __cplusplus | ||
| 479 | extern "C" { | ||
| 480 | #endif //__cplusplus | ||
| 481 | |||
| 482 | #ifdef __cplusplus | ||
| 483 | } | ||
| 484 | #endif //__cplusplus | ||
| 485 | |||
| 486 | #endif //__D3D12SHADER_H__ | ||
| 487 | |||
diff --git a/contrib/dxc_2025_07_14/inc/dxcapi.h b/contrib/dxc_2025_07_14/inc/dxcapi.h new file mode 100644 index 0000000..95cc56a --- /dev/null +++ b/contrib/dxc_2025_07_14/inc/dxcapi.h | |||
| @@ -0,0 +1,1309 @@ | |||
| 1 | |||
| 2 | /////////////////////////////////////////////////////////////////////////////// | ||
| 3 | // // | ||
| 4 | // dxcapi.h // | ||
| 5 | // Copyright (C) Microsoft Corporation. All rights reserved. // | ||
| 6 | // This file is distributed under the University of Illinois Open Source // | ||
| 7 | // License. See LICENSE.TXT for details. // | ||
| 8 | // // | ||
| 9 | // Provides declarations for the DirectX Compiler API entry point. // | ||
| 10 | // // | ||
| 11 | /////////////////////////////////////////////////////////////////////////////// | ||
| 12 | |||
| 13 | #ifndef __DXC_API__ | ||
| 14 | #define __DXC_API__ | ||
| 15 | |||
| 16 | #ifdef _WIN32 | ||
| 17 | #ifndef DXC_API_IMPORT | ||
| 18 | #define DXC_API_IMPORT __declspec(dllimport) | ||
| 19 | #endif | ||
| 20 | #else | ||
| 21 | #ifndef DXC_API_IMPORT | ||
| 22 | #define DXC_API_IMPORT __attribute__((visibility("default"))) | ||
| 23 | #endif | ||
| 24 | #endif | ||
| 25 | |||
| 26 | #ifdef _WIN32 | ||
| 27 | |||
| 28 | #ifndef CROSS_PLATFORM_UUIDOF | ||
| 29 | // Warning: This macro exists in WinAdapter.h as well | ||
| 30 | #define CROSS_PLATFORM_UUIDOF(interface, spec) \ | ||
| 31 | struct __declspec(uuid(spec)) interface; | ||
| 32 | #endif | ||
| 33 | |||
| 34 | #else | ||
| 35 | |||
| 36 | #include "WinAdapter.h" | ||
| 37 | #include <dlfcn.h> | ||
| 38 | #endif | ||
| 39 | |||
| 40 | struct IMalloc; | ||
| 41 | |||
| 42 | struct IDxcIncludeHandler; | ||
| 43 | |||
| 44 | /// \brief Typedef for DxcCreateInstance function pointer. | ||
| 45 | /// | ||
| 46 | /// This can be used with GetProcAddress to get the DxcCreateInstance function. | ||
| 47 | typedef HRESULT(__stdcall *DxcCreateInstanceProc)(_In_ REFCLSID rclsid, | ||
| 48 | _In_ REFIID riid, | ||
| 49 | _Out_ LPVOID *ppv); | ||
| 50 | |||
| 51 | /// \brief Typedef for DxcCreateInstance2 function pointer. | ||
| 52 | /// | ||
| 53 | /// This can be used with GetProcAddress to get the DxcCreateInstance2 function. | ||
| 54 | typedef HRESULT(__stdcall *DxcCreateInstance2Proc)(_In_ IMalloc *pMalloc, | ||
| 55 | _In_ REFCLSID rclsid, | ||
| 56 | _In_ REFIID riid, | ||
| 57 | _Out_ LPVOID *ppv); | ||
| 58 | |||
| 59 | /// \brief Creates a single uninitialized object of the class associated with a | ||
| 60 | /// specified CLSID. | ||
| 61 | /// | ||
| 62 | /// \param rclsid The CLSID associated with the data and code that will be used | ||
| 63 | /// to create the object. | ||
| 64 | /// | ||
| 65 | /// \param riid A reference to the identifier of the interface to be used to | ||
| 66 | /// communicate with the object. | ||
| 67 | /// | ||
| 68 | /// \param ppv Address of pointer variable that receives the interface pointer | ||
| 69 | /// requested in riid. Upon successful return, *ppv contains the requested | ||
| 70 | /// interface pointer. Upon failure, *ppv contains NULL. | ||
| 71 | /// | ||
| 72 | /// While this function is similar to CoCreateInstance, there is no COM | ||
| 73 | /// involvement. | ||
| 74 | extern "C" DXC_API_IMPORT | ||
| 75 | HRESULT __stdcall DxcCreateInstance(_In_ REFCLSID rclsid, _In_ REFIID riid, | ||
| 76 | _Out_ LPVOID *ppv); | ||
| 77 | |||
| 78 | /// \brief Version of DxcCreateInstance that takes an IMalloc interface. | ||
| 79 | /// | ||
| 80 | /// This can be used to create an instance of the compiler with a custom memory | ||
| 81 | /// allocator. | ||
| 82 | extern "C" DXC_API_IMPORT | ||
| 83 | HRESULT __stdcall DxcCreateInstance2(_In_ IMalloc *pMalloc, | ||
| 84 | _In_ REFCLSID rclsid, _In_ REFIID riid, | ||
| 85 | _Out_ LPVOID *ppv); | ||
| 86 | |||
| 87 | // For convenience, equivalent definitions to CP_UTF8 and CP_UTF16. | ||
| 88 | #define DXC_CP_UTF8 65001 | ||
| 89 | #define DXC_CP_UTF16 1200 | ||
| 90 | #define DXC_CP_UTF32 12000 | ||
| 91 | // Use DXC_CP_ACP for: Binary; ANSI Text; Autodetect UTF with BOM | ||
| 92 | #define DXC_CP_ACP 0 | ||
| 93 | |||
| 94 | /// Codepage for "wide" characters - UTF16 on Windows, UTF32 on other platforms. | ||
| 95 | #ifdef _WIN32 | ||
| 96 | #define DXC_CP_WIDE DXC_CP_UTF16 | ||
| 97 | #else | ||
| 98 | #define DXC_CP_WIDE DXC_CP_UTF32 | ||
| 99 | #endif | ||
| 100 | |||
| 101 | /// Indicates that the shader hash was computed taking into account source | ||
| 102 | /// information (-Zss). | ||
| 103 | #define DXC_HASHFLAG_INCLUDES_SOURCE 1 | ||
| 104 | |||
| 105 | /// Hash digest type for ShaderHash. | ||
| 106 | typedef struct DxcShaderHash { | ||
| 107 | UINT32 Flags; ///< DXC_HASHFLAG_* | ||
| 108 | BYTE HashDigest[16]; ///< The hash digest | ||
| 109 | } DxcShaderHash; | ||
| 110 | |||
| 111 | #define DXC_FOURCC(ch0, ch1, ch2, ch3) \ | ||
| 112 | ((UINT32)(UINT8)(ch0) | (UINT32)(UINT8)(ch1) << 8 | \ | ||
| 113 | (UINT32)(UINT8)(ch2) << 16 | (UINT32)(UINT8)(ch3) << 24) | ||
| 114 | #define DXC_PART_PDB DXC_FOURCC('I', 'L', 'D', 'B') | ||
| 115 | #define DXC_PART_PDB_NAME DXC_FOURCC('I', 'L', 'D', 'N') | ||
| 116 | #define DXC_PART_PRIVATE_DATA DXC_FOURCC('P', 'R', 'I', 'V') | ||
| 117 | #define DXC_PART_ROOT_SIGNATURE DXC_FOURCC('R', 'T', 'S', '0') | ||
| 118 | #define DXC_PART_DXIL DXC_FOURCC('D', 'X', 'I', 'L') | ||
| 119 | #define DXC_PART_REFLECTION_DATA DXC_FOURCC('S', 'T', 'A', 'T') | ||
| 120 | #define DXC_PART_SHADER_HASH DXC_FOURCC('H', 'A', 'S', 'H') | ||
| 121 | #define DXC_PART_INPUT_SIGNATURE DXC_FOURCC('I', 'S', 'G', '1') | ||
| 122 | #define DXC_PART_OUTPUT_SIGNATURE DXC_FOURCC('O', 'S', 'G', '1') | ||
| 123 | #define DXC_PART_PATCH_CONSTANT_SIGNATURE DXC_FOURCC('P', 'S', 'G', '1') | ||
| 124 | |||
| 125 | // Some option arguments are defined here for continuity with D3DCompile | ||
| 126 | // interface. | ||
| 127 | #define DXC_ARG_DEBUG L"-Zi" | ||
| 128 | #define DXC_ARG_SKIP_VALIDATION L"-Vd" | ||
| 129 | #define DXC_ARG_SKIP_OPTIMIZATIONS L"-Od" | ||
| 130 | #define DXC_ARG_PACK_MATRIX_ROW_MAJOR L"-Zpr" | ||
| 131 | #define DXC_ARG_PACK_MATRIX_COLUMN_MAJOR L"-Zpc" | ||
| 132 | #define DXC_ARG_AVOID_FLOW_CONTROL L"-Gfa" | ||
| 133 | #define DXC_ARG_PREFER_FLOW_CONTROL L"-Gfp" | ||
| 134 | #define DXC_ARG_ENABLE_STRICTNESS L"-Ges" | ||
| 135 | #define DXC_ARG_ENABLE_BACKWARDS_COMPATIBILITY L"-Gec" | ||
| 136 | #define DXC_ARG_IEEE_STRICTNESS L"-Gis" | ||
| 137 | #define DXC_ARG_OPTIMIZATION_LEVEL0 L"-O0" | ||
| 138 | #define DXC_ARG_OPTIMIZATION_LEVEL1 L"-O1" | ||
| 139 | #define DXC_ARG_OPTIMIZATION_LEVEL2 L"-O2" | ||
| 140 | #define DXC_ARG_OPTIMIZATION_LEVEL3 L"-O3" | ||
| 141 | #define DXC_ARG_WARNINGS_ARE_ERRORS L"-WX" | ||
| 142 | #define DXC_ARG_RESOURCES_MAY_ALIAS L"-res_may_alias" | ||
| 143 | #define DXC_ARG_ALL_RESOURCES_BOUND L"-all_resources_bound" | ||
| 144 | #define DXC_ARG_DEBUG_NAME_FOR_SOURCE L"-Zss" | ||
| 145 | #define DXC_ARG_DEBUG_NAME_FOR_BINARY L"-Zsb" | ||
| 146 | |||
| 147 | CROSS_PLATFORM_UUIDOF(IDxcBlob, "8BA5FB08-5195-40e2-AC58-0D989C3A0102") | ||
| 148 | /// \brief A sized buffer that can be passed in and out of DXC APIs. | ||
| 149 | /// | ||
| 150 | /// This is an alias of ID3D10Blob and ID3DBlob. | ||
| 151 | struct IDxcBlob : public IUnknown { | ||
| 152 | public: | ||
| 153 | /// \brief Retrieves a pointer to the blob's data. | ||
| 154 | virtual LPVOID STDMETHODCALLTYPE GetBufferPointer(void) = 0; | ||
| 155 | |||
| 156 | /// \brief Retrieves the size, in bytes, of the blob's data. | ||
| 157 | virtual SIZE_T STDMETHODCALLTYPE GetBufferSize(void) = 0; | ||
| 158 | }; | ||
| 159 | |||
| 160 | CROSS_PLATFORM_UUIDOF(IDxcBlobEncoding, "7241d424-2646-4191-97c0-98e96e42fc68") | ||
| 161 | /// \brief A blob that might have a known encoding. | ||
| 162 | struct IDxcBlobEncoding : public IDxcBlob { | ||
| 163 | public: | ||
| 164 | /// \brief Retrieve the encoding for this blob. | ||
| 165 | /// | ||
| 166 | /// \param pKnown Pointer to a variable that will be set to TRUE if the | ||
| 167 | /// encoding is known. | ||
| 168 | /// | ||
| 169 | /// \param pCodePage Pointer to variable that will be set to the encoding used | ||
| 170 | /// for this blog. | ||
| 171 | /// | ||
| 172 | /// If the encoding is not known then pCodePage will be set to CP_ACP. | ||
| 173 | virtual HRESULT STDMETHODCALLTYPE GetEncoding(_Out_ BOOL *pKnown, | ||
| 174 | _Out_ UINT32 *pCodePage) = 0; | ||
| 175 | }; | ||
| 176 | |||
| 177 | CROSS_PLATFORM_UUIDOF(IDxcBlobWide, "A3F84EAB-0FAA-497E-A39C-EE6ED60B2D84") | ||
| 178 | /// \brief A blob containing a null-terminated wide string. | ||
| 179 | /// | ||
| 180 | /// This uses the native wide character encoding (utf16 on Windows, utf32 on | ||
| 181 | /// Linux). | ||
| 182 | /// | ||
| 183 | /// The value returned by GetBufferSize() is the size of the buffer, in bytes, | ||
| 184 | /// including the null-terminator. | ||
| 185 | /// | ||
| 186 | /// This interface is used to return output name strings DXC. Other string | ||
| 187 | /// output blobs, such as errors/warnings, preprocessed HLSL, or other text are | ||
| 188 | /// returned using encodings based on the -encoding option passed to the | ||
| 189 | /// compiler. | ||
| 190 | struct IDxcBlobWide : public IDxcBlobEncoding { | ||
| 191 | public: | ||
| 192 | /// \brief Retrieves a pointer to the string stored in this blob. | ||
| 193 | virtual LPCWSTR STDMETHODCALLTYPE GetStringPointer(void) = 0; | ||
| 194 | |||
| 195 | /// \brief Retrieves the length of the string stored in this blob, in | ||
| 196 | /// characters, excluding the null-terminator. | ||
| 197 | virtual SIZE_T STDMETHODCALLTYPE GetStringLength(void) = 0; | ||
| 198 | }; | ||
| 199 | |||
| 200 | CROSS_PLATFORM_UUIDOF(IDxcBlobUtf8, "3DA636C9-BA71-4024-A301-30CBF125305B") | ||
| 201 | /// \brief A blob containing a UTF-8 encoded string. | ||
| 202 | /// | ||
| 203 | /// The value returned by GetBufferSize() is the size of the buffer, in bytes, | ||
| 204 | /// including the null-terminator. | ||
| 205 | /// | ||
| 206 | /// Depending on the -encoding option passed to the compiler, this interface is | ||
| 207 | /// used to return string output blobs, such as errors/warnings, preprocessed | ||
| 208 | /// HLSL, or other text. Output name strings always use IDxcBlobWide. | ||
| 209 | struct IDxcBlobUtf8 : public IDxcBlobEncoding { | ||
| 210 | public: | ||
| 211 | /// \brief Retrieves a pointer to the string stored in this blob. | ||
| 212 | virtual LPCSTR STDMETHODCALLTYPE GetStringPointer(void) = 0; | ||
| 213 | |||
| 214 | /// \brief Retrieves the length of the string stored in this blob, in | ||
| 215 | /// characters, excluding the null-terminator. | ||
| 216 | virtual SIZE_T STDMETHODCALLTYPE GetStringLength(void) = 0; | ||
| 217 | }; | ||
| 218 | |||
| 219 | #ifdef _WIN32 | ||
| 220 | /// IDxcBlobUtf16 is a legacy alias for IDxcBlobWide on Win32. | ||
| 221 | typedef IDxcBlobWide IDxcBlobUtf16; | ||
| 222 | #endif | ||
| 223 | |||
| 224 | CROSS_PLATFORM_UUIDOF(IDxcIncludeHandler, | ||
| 225 | "7f61fc7d-950d-467f-b3e3-3c02fb49187c") | ||
| 226 | /// \brief Interface for handling include directives. | ||
| 227 | /// | ||
| 228 | /// This interface can be implemented to customize handling of include | ||
| 229 | /// directives. | ||
| 230 | /// | ||
| 231 | /// Use IDxcUtils::CreateDefaultIncludeHandler to create a default | ||
| 232 | /// implementation that reads include files from the filesystem. | ||
| 233 | /// | ||
| 234 | struct IDxcIncludeHandler : public IUnknown { | ||
| 235 | /// \brief Load a source file to be included by the compiler. | ||
| 236 | /// | ||
| 237 | /// \param pFilename Candidate filename. | ||
| 238 | /// | ||
| 239 | /// \param ppIncludeSource Resultant source object for included file, nullptr | ||
| 240 | /// if not found. | ||
| 241 | virtual HRESULT STDMETHODCALLTYPE | ||
| 242 | LoadSource(_In_z_ LPCWSTR pFilename, | ||
| 243 | _COM_Outptr_result_maybenull_ IDxcBlob **ppIncludeSource) = 0; | ||
| 244 | }; | ||
| 245 | |||
| 246 | /// \brief Structure for supplying bytes or text input to Dxc APIs. | ||
| 247 | typedef struct DxcBuffer { | ||
| 248 | /// \brief Pointer to the start of the buffer. | ||
| 249 | LPCVOID Ptr; | ||
| 250 | |||
| 251 | /// \brief Size of the buffer in bytes. | ||
| 252 | SIZE_T Size; | ||
| 253 | |||
| 254 | /// \brief Encoding of the buffer. | ||
| 255 | /// | ||
| 256 | /// Use Encoding = 0 for non-text bytes, ANSI text, or unknown with BOM. | ||
| 257 | UINT Encoding; | ||
| 258 | } DxcText; | ||
| 259 | |||
| 260 | /// \brief Structure for supplying defines to Dxc APIs. | ||
| 261 | struct DxcDefine { | ||
| 262 | LPCWSTR Name; ///< The define name. | ||
| 263 | _Maybenull_ LPCWSTR Value; ///< Optional value for the define. | ||
| 264 | }; | ||
| 265 | |||
| 266 | CROSS_PLATFORM_UUIDOF(IDxcCompilerArgs, "73EFFE2A-70DC-45F8-9690-EFF64C02429D") | ||
| 267 | /// \brief Interface for managing arguments passed to DXC. | ||
| 268 | /// | ||
| 269 | /// Use IDxcUtils::BuildArguments to create an instance of this interface. | ||
| 270 | struct IDxcCompilerArgs : public IUnknown { | ||
| 271 | /// \brief Retrieve the array of arguments. | ||
| 272 | /// | ||
| 273 | /// This can be passed directly to the pArguments parameter of the Compile() | ||
| 274 | /// method. | ||
| 275 | virtual LPCWSTR *STDMETHODCALLTYPE GetArguments() = 0; | ||
| 276 | |||
| 277 | /// \brief Retrieve the number of arguments. | ||
| 278 | /// | ||
| 279 | /// This can be passed directly to the argCount parameter of the Compile() | ||
| 280 | /// method. | ||
| 281 | virtual UINT32 STDMETHODCALLTYPE GetCount() = 0; | ||
| 282 | |||
| 283 | /// \brief Add additional arguments to this list of compiler arguments. | ||
| 284 | virtual HRESULT STDMETHODCALLTYPE AddArguments( | ||
| 285 | _In_opt_count_(argCount) | ||
| 286 | LPCWSTR *pArguments, ///< Array of pointers to arguments to add. | ||
| 287 | _In_ UINT32 argCount ///< Number of arguments to add. | ||
| 288 | ) = 0; | ||
| 289 | |||
| 290 | /// \brief Add additional UTF-8 encoded arguments to this list of compiler | ||
| 291 | /// arguments. | ||
| 292 | virtual HRESULT STDMETHODCALLTYPE AddArgumentsUTF8( | ||
| 293 | _In_opt_count_(argCount) | ||
| 294 | LPCSTR *pArguments, ///< Array of pointers to UTF-8 arguments to add. | ||
| 295 | _In_ UINT32 argCount ///< Number of arguments to add. | ||
| 296 | ) = 0; | ||
| 297 | |||
| 298 | /// \brief Add additional defines to this list of compiler arguments. | ||
| 299 | virtual HRESULT STDMETHODCALLTYPE AddDefines( | ||
| 300 | _In_count_(defineCount) const DxcDefine *pDefines, ///< Array of defines. | ||
| 301 | _In_ UINT32 defineCount ///< Number of defines. | ||
| 302 | ) = 0; | ||
| 303 | }; | ||
| 304 | |||
| 305 | ////////////////////////// | ||
| 306 | // Legacy Interfaces | ||
| 307 | ///////////////////////// | ||
| 308 | |||
| 309 | CROSS_PLATFORM_UUIDOF(IDxcLibrary, "e5204dc7-d18c-4c3c-bdfb-851673980fe7") | ||
| 310 | /// \deprecated IDxcUtils replaces IDxcLibrary; please use IDxcUtils insted. | ||
| 311 | struct IDxcLibrary : public IUnknown { | ||
| 312 | /// \deprecated | ||
| 313 | virtual HRESULT STDMETHODCALLTYPE SetMalloc(_In_opt_ IMalloc *pMalloc) = 0; | ||
| 314 | |||
| 315 | /// \deprecated | ||
| 316 | virtual HRESULT STDMETHODCALLTYPE | ||
| 317 | CreateBlobFromBlob(_In_ IDxcBlob *pBlob, UINT32 offset, UINT32 length, | ||
| 318 | _COM_Outptr_ IDxcBlob **ppResult) = 0; | ||
| 319 | |||
| 320 | /// \deprecated | ||
| 321 | virtual HRESULT STDMETHODCALLTYPE | ||
| 322 | CreateBlobFromFile(_In_z_ LPCWSTR pFileName, _In_opt_ UINT32 *codePage, | ||
| 323 | _COM_Outptr_ IDxcBlobEncoding **pBlobEncoding) = 0; | ||
| 324 | |||
| 325 | /// \deprecated | ||
| 326 | virtual HRESULT STDMETHODCALLTYPE CreateBlobWithEncodingFromPinned( | ||
| 327 | _In_bytecount_(size) LPCVOID pText, UINT32 size, UINT32 codePage, | ||
| 328 | _COM_Outptr_ IDxcBlobEncoding **pBlobEncoding) = 0; | ||
| 329 | |||
| 330 | /// \deprecated | ||
| 331 | virtual HRESULT STDMETHODCALLTYPE CreateBlobWithEncodingOnHeapCopy( | ||
| 332 | _In_bytecount_(size) LPCVOID pText, UINT32 size, UINT32 codePage, | ||
| 333 | _COM_Outptr_ IDxcBlobEncoding **pBlobEncoding) = 0; | ||
| 334 | |||
| 335 | /// \deprecated | ||
| 336 | virtual HRESULT STDMETHODCALLTYPE CreateBlobWithEncodingOnMalloc( | ||
| 337 | _In_bytecount_(size) LPCVOID pText, IMalloc *pIMalloc, UINT32 size, | ||
| 338 | UINT32 codePage, _COM_Outptr_ IDxcBlobEncoding **pBlobEncoding) = 0; | ||
| 339 | |||
| 340 | /// \deprecated | ||
| 341 | virtual HRESULT STDMETHODCALLTYPE | ||
| 342 | CreateIncludeHandler(_COM_Outptr_ IDxcIncludeHandler **ppResult) = 0; | ||
| 343 | |||
| 344 | /// \deprecated | ||
| 345 | virtual HRESULT STDMETHODCALLTYPE CreateStreamFromBlobReadOnly( | ||
| 346 | _In_ IDxcBlob *pBlob, _COM_Outptr_ IStream **ppStream) = 0; | ||
| 347 | |||
| 348 | /// \deprecated | ||
| 349 | virtual HRESULT STDMETHODCALLTYPE GetBlobAsUtf8( | ||
| 350 | _In_ IDxcBlob *pBlob, _COM_Outptr_ IDxcBlobEncoding **pBlobEncoding) = 0; | ||
| 351 | |||
| 352 | // Renamed from GetBlobAsUtf16 to GetBlobAsWide | ||
| 353 | /// \deprecated | ||
| 354 | virtual HRESULT STDMETHODCALLTYPE GetBlobAsWide( | ||
| 355 | _In_ IDxcBlob *pBlob, _COM_Outptr_ IDxcBlobEncoding **pBlobEncoding) = 0; | ||
| 356 | |||
| 357 | #ifdef _WIN32 | ||
| 358 | // Alias to GetBlobAsWide on Win32 | ||
| 359 | /// \deprecated | ||
| 360 | inline HRESULT GetBlobAsUtf16(_In_ IDxcBlob *pBlob, | ||
| 361 | _COM_Outptr_ IDxcBlobEncoding **pBlobEncoding) { | ||
| 362 | return this->GetBlobAsWide(pBlob, pBlobEncoding); | ||
| 363 | } | ||
| 364 | #endif | ||
| 365 | }; | ||
| 366 | |||
| 367 | CROSS_PLATFORM_UUIDOF(IDxcOperationResult, | ||
| 368 | "CEDB484A-D4E9-445A-B991-CA21CA157DC2") | ||
| 369 | /// \brief The results of a DXC operation. | ||
| 370 | /// | ||
| 371 | /// Note: IDxcResult replaces IDxcOperationResult and should be used wherever | ||
| 372 | /// possible. | ||
| 373 | struct IDxcOperationResult : public IUnknown { | ||
| 374 | /// \brief Retrieve the overall status of the operation. | ||
| 375 | virtual HRESULT STDMETHODCALLTYPE GetStatus(_Out_ HRESULT *pStatus) = 0; | ||
| 376 | |||
| 377 | /// \brief Retrieve the primary output of the operation. | ||
| 378 | /// | ||
| 379 | /// This corresponds to: | ||
| 380 | /// * DXC_OUT_OBJECT - Compile() with shader or library target | ||
| 381 | /// * DXC_OUT_DISASSEMBLY - Disassemble() | ||
| 382 | /// * DXC_OUT_HLSL - Compile() with -P | ||
| 383 | /// * DXC_OUT_ROOT_SIGNATURE - Compile() with rootsig_* target | ||
| 384 | virtual HRESULT STDMETHODCALLTYPE | ||
| 385 | GetResult(_COM_Outptr_result_maybenull_ IDxcBlob **ppResult) = 0; | ||
| 386 | |||
| 387 | /// \brief Retrieves the error buffer from the operation, if there is one. | ||
| 388 | /// | ||
| 389 | // This corresponds to calling IDxcResult::GetOutput() with DXC_OUT_ERRORS. | ||
| 390 | virtual HRESULT STDMETHODCALLTYPE | ||
| 391 | GetErrorBuffer(_COM_Outptr_result_maybenull_ IDxcBlobEncoding **ppErrors) = 0; | ||
| 392 | }; | ||
| 393 | |||
| 394 | CROSS_PLATFORM_UUIDOF(IDxcCompiler, "8c210bf3-011f-4422-8d70-6f9acb8db617") | ||
| 395 | /// \deprecated Please use IDxcCompiler3 instead. | ||
| 396 | struct IDxcCompiler : public IUnknown { | ||
| 397 | /// \brief Compile a single entry point to the target shader model. | ||
| 398 | /// | ||
| 399 | /// \deprecated Please use IDxcCompiler3::Compile() instead. | ||
| 400 | virtual HRESULT STDMETHODCALLTYPE Compile( | ||
| 401 | _In_ IDxcBlob *pSource, // Source text to compile. | ||
| 402 | _In_opt_z_ LPCWSTR pSourceName, // Optional file name for pSource. Used in | ||
| 403 | // errors and include handlers. | ||
| 404 | _In_opt_z_ LPCWSTR pEntryPoint, // Entry point name. | ||
| 405 | _In_z_ LPCWSTR pTargetProfile, // Shader profile to compile. | ||
| 406 | _In_opt_count_(argCount) | ||
| 407 | LPCWSTR *pArguments, // Array of pointers to arguments. | ||
| 408 | _In_ UINT32 argCount, // Number of arguments. | ||
| 409 | _In_count_(defineCount) const DxcDefine *pDefines, // Array of defines. | ||
| 410 | _In_ UINT32 defineCount, // Number of defines. | ||
| 411 | _In_opt_ IDxcIncludeHandler | ||
| 412 | *pIncludeHandler, // User-provided interface to handle #include | ||
| 413 | // directives (optional). | ||
| 414 | _COM_Outptr_ IDxcOperationResult * | ||
| 415 | *ppResult // Compiler output status, buffer, and errors. | ||
| 416 | ) = 0; | ||
| 417 | |||
| 418 | /// \brief Preprocess source text. | ||
| 419 | /// | ||
| 420 | /// \deprecated Please use IDxcCompiler3::Compile() with the "-P" argument | ||
| 421 | /// instead. | ||
| 422 | virtual HRESULT STDMETHODCALLTYPE Preprocess( | ||
| 423 | _In_ IDxcBlob *pSource, // Source text to preprocess. | ||
| 424 | _In_opt_z_ LPCWSTR pSourceName, // Optional file name for pSource. Used in | ||
| 425 | // errors and include handlers. | ||
| 426 | _In_opt_count_(argCount) | ||
| 427 | LPCWSTR *pArguments, // Array of pointers to arguments. | ||
| 428 | _In_ UINT32 argCount, // Number of arguments. | ||
| 429 | _In_count_(defineCount) const DxcDefine *pDefines, // Array of defines. | ||
| 430 | _In_ UINT32 defineCount, // Number of defines. | ||
| 431 | _In_opt_ IDxcIncludeHandler | ||
| 432 | *pIncludeHandler, // user-provided interface to handle #include | ||
| 433 | // directives (optional). | ||
| 434 | _COM_Outptr_ IDxcOperationResult * | ||
| 435 | *ppResult // Preprocessor output status, buffer, and errors. | ||
| 436 | ) = 0; | ||
| 437 | |||
| 438 | /// \brief Disassemble a program. | ||
| 439 | /// | ||
| 440 | /// \deprecated Please use IDxcCompiler3::Disassemble() instead. | ||
| 441 | virtual HRESULT STDMETHODCALLTYPE Disassemble( | ||
| 442 | _In_ IDxcBlob *pSource, // Program to disassemble. | ||
| 443 | _COM_Outptr_ IDxcBlobEncoding **ppDisassembly // Disassembly text. | ||
| 444 | ) = 0; | ||
| 445 | }; | ||
| 446 | |||
| 447 | CROSS_PLATFORM_UUIDOF(IDxcCompiler2, "A005A9D9-B8BB-4594-B5C9-0E633BEC4D37") | ||
| 448 | /// \deprecated Please use IDxcCompiler3 instead. | ||
| 449 | struct IDxcCompiler2 : public IDxcCompiler { | ||
| 450 | /// \brief Compile a single entry point to the target shader model with debug | ||
| 451 | /// information. | ||
| 452 | /// | ||
| 453 | /// \deprecated Please use IDxcCompiler3::Compile() instead. | ||
| 454 | virtual HRESULT STDMETHODCALLTYPE CompileWithDebug( | ||
| 455 | _In_ IDxcBlob *pSource, // Source text to compile. | ||
| 456 | _In_opt_z_ LPCWSTR pSourceName, // Optional file name for pSource. Used in | ||
| 457 | // errors and include handlers. | ||
| 458 | _In_opt_z_ LPCWSTR pEntryPoint, // Entry point name. | ||
| 459 | _In_z_ LPCWSTR pTargetProfile, // Shader profile to compile. | ||
| 460 | _In_opt_count_(argCount) | ||
| 461 | LPCWSTR *pArguments, // Array of pointers to arguments. | ||
| 462 | _In_ UINT32 argCount, // Number of arguments. | ||
| 463 | _In_count_(defineCount) const DxcDefine *pDefines, // Array of defines. | ||
| 464 | _In_ UINT32 defineCount, // Number of defines. | ||
| 465 | _In_opt_ IDxcIncludeHandler | ||
| 466 | *pIncludeHandler, // user-provided interface to handle #include | ||
| 467 | // directives (optional). | ||
| 468 | _COM_Outptr_ IDxcOperationResult * | ||
| 469 | *ppResult, // Compiler output status, buffer, and errors. | ||
| 470 | _Outptr_opt_result_z_ LPWSTR | ||
| 471 | *ppDebugBlobName, // Suggested file name for debug blob. Must be | ||
| 472 | // CoTaskMemFree()'d. | ||
| 473 | _COM_Outptr_opt_ IDxcBlob **ppDebugBlob // Debug blob. | ||
| 474 | ) = 0; | ||
| 475 | }; | ||
| 476 | |||
| 477 | CROSS_PLATFORM_UUIDOF(IDxcLinker, "F1B5BE2A-62DD-4327-A1C2-42AC1E1E78E6") | ||
| 478 | /// \brief DXC linker interface. | ||
| 479 | /// | ||
| 480 | /// Use DxcCreateInstance with CLSID_DxcLinker to obtain an instance of this | ||
| 481 | /// interface. | ||
| 482 | struct IDxcLinker : public IUnknown { | ||
| 483 | public: | ||
| 484 | /// \brief Register a library with name to reference it later. | ||
| 485 | virtual HRESULT | ||
| 486 | RegisterLibrary(_In_opt_ LPCWSTR pLibName, ///< Name of the library. | ||
| 487 | _In_ IDxcBlob *pLib ///< Library blob. | ||
| 488 | ) = 0; | ||
| 489 | |||
| 490 | /// \brief Links the shader and produces a shader blob that the Direct3D | ||
| 491 | /// runtime can use. | ||
| 492 | virtual HRESULT STDMETHODCALLTYPE Link( | ||
| 493 | _In_opt_ LPCWSTR pEntryName, ///< Entry point name. | ||
| 494 | _In_ LPCWSTR pTargetProfile, ///< shader profile to link. | ||
| 495 | _In_count_(libCount) | ||
| 496 | const LPCWSTR *pLibNames, ///< Array of library names to link. | ||
| 497 | _In_ UINT32 libCount, ///< Number of libraries to link. | ||
| 498 | _In_opt_count_(argCount) | ||
| 499 | const LPCWSTR *pArguments, ///< Array of pointers to arguments. | ||
| 500 | _In_ UINT32 argCount, ///< Number of arguments. | ||
| 501 | _COM_Outptr_ IDxcOperationResult * | ||
| 502 | *ppResult ///< Linker output status, buffer, and errors. | ||
| 503 | ) = 0; | ||
| 504 | }; | ||
| 505 | |||
| 506 | ///////////////////////// | ||
| 507 | // Latest interfaces. Please use these. | ||
| 508 | //////////////////////// | ||
| 509 | |||
| 510 | CROSS_PLATFORM_UUIDOF(IDxcUtils, "4605C4CB-2019-492A-ADA4-65F20BB7D67F") | ||
| 511 | /// \brief Various utility functions for DXC. | ||
| 512 | /// | ||
| 513 | /// Use DxcCreateInstance with CLSID_DxcUtils to obtain an instance of this | ||
| 514 | /// interface. | ||
| 515 | /// | ||
| 516 | /// IDxcUtils replaces IDxcLibrary. | ||
| 517 | struct IDxcUtils : public IUnknown { | ||
| 518 | /// \brief Create a sub-blob that holds a reference to the outer blob and | ||
| 519 | /// points to its memory. | ||
| 520 | /// | ||
| 521 | /// \param pBlob The outer blob. | ||
| 522 | /// | ||
| 523 | /// \param offset The offset inside the outer blob. | ||
| 524 | /// | ||
| 525 | /// \param length The size, in bytes, of the buffer to reference from the | ||
| 526 | /// output blob. | ||
| 527 | /// | ||
| 528 | /// \param ppResult Address of the pointer that receives a pointer to the | ||
| 529 | /// newly created blob. | ||
| 530 | virtual HRESULT STDMETHODCALLTYPE | ||
| 531 | CreateBlobFromBlob(_In_ IDxcBlob *pBlob, UINT32 offset, UINT32 length, | ||
| 532 | _COM_Outptr_ IDxcBlob **ppResult) = 0; | ||
| 533 | |||
| 534 | // For codePage, use 0 (or DXC_CP_ACP) for raw binary or ANSI code page. | ||
| 535 | |||
| 536 | /// \brief Create a blob referencing existing memory, with no copy. | ||
| 537 | /// | ||
| 538 | /// \param pData Pointer to buffer containing the contents of the new blob. | ||
| 539 | /// | ||
| 540 | /// \param size The size of the pData buffer, in bytes. | ||
| 541 | /// | ||
| 542 | /// \param codePage The code page to use if the blob contains text. Use | ||
| 543 | /// DXC_CP_ACP for binary or ANSI code page. | ||
| 544 | /// | ||
| 545 | /// \param ppBlobEncoding Address of the pointer that receives a pointer to | ||
| 546 | /// the newly created blob. | ||
| 547 | /// | ||
| 548 | /// The user must manage the memory lifetime separately. | ||
| 549 | /// | ||
| 550 | /// This replaces IDxcLibrary::CreateBlobWithEncodingFromPinned. | ||
| 551 | virtual HRESULT STDMETHODCALLTYPE CreateBlobFromPinned( | ||
| 552 | _In_bytecount_(size) LPCVOID pData, UINT32 size, UINT32 codePage, | ||
| 553 | _COM_Outptr_ IDxcBlobEncoding **ppBlobEncoding) = 0; | ||
| 554 | |||
| 555 | /// \brief Create a blob, taking ownership of memory allocated with the | ||
| 556 | /// supplied allocator. | ||
| 557 | /// | ||
| 558 | /// \param pData Pointer to buffer containing the contents of the new blob. | ||
| 559 | /// | ||
| 560 | /// \param pIMalloc The memory allocator to use. | ||
| 561 | /// | ||
| 562 | /// \param size The size of thee pData buffer, in bytes. | ||
| 563 | /// | ||
| 564 | /// \param codePage The code page to use if the blob contains text. Use | ||
| 565 | /// DXC_CP_ACP for binary or ANSI code page. | ||
| 566 | /// | ||
| 567 | /// \param ppBlobEncoding Address of the pointer that receives a pointer to | ||
| 568 | /// the newly created blob. | ||
| 569 | /// | ||
| 570 | /// This replaces IDxcLibrary::CreateBlobWithEncodingOnMalloc. | ||
| 571 | virtual HRESULT STDMETHODCALLTYPE MoveToBlob( | ||
| 572 | _In_bytecount_(size) LPCVOID pData, IMalloc *pIMalloc, UINT32 size, | ||
| 573 | UINT32 codePage, _COM_Outptr_ IDxcBlobEncoding **ppBlobEncoding) = 0; | ||
| 574 | |||
| 575 | /// \brief Create a blob containing a copy of the existing data. | ||
| 576 | /// | ||
| 577 | /// \param pData Pointer to buffer containing the contents of the new blob. | ||
| 578 | /// | ||
| 579 | /// \param size The size of thee pData buffer, in bytes. | ||
| 580 | /// | ||
| 581 | /// \param codePage The code page to use if the blob contains text. Use | ||
| 582 | /// DXC_CP_ACP for binary or ANSI code page. | ||
| 583 | /// | ||
| 584 | /// \param ppBlobEncoding Address of the pointer that receives a pointer to | ||
| 585 | /// the newly created blob. | ||
| 586 | /// | ||
| 587 | /// The new blob and its contents are allocated with the current allocator. | ||
| 588 | /// This replaces IDxcLibrary::CreateBlobWithEncodingOnHeapCopy. | ||
| 589 | virtual HRESULT STDMETHODCALLTYPE | ||
| 590 | CreateBlob(_In_bytecount_(size) LPCVOID pData, UINT32 size, UINT32 codePage, | ||
| 591 | _COM_Outptr_ IDxcBlobEncoding **ppBlobEncoding) = 0; | ||
| 592 | |||
| 593 | /// \brief Create a blob with data loaded from a file. | ||
| 594 | /// | ||
| 595 | /// \param pFileName The name of the file to load from. | ||
| 596 | /// | ||
| 597 | /// \param pCodePage Optional code page to use if the blob contains text. Pass | ||
| 598 | /// NULL for binary data. | ||
| 599 | /// | ||
| 600 | /// \param ppBlobEncoding Address of the pointer that receives a pointer to | ||
| 601 | /// the newly created blob. | ||
| 602 | /// | ||
| 603 | /// The new blob and its contents are allocated with the current allocator. | ||
| 604 | /// This replaces IDxcLibrary::CreateBlobFromFile. | ||
| 605 | virtual HRESULT STDMETHODCALLTYPE | ||
| 606 | LoadFile(_In_z_ LPCWSTR pFileName, _In_opt_ UINT32 *pCodePage, | ||
| 607 | _COM_Outptr_ IDxcBlobEncoding **ppBlobEncoding) = 0; | ||
| 608 | |||
| 609 | /// \brief Create a stream that reads data from a blob. | ||
| 610 | /// | ||
| 611 | /// \param pBlob The blob to read from. | ||
| 612 | /// | ||
| 613 | /// \param ppStream Address of the pointer that receives a pointer to the | ||
| 614 | /// newly created stream. | ||
| 615 | virtual HRESULT STDMETHODCALLTYPE CreateReadOnlyStreamFromBlob( | ||
| 616 | _In_ IDxcBlob *pBlob, _COM_Outptr_ IStream **ppStream) = 0; | ||
| 617 | |||
| 618 | /// \brief Create default file-based include handler. | ||
| 619 | /// | ||
| 620 | /// \param ppResult Address of the pointer that receives a pointer to the | ||
| 621 | /// newly created include handler. | ||
| 622 | virtual HRESULT STDMETHODCALLTYPE | ||
| 623 | CreateDefaultIncludeHandler(_COM_Outptr_ IDxcIncludeHandler **ppResult) = 0; | ||
| 624 | |||
| 625 | /// \brief Convert or return matching encoded text blob as UTF-8. | ||
| 626 | /// | ||
| 627 | /// \param pBlob The blob to convert. | ||
| 628 | /// | ||
| 629 | /// \param ppBlobEncoding Address of the pointer that receives a pointer to | ||
| 630 | /// the newly created blob. | ||
| 631 | virtual HRESULT STDMETHODCALLTYPE GetBlobAsUtf8( | ||
| 632 | _In_ IDxcBlob *pBlob, _COM_Outptr_ IDxcBlobUtf8 **ppBlobEncoding) = 0; | ||
| 633 | |||
| 634 | /// \brief Convert or return matching encoded text blob as UTF-16. | ||
| 635 | /// | ||
| 636 | /// \param pBlob The blob to convert. | ||
| 637 | /// | ||
| 638 | /// \param ppBlobEncoding Address of the pointer that receives a pointer to | ||
| 639 | /// the newly created blob. | ||
| 640 | virtual HRESULT STDMETHODCALLTYPE GetBlobAsWide( | ||
| 641 | _In_ IDxcBlob *pBlob, _COM_Outptr_ IDxcBlobWide **ppBlobEncoding) = 0; | ||
| 642 | |||
| 643 | #ifdef _WIN32 | ||
| 644 | /// \brief Convert or return matching encoded text blob as UTF-16. | ||
| 645 | /// | ||
| 646 | /// \param pBlob The blob to convert. | ||
| 647 | /// | ||
| 648 | /// \param ppBlobEncoding Address of the pointer that receives a pointer to | ||
| 649 | /// the newly created blob. | ||
| 650 | /// | ||
| 651 | /// Alias to GetBlobAsWide on Win32. | ||
| 652 | inline HRESULT GetBlobAsUtf16(_In_ IDxcBlob *pBlob, | ||
| 653 | _COM_Outptr_ IDxcBlobWide **ppBlobEncoding) { | ||
| 654 | return this->GetBlobAsWide(pBlob, ppBlobEncoding); | ||
| 655 | } | ||
| 656 | #endif | ||
| 657 | |||
| 658 | /// \brief Retrieve a single part from a DXIL container. | ||
| 659 | /// | ||
| 660 | /// \param pShader The shader to retrieve the part from. | ||
| 661 | /// | ||
| 662 | /// \param DxcPart The part to retrieve (eg DXC_PART_ROOT_SIGNATURE). | ||
| 663 | /// | ||
| 664 | /// \param ppPartData Address of the pointer that receives a pointer to the | ||
| 665 | /// part. | ||
| 666 | /// | ||
| 667 | /// \param pPartSizeInBytes Address of the pointer that receives the size of | ||
| 668 | /// the part. | ||
| 669 | /// | ||
| 670 | /// The returned pointer points inside the buffer passed in pShader. | ||
| 671 | virtual HRESULT STDMETHODCALLTYPE | ||
| 672 | GetDxilContainerPart(_In_ const DxcBuffer *pShader, _In_ UINT32 DxcPart, | ||
| 673 | _Outptr_result_nullonfailure_ void **ppPartData, | ||
| 674 | _Out_ UINT32 *pPartSizeInBytes) = 0; | ||
| 675 | |||
| 676 | /// \brief Create reflection interface from serialized DXIL container or the | ||
| 677 | /// DXC_OUT_REFLECTION blob contents. | ||
| 678 | /// | ||
| 679 | /// \param pData The source data. | ||
| 680 | /// | ||
| 681 | /// \param iid The interface ID of the reflection interface to create. | ||
| 682 | /// | ||
| 683 | /// \param ppvReflection Address of the pointer that receives a pointer to the | ||
| 684 | /// newly created reflection interface. | ||
| 685 | /// | ||
| 686 | /// Use this with interfaces such as ID3D12ShaderReflection. | ||
| 687 | virtual HRESULT STDMETHODCALLTYPE CreateReflection( | ||
| 688 | _In_ const DxcBuffer *pData, REFIID iid, void **ppvReflection) = 0; | ||
| 689 | |||
| 690 | /// \brief Build arguments that can be passed to the Compile method. | ||
| 691 | virtual HRESULT STDMETHODCALLTYPE BuildArguments( | ||
| 692 | _In_opt_z_ LPCWSTR pSourceName, ///< Optional file name for pSource. Used | ||
| 693 | ///< in errors and include handlers. | ||
| 694 | _In_opt_z_ LPCWSTR pEntryPoint, ///< Entry point name (-E). | ||
| 695 | _In_z_ LPCWSTR pTargetProfile, ///< Shader profile to compile (-T). | ||
| 696 | _In_opt_count_(argCount) | ||
| 697 | LPCWSTR *pArguments, ///< Array of pointers to arguments. | ||
| 698 | _In_ UINT32 argCount, ///< Number of arguments. | ||
| 699 | _In_count_(defineCount) const DxcDefine *pDefines, ///< Array of defines. | ||
| 700 | _In_ UINT32 defineCount, ///< Number of defines. | ||
| 701 | _COM_Outptr_ IDxcCompilerArgs * | ||
| 702 | *ppArgs ///< Arguments you can use with Compile() method. | ||
| 703 | ) = 0; | ||
| 704 | |||
| 705 | /// \brief Retrieve the hash and contents of a shader PDB. | ||
| 706 | /// | ||
| 707 | /// \param pPDBBlob The blob containing the PDB. | ||
| 708 | /// | ||
| 709 | /// \param ppHash Address of the pointer that receives a pointer to the hash | ||
| 710 | /// blob. | ||
| 711 | /// | ||
| 712 | /// \param ppContainer Address of the pointer that receives a pointer to the | ||
| 713 | /// bloc containing the contents of the PDB. | ||
| 714 | /// | ||
| 715 | virtual HRESULT STDMETHODCALLTYPE | ||
| 716 | GetPDBContents(_In_ IDxcBlob *pPDBBlob, _COM_Outptr_ IDxcBlob **ppHash, | ||
| 717 | _COM_Outptr_ IDxcBlob **ppContainer) = 0; | ||
| 718 | }; | ||
| 719 | |||
| 720 | /// \brief Specifies the kind of output to retrieve from a IDxcResult. | ||
| 721 | /// | ||
| 722 | /// Note: text outputs returned from version 2 APIs are UTF-8 or UTF-16 based on | ||
| 723 | /// the -encoding option passed to the compiler. | ||
| 724 | typedef enum DXC_OUT_KIND { | ||
| 725 | DXC_OUT_NONE = 0, ///< No output. | ||
| 726 | DXC_OUT_OBJECT = 1, ///< IDxcBlob - Shader or library object. | ||
| 727 | DXC_OUT_ERRORS = 2, ///< IDxcBlobUtf8 or IDxcBlobWide. | ||
| 728 | DXC_OUT_PDB = 3, ///< IDxcBlob. | ||
| 729 | DXC_OUT_SHADER_HASH = 4, ///< IDxcBlob - DxcShaderHash of shader or shader | ||
| 730 | ///< with source info (-Zsb/-Zss). | ||
| 731 | DXC_OUT_DISASSEMBLY = 5, ///< IDxcBlobUtf8 or IDxcBlobWide - from Disassemble. | ||
| 732 | DXC_OUT_HLSL = | ||
| 733 | 6, ///< IDxcBlobUtf8 or IDxcBlobWide - from Preprocessor or Rewriter. | ||
| 734 | DXC_OUT_TEXT = 7, ///< IDxcBlobUtf8 or IDxcBlobWide - other text, such as | ||
| 735 | ///< -ast-dump or -Odump. | ||
| 736 | DXC_OUT_REFLECTION = 8, ///< IDxcBlob - RDAT part with reflection data. | ||
| 737 | DXC_OUT_ROOT_SIGNATURE = 9, ///< IDxcBlob - Serialized root signature output. | ||
| 738 | DXC_OUT_EXTRA_OUTPUTS = 10, ///< IDxcExtraOutputs - Extra outputs. | ||
| 739 | DXC_OUT_REMARKS = | ||
| 740 | 11, ///< IDxcBlobUtf8 or IDxcBlobWide - text directed at stdout. | ||
| 741 | DXC_OUT_TIME_REPORT = | ||
| 742 | 12, ///< IDxcBlobUtf8 or IDxcBlobWide - text directed at stdout. | ||
| 743 | DXC_OUT_TIME_TRACE = | ||
| 744 | 13, ///< IDxcBlobUtf8 or IDxcBlobWide - text directed at stdout. | ||
| 745 | |||
| 746 | DXC_OUT_LAST = DXC_OUT_TIME_TRACE, ///< Last value for a counter. | ||
| 747 | |||
| 748 | DXC_OUT_NUM_ENUMS, | ||
| 749 | DXC_OUT_FORCE_DWORD = 0xFFFFFFFF | ||
| 750 | } DXC_OUT_KIND; | ||
| 751 | |||
| 752 | static_assert(DXC_OUT_NUM_ENUMS == DXC_OUT_LAST + 1, | ||
| 753 | "DXC_OUT_* Enum added and last value not updated."); | ||
| 754 | |||
| 755 | CROSS_PLATFORM_UUIDOF(IDxcResult, "58346CDA-DDE7-4497-9461-6F87AF5E0659") | ||
| 756 | /// \brief Result of a DXC operation. | ||
| 757 | /// | ||
| 758 | /// DXC operations may have multiple outputs, such as a shader object and | ||
| 759 | /// errors. This interface provides access to the outputs. | ||
| 760 | struct IDxcResult : public IDxcOperationResult { | ||
| 761 | /// \brief Determines whether or not this result has the specified output. | ||
| 762 | /// | ||
| 763 | /// \param dxcOutKind The kind of output to check for. | ||
| 764 | virtual BOOL STDMETHODCALLTYPE HasOutput(_In_ DXC_OUT_KIND dxcOutKind) = 0; | ||
| 765 | |||
| 766 | /// \brief Retrieves the specified output. | ||
| 767 | /// | ||
| 768 | /// \param dxcOutKind The kind of output to retrieve. | ||
| 769 | /// | ||
| 770 | /// \param iid The interface ID of the output interface. | ||
| 771 | /// | ||
| 772 | /// \param ppvObject Address of the pointer that receives a pointer to the | ||
| 773 | /// output. | ||
| 774 | /// | ||
| 775 | /// \param ppOutputName Optional address of a pointer to receive the name | ||
| 776 | /// blob, if there is one. | ||
| 777 | virtual HRESULT STDMETHODCALLTYPE | ||
| 778 | GetOutput(_In_ DXC_OUT_KIND dxcOutKind, _In_ REFIID iid, | ||
| 779 | _COM_Outptr_opt_result_maybenull_ void **ppvObject, | ||
| 780 | _COM_Outptr_opt_result_maybenull_ IDxcBlobWide **ppOutputName) = 0; | ||
| 781 | |||
| 782 | /// \brief Retrieves the number of outputs available in this result. | ||
| 783 | virtual UINT32 GetNumOutputs() = 0; | ||
| 784 | |||
| 785 | /// \brief Retrieves the output kind at the specified index. | ||
| 786 | virtual DXC_OUT_KIND GetOutputByIndex(UINT32 Index) = 0; | ||
| 787 | |||
| 788 | /// \brief Retrieves the primary output kind for this result. | ||
| 789 | /// | ||
| 790 | /// See IDxcOperationResult::GetResult() for more information on the primary | ||
| 791 | /// output kinds. | ||
| 792 | virtual DXC_OUT_KIND PrimaryOutput() = 0; | ||
| 793 | }; | ||
| 794 | |||
| 795 | // Special names for extra output that should get written to specific streams. | ||
| 796 | #define DXC_EXTRA_OUTPUT_NAME_STDOUT L"*stdout*" | ||
| 797 | #define DXC_EXTRA_OUTPUT_NAME_STDERR L"*stderr*" | ||
| 798 | |||
| 799 | CROSS_PLATFORM_UUIDOF(IDxcExtraOutputs, "319b37a2-a5c2-494a-a5de-4801b2faf989") | ||
| 800 | /// \brief Additional outputs from a DXC operation. | ||
| 801 | /// | ||
| 802 | /// This can be used to obtain outputs that don't have an explicit DXC_OUT_KIND. | ||
| 803 | /// Use DXC_OUT_EXTRA_OUTPUTS to obtain instances of this. | ||
| 804 | struct IDxcExtraOutputs : public IUnknown { | ||
| 805 | /// \brief Retrieves the number of outputs available | ||
| 806 | virtual UINT32 STDMETHODCALLTYPE GetOutputCount() = 0; | ||
| 807 | |||
| 808 | /// \brief Retrieves the specified output. | ||
| 809 | /// | ||
| 810 | /// \param uIndex The index of the output to retrieve. | ||
| 811 | /// | ||
| 812 | /// \param iid The interface ID of the output interface. | ||
| 813 | /// | ||
| 814 | /// \param ppvObject Optional address of the pointer that receives a pointer | ||
| 815 | /// to the output if there is one. | ||
| 816 | /// | ||
| 817 | /// \param ppOutputType Optional address of the pointer that receives the | ||
| 818 | /// output type name blob if there is one. | ||
| 819 | /// | ||
| 820 | /// \param ppOutputName Optional address of the pointer that receives the | ||
| 821 | /// output name blob if there is one. | ||
| 822 | virtual HRESULT STDMETHODCALLTYPE | ||
| 823 | GetOutput(_In_ UINT32 uIndex, _In_ REFIID iid, | ||
| 824 | _COM_Outptr_opt_result_maybenull_ void **ppvObject, | ||
| 825 | _COM_Outptr_opt_result_maybenull_ IDxcBlobWide **ppOutputType, | ||
| 826 | _COM_Outptr_opt_result_maybenull_ IDxcBlobWide **ppOutputName) = 0; | ||
| 827 | }; | ||
| 828 | |||
| 829 | CROSS_PLATFORM_UUIDOF(IDxcCompiler3, "228B4687-5A6A-4730-900C-9702B2203F54") | ||
| 830 | /// \brief Interface to the DirectX Shader Compiler. | ||
| 831 | /// | ||
| 832 | /// Use DxcCreateInstance with CLSID_DxcCompiler to obtain an instance of this | ||
| 833 | /// interface. | ||
| 834 | struct IDxcCompiler3 : public IUnknown { | ||
| 835 | /// \brief Compile a shader. | ||
| 836 | /// | ||
| 837 | /// IDxcUtils::BuildArguments can be used to assist building the pArguments | ||
| 838 | /// and argCount parameters. | ||
| 839 | /// | ||
| 840 | /// Depending on the arguments, this method can be used to: | ||
| 841 | /// | ||
| 842 | /// * Compile a single entry point to the target shader model, | ||
| 843 | /// * Compile a library to a library target (-T lib_*) | ||
| 844 | /// * Compile a root signature (-T rootsig_*), | ||
| 845 | /// * Preprocess HLSL source (-P). | ||
| 846 | virtual HRESULT STDMETHODCALLTYPE Compile( | ||
| 847 | _In_ const DxcBuffer *pSource, ///< Source text to compile. | ||
| 848 | _In_opt_count_(argCount) | ||
| 849 | LPCWSTR *pArguments, ///< Array of pointers to arguments. | ||
| 850 | _In_ UINT32 argCount, ///< Number of arguments. | ||
| 851 | _In_opt_ IDxcIncludeHandler | ||
| 852 | *pIncludeHandler, ///< user-provided interface to handle include | ||
| 853 | ///< directives (optional). | ||
| 854 | _In_ REFIID riid, ///< Interface ID for the result. | ||
| 855 | _Out_ LPVOID *ppResult ///< IDxcResult: status, buffer, and errors. | ||
| 856 | ) = 0; | ||
| 857 | |||
| 858 | /// \brief Disassemble a program. | ||
| 859 | virtual HRESULT STDMETHODCALLTYPE Disassemble( | ||
| 860 | _In_ const DxcBuffer | ||
| 861 | *pObject, ///< Program to disassemble: dxil container or bitcode. | ||
| 862 | _In_ REFIID riid, ///< Interface ID for the result. | ||
| 863 | _Out_ LPVOID | ||
| 864 | *ppResult ///< IDxcResult: status, disassembly text, and errors. | ||
| 865 | ) = 0; | ||
| 866 | }; | ||
| 867 | |||
| 868 | static const UINT32 DxcValidatorFlags_Default = 0; | ||
| 869 | static const UINT32 DxcValidatorFlags_InPlaceEdit = | ||
| 870 | 1; // Validator is allowed to update shader blob in-place. | ||
| 871 | static const UINT32 DxcValidatorFlags_RootSignatureOnly = 2; | ||
| 872 | static const UINT32 DxcValidatorFlags_ModuleOnly = 4; | ||
| 873 | static const UINT32 DxcValidatorFlags_ValidMask = 0x7; | ||
| 874 | |||
| 875 | CROSS_PLATFORM_UUIDOF(IDxcValidator, "A6E82BD2-1FD7-4826-9811-2857E797F49A") | ||
| 876 | /// \brief Interface to DXC shader validator. | ||
| 877 | /// | ||
| 878 | /// Use DxcCreateInstance with CLSID_DxcValidator to obtain an instance of this. | ||
| 879 | struct IDxcValidator : public IUnknown { | ||
| 880 | /// \brief Validate a shader. | ||
| 881 | virtual HRESULT STDMETHODCALLTYPE Validate( | ||
| 882 | _In_ IDxcBlob *pShader, ///< Shader to validate. | ||
| 883 | _In_ UINT32 Flags, ///< Validation flags. | ||
| 884 | _COM_Outptr_ IDxcOperationResult * | ||
| 885 | *ppResult ///< Validation output status, buffer, and errors. | ||
| 886 | ) = 0; | ||
| 887 | }; | ||
| 888 | |||
| 889 | CROSS_PLATFORM_UUIDOF(IDxcValidator2, "458e1fd1-b1b2-4750-a6e1-9c10f03bed92") | ||
| 890 | /// \brief Interface to DXC shader validator. | ||
| 891 | /// | ||
| 892 | /// Use DxcCreateInstance with CLSID_DxcValidator to obtain an instance of this. | ||
| 893 | struct IDxcValidator2 : public IDxcValidator { | ||
| 894 | /// \brief Validate a shader with optional debug bitcode. | ||
| 895 | virtual HRESULT STDMETHODCALLTYPE ValidateWithDebug( | ||
| 896 | _In_ IDxcBlob *pShader, ///< Shader to validate. | ||
| 897 | _In_ UINT32 Flags, ///< Validation flags. | ||
| 898 | _In_opt_ DxcBuffer *pOptDebugBitcode, ///< Optional debug module bitcode | ||
| 899 | ///< to provide line numbers. | ||
| 900 | _COM_Outptr_ IDxcOperationResult * | ||
| 901 | *ppResult ///< Validation output status, buffer, and errors. | ||
| 902 | ) = 0; | ||
| 903 | }; | ||
| 904 | |||
| 905 | CROSS_PLATFORM_UUIDOF(IDxcContainerBuilder, | ||
| 906 | "334b1f50-2292-4b35-99a1-25588d8c17fe") | ||
| 907 | /// \brief Interface to DXC container builder. | ||
| 908 | /// | ||
| 909 | /// Use DxcCreateInstance with CLSID_DxcContainerBuilder to obtain an instance | ||
| 910 | /// of this. | ||
| 911 | struct IDxcContainerBuilder : public IUnknown { | ||
| 912 | /// \brief Load a DxilContainer to the builder. | ||
| 913 | virtual HRESULT STDMETHODCALLTYPE | ||
| 914 | Load(_In_ IDxcBlob *pDxilContainerHeader) = 0; | ||
| 915 | |||
| 916 | /// \brief Add a part to the container. | ||
| 917 | /// | ||
| 918 | /// \param fourCC The part identifier (eg DXC_PART_PDB). | ||
| 919 | /// | ||
| 920 | /// \param pSource The source blob. | ||
| 921 | virtual HRESULT STDMETHODCALLTYPE AddPart(_In_ UINT32 fourCC, | ||
| 922 | _In_ IDxcBlob *pSource) = 0; | ||
| 923 | |||
| 924 | /// \brief Remove a part from the container. | ||
| 925 | /// | ||
| 926 | /// \param fourCC The part identifier (eg DXC_PART_PDB). | ||
| 927 | /// | ||
| 928 | /// \return S_OK on success, DXC_E_MISSING_PART if the part was not found, or | ||
| 929 | /// other standard HRESULT error code. | ||
| 930 | virtual HRESULT STDMETHODCALLTYPE RemovePart(_In_ UINT32 fourCC) = 0; | ||
| 931 | |||
| 932 | /// \brief Build the container. | ||
| 933 | /// | ||
| 934 | /// \param ppResult Pointer to variable to receive the result. | ||
| 935 | virtual HRESULT STDMETHODCALLTYPE | ||
| 936 | SerializeContainer(_Out_ IDxcOperationResult **ppResult) = 0; | ||
| 937 | }; | ||
| 938 | |||
| 939 | CROSS_PLATFORM_UUIDOF(IDxcAssembler, "091f7a26-1c1f-4948-904b-e6e3a8a771d5") | ||
| 940 | /// \brief Interface to DxcAssembler. | ||
| 941 | /// | ||
| 942 | /// Use DxcCreateInstance with CLSID_DxcAssembler to obtain an instance of this. | ||
| 943 | struct IDxcAssembler : public IUnknown { | ||
| 944 | /// \brief Assemble DXIL in LL or LLVM bitcode to DXIL container. | ||
| 945 | virtual HRESULT STDMETHODCALLTYPE AssembleToContainer( | ||
| 946 | _In_ IDxcBlob *pShader, ///< Shader to assemble. | ||
| 947 | _COM_Outptr_ IDxcOperationResult * | ||
| 948 | *ppResult ///< Assembly output status, buffer, and errors. | ||
| 949 | ) = 0; | ||
| 950 | }; | ||
| 951 | |||
| 952 | CROSS_PLATFORM_UUIDOF(IDxcContainerReflection, | ||
| 953 | "d2c21b26-8350-4bdc-976a-331ce6f4c54c") | ||
| 954 | /// \brief Interface to DxcContainerReflection. | ||
| 955 | /// | ||
| 956 | /// Use DxcCreateInstance with CLSID_DxcContainerReflection to obtain an | ||
| 957 | /// instance of this. | ||
| 958 | struct IDxcContainerReflection : public IUnknown { | ||
| 959 | /// \brief Choose the container to perform reflection on | ||
| 960 | /// | ||
| 961 | /// \param pContainer The container to load. If null is passed then this | ||
| 962 | /// instance will release any held resources. | ||
| 963 | virtual HRESULT STDMETHODCALLTYPE Load(_In_ IDxcBlob *pContainer) = 0; | ||
| 964 | |||
| 965 | /// \brief Retrieves the number of parts in the container. | ||
| 966 | /// | ||
| 967 | /// \param pResult Pointer to variable to receive the result. | ||
| 968 | /// | ||
| 969 | /// \return S_OK on success, E_NOT_VALID_STATE if a container has not been | ||
| 970 | /// loaded using Load(), or other standard HRESULT error codes. | ||
| 971 | virtual HRESULT STDMETHODCALLTYPE GetPartCount(_Out_ UINT32 *pResult) = 0; | ||
| 972 | |||
| 973 | /// \brief Retrieve the kind of a specified part. | ||
| 974 | /// | ||
| 975 | /// \param idx The index of the part to retrieve the kind of. | ||
| 976 | /// | ||
| 977 | /// \param pResult Pointer to variable to receive the result. | ||
| 978 | /// | ||
| 979 | /// \return S_OK on success, E_NOT_VALID_STATE if a container has not been | ||
| 980 | /// loaded using Load(), E_BOUND if idx is out of bounds, or other standard | ||
| 981 | /// HRESULT error codes. | ||
| 982 | virtual HRESULT STDMETHODCALLTYPE GetPartKind(UINT32 idx, | ||
| 983 | _Out_ UINT32 *pResult) = 0; | ||
| 984 | |||
| 985 | /// \brief Retrieve the content of a specified part. | ||
| 986 | /// | ||
| 987 | /// \param idx The index of the part to retrieve. | ||
| 988 | /// | ||
| 989 | /// \param ppResult Pointer to variable to receive the result. | ||
| 990 | /// | ||
| 991 | /// \return S_OK on success, E_NOT_VALID_STATE if a container has not been | ||
| 992 | /// loaded using Load(), E_BOUND if idx is out of bounds, or other standard | ||
| 993 | /// HRESULT error codes. | ||
| 994 | virtual HRESULT STDMETHODCALLTYPE | ||
| 995 | GetPartContent(UINT32 idx, _COM_Outptr_ IDxcBlob **ppResult) = 0; | ||
| 996 | |||
| 997 | /// \brief Retrieve the index of the first part with the specified kind. | ||
| 998 | /// | ||
| 999 | /// \param kind The kind to search for. | ||
| 1000 | /// | ||
| 1001 | /// \param pResult Pointer to variable to receive the index of the matching | ||
| 1002 | /// part. | ||
| 1003 | /// | ||
| 1004 | /// \return S_OK on success, E_NOT_VALID_STATE if a container has not been | ||
| 1005 | /// loaded using Load(), HRESULT_FROM_WIN32(ERROR_NOT_FOUND) if there is no | ||
| 1006 | /// part with the specified kind, or other standard HRESULT error codes. | ||
| 1007 | virtual HRESULT STDMETHODCALLTYPE | ||
| 1008 | FindFirstPartKind(UINT32 kind, _Out_ UINT32 *pResult) = 0; | ||
| 1009 | |||
| 1010 | /// \brief Retrieve the reflection interface for a specified part. | ||
| 1011 | /// | ||
| 1012 | /// \param idx The index of the part to retrieve the reflection interface of. | ||
| 1013 | /// | ||
| 1014 | /// \param iid The IID of the interface to retrieve. | ||
| 1015 | /// | ||
| 1016 | /// \param ppvObject Pointer to variable to receive the result. | ||
| 1017 | /// | ||
| 1018 | /// Use this with interfaces such as ID3D12ShaderReflection. | ||
| 1019 | /// | ||
| 1020 | /// \return S_OK on success, E_NOT_VALID_STATE if a container has not been | ||
| 1021 | /// loaded using Load(), E_BOUND if idx is out of bounds, or other standard | ||
| 1022 | /// HRESULT error codes. | ||
| 1023 | virtual HRESULT STDMETHODCALLTYPE GetPartReflection(UINT32 idx, REFIID iid, | ||
| 1024 | void **ppvObject) = 0; | ||
| 1025 | }; | ||
| 1026 | |||
| 1027 | CROSS_PLATFORM_UUIDOF(IDxcOptimizerPass, "AE2CD79F-CC22-453F-9B6B-B124E7A5204C") | ||
| 1028 | /// \brief An optimizer pass. | ||
| 1029 | /// | ||
| 1030 | /// Instances of this can be obtained via IDxcOptimizer::GetAvailablePass. | ||
| 1031 | struct IDxcOptimizerPass : public IUnknown { | ||
| 1032 | virtual HRESULT STDMETHODCALLTYPE | ||
| 1033 | GetOptionName(_COM_Outptr_ LPWSTR *ppResult) = 0; | ||
| 1034 | virtual HRESULT STDMETHODCALLTYPE | ||
| 1035 | GetDescription(_COM_Outptr_ LPWSTR *ppResult) = 0; | ||
| 1036 | virtual HRESULT STDMETHODCALLTYPE GetOptionArgCount(_Out_ UINT32 *pCount) = 0; | ||
| 1037 | virtual HRESULT STDMETHODCALLTYPE | ||
| 1038 | GetOptionArgName(UINT32 argIndex, _COM_Outptr_ LPWSTR *ppResult) = 0; | ||
| 1039 | virtual HRESULT STDMETHODCALLTYPE | ||
| 1040 | GetOptionArgDescription(UINT32 argIndex, _COM_Outptr_ LPWSTR *ppResult) = 0; | ||
| 1041 | }; | ||
| 1042 | |||
| 1043 | CROSS_PLATFORM_UUIDOF(IDxcOptimizer, "25740E2E-9CBA-401B-9119-4FB42F39F270") | ||
| 1044 | /// \brief Interface to DxcOptimizer. | ||
| 1045 | /// | ||
| 1046 | /// Use DxcCreateInstance with CLSID_DxcOptimizer to obtain an instance of this. | ||
| 1047 | struct IDxcOptimizer : public IUnknown { | ||
| 1048 | virtual HRESULT STDMETHODCALLTYPE | ||
| 1049 | GetAvailablePassCount(_Out_ UINT32 *pCount) = 0; | ||
| 1050 | virtual HRESULT STDMETHODCALLTYPE | ||
| 1051 | GetAvailablePass(UINT32 index, _COM_Outptr_ IDxcOptimizerPass **ppResult) = 0; | ||
| 1052 | virtual HRESULT STDMETHODCALLTYPE | ||
| 1053 | RunOptimizer(IDxcBlob *pBlob, _In_count_(optionCount) LPCWSTR *ppOptions, | ||
| 1054 | UINT32 optionCount, _COM_Outptr_ IDxcBlob **pOutputModule, | ||
| 1055 | _COM_Outptr_opt_ IDxcBlobEncoding **ppOutputText) = 0; | ||
| 1056 | }; | ||
| 1057 | |||
| 1058 | static const UINT32 DxcVersionInfoFlags_None = 0; | ||
| 1059 | static const UINT32 DxcVersionInfoFlags_Debug = 1; // Matches VS_FF_DEBUG | ||
| 1060 | static const UINT32 DxcVersionInfoFlags_Internal = | ||
| 1061 | 2; // Internal Validator (non-signing) | ||
| 1062 | |||
| 1063 | CROSS_PLATFORM_UUIDOF(IDxcVersionInfo, "b04f5b50-2059-4f12-a8ff-a1e0cde1cc7e") | ||
| 1064 | /// \brief PDB Version information. | ||
| 1065 | /// | ||
| 1066 | /// Use IDxcPdbUtils2::GetVersionInfo to obtain an instance of this. | ||
| 1067 | struct IDxcVersionInfo : public IUnknown { | ||
| 1068 | virtual HRESULT STDMETHODCALLTYPE GetVersion(_Out_ UINT32 *pMajor, | ||
| 1069 | _Out_ UINT32 *pMinor) = 0; | ||
| 1070 | virtual HRESULT STDMETHODCALLTYPE GetFlags(_Out_ UINT32 *pFlags) = 0; | ||
| 1071 | }; | ||
| 1072 | |||
| 1073 | CROSS_PLATFORM_UUIDOF(IDxcVersionInfo2, "fb6904c4-42f0-4b62-9c46-983af7da7c83") | ||
| 1074 | /// \brief PDB Version Information. | ||
| 1075 | /// | ||
| 1076 | /// Use IDxcPdbUtils2::GetVersionInfo to obtain a IDxcVersionInfo interface, and | ||
| 1077 | /// then use QueryInterface to obtain an instance of this interface from it. | ||
| 1078 | struct IDxcVersionInfo2 : public IDxcVersionInfo { | ||
| 1079 | virtual HRESULT STDMETHODCALLTYPE GetCommitInfo( | ||
| 1080 | _Out_ UINT32 *pCommitCount, ///< The total number commits. | ||
| 1081 | _Outptr_result_z_ char **pCommitHash ///< The SHA of the latest commit. | ||
| 1082 | ///< Must be CoTaskMemFree()'d. | ||
| 1083 | ) = 0; | ||
| 1084 | }; | ||
| 1085 | |||
| 1086 | CROSS_PLATFORM_UUIDOF(IDxcVersionInfo3, "5e13e843-9d25-473c-9ad2-03b2d0b44b1e") | ||
| 1087 | /// \brief PDB Version Information. | ||
| 1088 | /// | ||
| 1089 | /// Use IDxcPdbUtils2::GetVersionInfo to obtain a IDxcVersionInfo interface, and | ||
| 1090 | /// then use QueryInterface to obtain an instance of this interface from it. | ||
| 1091 | struct IDxcVersionInfo3 : public IUnknown { | ||
| 1092 | virtual HRESULT STDMETHODCALLTYPE GetCustomVersionString( | ||
| 1093 | _Outptr_result_z_ char * | ||
| 1094 | *pVersionString ///< Custom version string for compiler. Must be | ||
| 1095 | ///< CoTaskMemFree()'d. | ||
| 1096 | ) = 0; | ||
| 1097 | }; | ||
| 1098 | |||
| 1099 | struct DxcArgPair { | ||
| 1100 | const WCHAR *pName; | ||
| 1101 | const WCHAR *pValue; | ||
| 1102 | }; | ||
| 1103 | |||
| 1104 | CROSS_PLATFORM_UUIDOF(IDxcPdbUtils, "E6C9647E-9D6A-4C3B-B94C-524B5A6C343D") | ||
| 1105 | /// \deprecated Please use IDxcPdbUtils2 instead. | ||
| 1106 | struct IDxcPdbUtils : public IUnknown { | ||
| 1107 | virtual HRESULT STDMETHODCALLTYPE Load(_In_ IDxcBlob *pPdbOrDxil) = 0; | ||
| 1108 | |||
| 1109 | virtual HRESULT STDMETHODCALLTYPE GetSourceCount(_Out_ UINT32 *pCount) = 0; | ||
| 1110 | virtual HRESULT STDMETHODCALLTYPE | ||
| 1111 | GetSource(_In_ UINT32 uIndex, _COM_Outptr_ IDxcBlobEncoding **ppResult) = 0; | ||
| 1112 | virtual HRESULT STDMETHODCALLTYPE | ||
| 1113 | GetSourceName(_In_ UINT32 uIndex, _Outptr_result_z_ BSTR *pResult) = 0; | ||
| 1114 | |||
| 1115 | virtual HRESULT STDMETHODCALLTYPE GetFlagCount(_Out_ UINT32 *pCount) = 0; | ||
| 1116 | virtual HRESULT STDMETHODCALLTYPE | ||
| 1117 | GetFlag(_In_ UINT32 uIndex, _Outptr_result_z_ BSTR *pResult) = 0; | ||
| 1118 | |||
| 1119 | virtual HRESULT STDMETHODCALLTYPE GetArgCount(_Out_ UINT32 *pCount) = 0; | ||
| 1120 | virtual HRESULT STDMETHODCALLTYPE GetArg(_In_ UINT32 uIndex, | ||
| 1121 | _Outptr_result_z_ BSTR *pResult) = 0; | ||
| 1122 | |||
| 1123 | virtual HRESULT STDMETHODCALLTYPE GetArgPairCount(_Out_ UINT32 *pCount) = 0; | ||
| 1124 | virtual HRESULT STDMETHODCALLTYPE | ||
| 1125 | GetArgPair(_In_ UINT32 uIndex, _Outptr_result_z_ BSTR *pName, | ||
| 1126 | _Outptr_result_z_ BSTR *pValue) = 0; | ||
| 1127 | |||
| 1128 | virtual HRESULT STDMETHODCALLTYPE GetDefineCount(_Out_ UINT32 *pCount) = 0; | ||
| 1129 | virtual HRESULT STDMETHODCALLTYPE | ||
| 1130 | GetDefine(_In_ UINT32 uIndex, _Outptr_result_z_ BSTR *pResult) = 0; | ||
| 1131 | |||
| 1132 | virtual HRESULT STDMETHODCALLTYPE | ||
| 1133 | GetTargetProfile(_Outptr_result_z_ BSTR *pResult) = 0; | ||
| 1134 | virtual HRESULT STDMETHODCALLTYPE | ||
| 1135 | GetEntryPoint(_Outptr_result_z_ BSTR *pResult) = 0; | ||
| 1136 | virtual HRESULT STDMETHODCALLTYPE | ||
| 1137 | GetMainFileName(_Outptr_result_z_ BSTR *pResult) = 0; | ||
| 1138 | |||
| 1139 | virtual HRESULT STDMETHODCALLTYPE | ||
| 1140 | GetHash(_COM_Outptr_ IDxcBlob **ppResult) = 0; | ||
| 1141 | virtual HRESULT STDMETHODCALLTYPE | ||
| 1142 | GetName(_Outptr_result_z_ BSTR *pResult) = 0; | ||
| 1143 | |||
| 1144 | virtual BOOL STDMETHODCALLTYPE IsFullPDB() = 0; | ||
| 1145 | virtual HRESULT STDMETHODCALLTYPE | ||
| 1146 | GetFullPDB(_COM_Outptr_ IDxcBlob **ppFullPDB) = 0; | ||
| 1147 | |||
| 1148 | virtual HRESULT STDMETHODCALLTYPE | ||
| 1149 | GetVersionInfo(_COM_Outptr_ IDxcVersionInfo **ppVersionInfo) = 0; | ||
| 1150 | |||
| 1151 | virtual HRESULT STDMETHODCALLTYPE | ||
| 1152 | SetCompiler(_In_ IDxcCompiler3 *pCompiler) = 0; | ||
| 1153 | virtual HRESULT STDMETHODCALLTYPE | ||
| 1154 | CompileForFullPDB(_COM_Outptr_ IDxcResult **ppResult) = 0; | ||
| 1155 | virtual HRESULT STDMETHODCALLTYPE OverrideArgs(_In_ DxcArgPair *pArgPairs, | ||
| 1156 | UINT32 uNumArgPairs) = 0; | ||
| 1157 | virtual HRESULT STDMETHODCALLTYPE | ||
| 1158 | OverrideRootSignature(_In_ const WCHAR *pRootSignature) = 0; | ||
| 1159 | }; | ||
| 1160 | |||
| 1161 | CROSS_PLATFORM_UUIDOF(IDxcPdbUtils2, "4315D938-F369-4F93-95A2-252017CC3807") | ||
| 1162 | /// \brief DxcPdbUtils interface. | ||
| 1163 | /// | ||
| 1164 | /// Use DxcCreateInstance with CLSID_DxcPdbUtils to create an instance of this. | ||
| 1165 | struct IDxcPdbUtils2 : public IUnknown { | ||
| 1166 | virtual HRESULT STDMETHODCALLTYPE Load(_In_ IDxcBlob *pPdbOrDxil) = 0; | ||
| 1167 | |||
| 1168 | virtual HRESULT STDMETHODCALLTYPE GetSourceCount(_Out_ UINT32 *pCount) = 0; | ||
| 1169 | virtual HRESULT STDMETHODCALLTYPE | ||
| 1170 | GetSource(_In_ UINT32 uIndex, _COM_Outptr_ IDxcBlobEncoding **ppResult) = 0; | ||
| 1171 | virtual HRESULT STDMETHODCALLTYPE | ||
| 1172 | GetSourceName(_In_ UINT32 uIndex, _COM_Outptr_ IDxcBlobWide **ppResult) = 0; | ||
| 1173 | |||
| 1174 | virtual HRESULT STDMETHODCALLTYPE GetLibraryPDBCount(UINT32 *pCount) = 0; | ||
| 1175 | virtual HRESULT STDMETHODCALLTYPE GetLibraryPDB( | ||
| 1176 | _In_ UINT32 uIndex, _COM_Outptr_ IDxcPdbUtils2 **ppOutPdbUtils, | ||
| 1177 | _COM_Outptr_opt_result_maybenull_ IDxcBlobWide **ppLibraryName) = 0; | ||
| 1178 | |||
| 1179 | virtual HRESULT STDMETHODCALLTYPE GetFlagCount(_Out_ UINT32 *pCount) = 0; | ||
| 1180 | virtual HRESULT STDMETHODCALLTYPE | ||
| 1181 | GetFlag(_In_ UINT32 uIndex, _COM_Outptr_ IDxcBlobWide **ppResult) = 0; | ||
| 1182 | |||
| 1183 | virtual HRESULT STDMETHODCALLTYPE GetArgCount(_Out_ UINT32 *pCount) = 0; | ||
| 1184 | virtual HRESULT STDMETHODCALLTYPE | ||
| 1185 | GetArg(_In_ UINT32 uIndex, _COM_Outptr_ IDxcBlobWide **ppResult) = 0; | ||
| 1186 | |||
| 1187 | virtual HRESULT STDMETHODCALLTYPE GetArgPairCount(_Out_ UINT32 *pCount) = 0; | ||
| 1188 | virtual HRESULT STDMETHODCALLTYPE GetArgPair( | ||
| 1189 | _In_ UINT32 uIndex, _COM_Outptr_result_maybenull_ IDxcBlobWide **ppName, | ||
| 1190 | _COM_Outptr_result_maybenull_ IDxcBlobWide **ppValue) = 0; | ||
| 1191 | |||
| 1192 | virtual HRESULT STDMETHODCALLTYPE GetDefineCount(_Out_ UINT32 *pCount) = 0; | ||
| 1193 | virtual HRESULT STDMETHODCALLTYPE | ||
| 1194 | GetDefine(_In_ UINT32 uIndex, _COM_Outptr_ IDxcBlobWide **ppResult) = 0; | ||
| 1195 | |||
| 1196 | virtual HRESULT STDMETHODCALLTYPE | ||
| 1197 | GetTargetProfile(_COM_Outptr_result_maybenull_ IDxcBlobWide **ppResult) = 0; | ||
| 1198 | virtual HRESULT STDMETHODCALLTYPE | ||
| 1199 | GetEntryPoint(_COM_Outptr_result_maybenull_ IDxcBlobWide **ppResult) = 0; | ||
| 1200 | virtual HRESULT STDMETHODCALLTYPE | ||
| 1201 | GetMainFileName(_COM_Outptr_result_maybenull_ IDxcBlobWide **ppResult) = 0; | ||
| 1202 | |||
| 1203 | virtual HRESULT STDMETHODCALLTYPE | ||
| 1204 | GetHash(_COM_Outptr_result_maybenull_ IDxcBlob **ppResult) = 0; | ||
| 1205 | virtual HRESULT STDMETHODCALLTYPE | ||
| 1206 | GetName(_COM_Outptr_result_maybenull_ IDxcBlobWide **ppResult) = 0; | ||
| 1207 | |||
| 1208 | virtual HRESULT STDMETHODCALLTYPE GetVersionInfo( | ||
| 1209 | _COM_Outptr_result_maybenull_ IDxcVersionInfo **ppVersionInfo) = 0; | ||
| 1210 | |||
| 1211 | virtual HRESULT STDMETHODCALLTYPE GetCustomToolchainID(_Out_ UINT32 *pID) = 0; | ||
| 1212 | virtual HRESULT STDMETHODCALLTYPE | ||
| 1213 | GetCustomToolchainData(_COM_Outptr_result_maybenull_ IDxcBlob **ppBlob) = 0; | ||
| 1214 | |||
| 1215 | virtual HRESULT STDMETHODCALLTYPE | ||
| 1216 | GetWholeDxil(_COM_Outptr_result_maybenull_ IDxcBlob **ppResult) = 0; | ||
| 1217 | |||
| 1218 | virtual BOOL STDMETHODCALLTYPE IsFullPDB() = 0; | ||
| 1219 | virtual BOOL STDMETHODCALLTYPE IsPDBRef() = 0; | ||
| 1220 | }; | ||
| 1221 | |||
| 1222 | // Note: __declspec(selectany) requires 'extern' | ||
| 1223 | // On Linux __declspec(selectany) is removed and using 'extern' results in link | ||
| 1224 | // error. | ||
| 1225 | #ifdef _MSC_VER | ||
| 1226 | #define CLSID_SCOPE __declspec(selectany) extern | ||
| 1227 | #else | ||
| 1228 | #define CLSID_SCOPE | ||
| 1229 | #endif | ||
| 1230 | |||
| 1231 | CLSID_SCOPE const CLSID CLSID_DxcCompiler = { | ||
| 1232 | 0x73e22d93, | ||
| 1233 | 0xe6ce, | ||
| 1234 | 0x47f3, | ||
| 1235 | {0xb5, 0xbf, 0xf0, 0x66, 0x4f, 0x39, 0xc1, 0xb0}}; | ||
| 1236 | |||
| 1237 | // {EF6A8087-B0EA-4D56-9E45-D07E1A8B7806} | ||
| 1238 | CLSID_SCOPE const GUID CLSID_DxcLinker = { | ||
| 1239 | 0xef6a8087, | ||
| 1240 | 0xb0ea, | ||
| 1241 | 0x4d56, | ||
| 1242 | {0x9e, 0x45, 0xd0, 0x7e, 0x1a, 0x8b, 0x78, 0x6}}; | ||
| 1243 | |||
| 1244 | // {CD1F6B73-2AB0-484D-8EDC-EBE7A43CA09F} | ||
| 1245 | CLSID_SCOPE const CLSID CLSID_DxcDiaDataSource = { | ||
| 1246 | 0xcd1f6b73, | ||
| 1247 | 0x2ab0, | ||
| 1248 | 0x484d, | ||
| 1249 | {0x8e, 0xdc, 0xeb, 0xe7, 0xa4, 0x3c, 0xa0, 0x9f}}; | ||
| 1250 | |||
| 1251 | // {3E56AE82-224D-470F-A1A1-FE3016EE9F9D} | ||
| 1252 | CLSID_SCOPE const CLSID CLSID_DxcCompilerArgs = { | ||
| 1253 | 0x3e56ae82, | ||
| 1254 | 0x224d, | ||
| 1255 | 0x470f, | ||
| 1256 | {0xa1, 0xa1, 0xfe, 0x30, 0x16, 0xee, 0x9f, 0x9d}}; | ||
| 1257 | |||
| 1258 | // {6245D6AF-66E0-48FD-80B4-4D271796748C} | ||
| 1259 | CLSID_SCOPE const GUID CLSID_DxcLibrary = { | ||
| 1260 | 0x6245d6af, | ||
| 1261 | 0x66e0, | ||
| 1262 | 0x48fd, | ||
| 1263 | {0x80, 0xb4, 0x4d, 0x27, 0x17, 0x96, 0x74, 0x8c}}; | ||
| 1264 | |||
| 1265 | CLSID_SCOPE const GUID CLSID_DxcUtils = CLSID_DxcLibrary; | ||
| 1266 | |||
| 1267 | // {8CA3E215-F728-4CF3-8CDD-88AF917587A1} | ||
| 1268 | CLSID_SCOPE const GUID CLSID_DxcValidator = { | ||
| 1269 | 0x8ca3e215, | ||
| 1270 | 0xf728, | ||
| 1271 | 0x4cf3, | ||
| 1272 | {0x8c, 0xdd, 0x88, 0xaf, 0x91, 0x75, 0x87, 0xa1}}; | ||
| 1273 | |||
| 1274 | // {D728DB68-F903-4F80-94CD-DCCF76EC7151} | ||
| 1275 | CLSID_SCOPE const GUID CLSID_DxcAssembler = { | ||
| 1276 | 0xd728db68, | ||
| 1277 | 0xf903, | ||
| 1278 | 0x4f80, | ||
| 1279 | {0x94, 0xcd, 0xdc, 0xcf, 0x76, 0xec, 0x71, 0x51}}; | ||
| 1280 | |||
| 1281 | // {b9f54489-55b8-400c-ba3a-1675e4728b91} | ||
| 1282 | CLSID_SCOPE const GUID CLSID_DxcContainerReflection = { | ||
| 1283 | 0xb9f54489, | ||
| 1284 | 0x55b8, | ||
| 1285 | 0x400c, | ||
| 1286 | {0xba, 0x3a, 0x16, 0x75, 0xe4, 0x72, 0x8b, 0x91}}; | ||
| 1287 | |||
| 1288 | // {AE2CD79F-CC22-453F-9B6B-B124E7A5204C} | ||
| 1289 | CLSID_SCOPE const GUID CLSID_DxcOptimizer = { | ||
| 1290 | 0xae2cd79f, | ||
| 1291 | 0xcc22, | ||
| 1292 | 0x453f, | ||
| 1293 | {0x9b, 0x6b, 0xb1, 0x24, 0xe7, 0xa5, 0x20, 0x4c}}; | ||
| 1294 | |||
| 1295 | // {94134294-411f-4574-b4d0-8741e25240d2} | ||
| 1296 | CLSID_SCOPE const GUID CLSID_DxcContainerBuilder = { | ||
| 1297 | 0x94134294, | ||
| 1298 | 0x411f, | ||
| 1299 | 0x4574, | ||
| 1300 | {0xb4, 0xd0, 0x87, 0x41, 0xe2, 0x52, 0x40, 0xd2}}; | ||
| 1301 | |||
| 1302 | // {54621dfb-f2ce-457e-ae8c-ec355faeec7c} | ||
| 1303 | CLSID_SCOPE const GUID CLSID_DxcPdbUtils = { | ||
| 1304 | 0x54621dfb, | ||
| 1305 | 0xf2ce, | ||
| 1306 | 0x457e, | ||
| 1307 | {0xae, 0x8c, 0xec, 0x35, 0x5f, 0xae, 0xec, 0x7c}}; | ||
| 1308 | |||
| 1309 | #endif | ||
diff --git a/contrib/dxc_2025_07_14/inc/dxcerrors.h b/contrib/dxc_2025_07_14/inc/dxcerrors.h new file mode 100644 index 0000000..ce50b83 --- /dev/null +++ b/contrib/dxc_2025_07_14/inc/dxcerrors.h | |||
| @@ -0,0 +1,30 @@ | |||
| 1 | /////////////////////////////////////////////////////////////////////////////// | ||
| 2 | // // | ||
| 3 | // dxcerror.h // | ||
| 4 | // Copyright (C) Microsoft Corporation. All rights reserved. // | ||
| 5 | // This file is distributed under the University of Illinois Open Source // | ||
| 6 | // License. See LICENSE.TXT for details. // | ||
| 7 | // // | ||
| 8 | // Provides definition of error codes. // | ||
| 9 | // // | ||
| 10 | /////////////////////////////////////////////////////////////////////////////// | ||
| 11 | |||
| 12 | #ifndef __DXC_ERRORS__ | ||
| 13 | #define __DXC_ERRORS__ | ||
| 14 | |||
| 15 | #ifndef FACILITY_GRAPHICS | ||
| 16 | #define FACILITY_GRAPHICS 36 | ||
| 17 | #endif | ||
| 18 | |||
| 19 | #define DXC_EXCEPTION_CODE(name, status) \ | ||
| 20 | static constexpr DWORD EXCEPTION_##name = \ | ||
| 21 | (0xc0000000u | (FACILITY_GRAPHICS << 16) | \ | ||
| 22 | (0xff00u | (status & 0xffu))); | ||
| 23 | |||
| 24 | DXC_EXCEPTION_CODE(LOAD_LIBRARY_FAILED, 0x00u) | ||
| 25 | DXC_EXCEPTION_CODE(NO_HMODULE, 0x01u) | ||
| 26 | DXC_EXCEPTION_CODE(GET_PROC_FAILED, 0x02u) | ||
| 27 | |||
| 28 | #undef DXC_EXCEPTION_CODE | ||
| 29 | |||
| 30 | #endif | ||
diff --git a/contrib/dxc_2025_07_14/inc/dxcisense.h b/contrib/dxc_2025_07_14/inc/dxcisense.h new file mode 100644 index 0000000..661de16 --- /dev/null +++ b/contrib/dxc_2025_07_14/inc/dxcisense.h | |||
| @@ -0,0 +1,959 @@ | |||
| 1 | /////////////////////////////////////////////////////////////////////////////// | ||
| 2 | // // | ||
| 3 | // dxcisense.h // | ||
| 4 | // Copyright (C) Microsoft Corporation. All rights reserved. // | ||
| 5 | // This file is distributed under the University of Illinois Open Source // | ||
| 6 | // License. See LICENSE.TXT for details. // | ||
| 7 | // // | ||
| 8 | // Provides declarations for the DirectX Compiler IntelliSense component. // | ||
| 9 | // // | ||
| 10 | /////////////////////////////////////////////////////////////////////////////// | ||
| 11 | |||
| 12 | #ifndef __DXC_ISENSE__ | ||
| 13 | #define __DXC_ISENSE__ | ||
| 14 | |||
| 15 | #include "dxcapi.h" | ||
| 16 | #ifndef _WIN32 | ||
| 17 | #include "WinAdapter.h" | ||
| 18 | #endif | ||
| 19 | |||
| 20 | typedef enum DxcGlobalOptions { | ||
| 21 | DxcGlobalOpt_None = 0x0, | ||
| 22 | DxcGlobalOpt_ThreadBackgroundPriorityForIndexing = 0x1, | ||
| 23 | DxcGlobalOpt_ThreadBackgroundPriorityForEditing = 0x2, | ||
| 24 | DxcGlobalOpt_ThreadBackgroundPriorityForAll = | ||
| 25 | DxcGlobalOpt_ThreadBackgroundPriorityForIndexing | | ||
| 26 | DxcGlobalOpt_ThreadBackgroundPriorityForEditing | ||
| 27 | } DxcGlobalOptions; | ||
| 28 | |||
| 29 | typedef enum DxcTokenKind { | ||
| 30 | DxcTokenKind_Punctuation = | ||
| 31 | 0, // A token that contains some kind of punctuation. | ||
| 32 | DxcTokenKind_Keyword = 1, // A language keyword. | ||
| 33 | DxcTokenKind_Identifier = 2, // An identifier (that is not a keyword). | ||
| 34 | DxcTokenKind_Literal = 3, // A numeric, string, or character literal. | ||
| 35 | DxcTokenKind_Comment = 4, // A comment. | ||
| 36 | DxcTokenKind_Unknown = | ||
| 37 | 5, // An unknown token (possibly known to a future version). | ||
| 38 | DxcTokenKind_BuiltInType = 6, // A built-in type like int, void or float3. | ||
| 39 | } DxcTokenKind; | ||
| 40 | |||
| 41 | typedef enum DxcTypeKind { | ||
| 42 | DxcTypeKind_Invalid = | ||
| 43 | 0, // Reprents an invalid type (e.g., where no type is available). | ||
| 44 | DxcTypeKind_Unexposed = | ||
| 45 | 1, // A type whose specific kind is not exposed via this interface. | ||
| 46 | // Builtin types | ||
| 47 | DxcTypeKind_Void = 2, | ||
| 48 | DxcTypeKind_Bool = 3, | ||
| 49 | DxcTypeKind_Char_U = 4, | ||
| 50 | DxcTypeKind_UChar = 5, | ||
| 51 | DxcTypeKind_Char16 = 6, | ||
| 52 | DxcTypeKind_Char32 = 7, | ||
| 53 | DxcTypeKind_UShort = 8, | ||
| 54 | DxcTypeKind_UInt = 9, | ||
| 55 | DxcTypeKind_ULong = 10, | ||
| 56 | DxcTypeKind_ULongLong = 11, | ||
| 57 | DxcTypeKind_UInt128 = 12, | ||
| 58 | DxcTypeKind_Char_S = 13, | ||
| 59 | DxcTypeKind_SChar = 14, | ||
| 60 | DxcTypeKind_WChar = 15, | ||
| 61 | DxcTypeKind_Short = 16, | ||
| 62 | DxcTypeKind_Int = 17, | ||
| 63 | DxcTypeKind_Long = 18, | ||
| 64 | DxcTypeKind_LongLong = 19, | ||
| 65 | DxcTypeKind_Int128 = 20, | ||
| 66 | DxcTypeKind_Float = 21, | ||
| 67 | DxcTypeKind_Double = 22, | ||
| 68 | DxcTypeKind_LongDouble = 23, | ||
| 69 | DxcTypeKind_NullPtr = 24, | ||
| 70 | DxcTypeKind_Overload = 25, | ||
| 71 | DxcTypeKind_Dependent = 26, | ||
| 72 | DxcTypeKind_ObjCId = 27, | ||
| 73 | DxcTypeKind_ObjCClass = 28, | ||
| 74 | DxcTypeKind_ObjCSel = 29, | ||
| 75 | DxcTypeKind_FirstBuiltin = DxcTypeKind_Void, | ||
| 76 | DxcTypeKind_LastBuiltin = DxcTypeKind_ObjCSel, | ||
| 77 | |||
| 78 | DxcTypeKind_Complex = 100, | ||
| 79 | DxcTypeKind_Pointer = 101, | ||
| 80 | DxcTypeKind_BlockPointer = 102, | ||
| 81 | DxcTypeKind_LValueReference = 103, | ||
| 82 | DxcTypeKind_RValueReference = 104, | ||
| 83 | DxcTypeKind_Record = 105, | ||
| 84 | DxcTypeKind_Enum = 106, | ||
| 85 | DxcTypeKind_Typedef = 107, | ||
| 86 | DxcTypeKind_ObjCInterface = 108, | ||
| 87 | DxcTypeKind_ObjCObjectPointer = 109, | ||
| 88 | DxcTypeKind_FunctionNoProto = 110, | ||
| 89 | DxcTypeKind_FunctionProto = 111, | ||
| 90 | DxcTypeKind_ConstantArray = 112, | ||
| 91 | DxcTypeKind_Vector = 113, | ||
| 92 | DxcTypeKind_IncompleteArray = 114, | ||
| 93 | DxcTypeKind_VariableArray = 115, | ||
| 94 | DxcTypeKind_DependentSizedArray = 116, | ||
| 95 | DxcTypeKind_MemberPointer = 117 | ||
| 96 | } DxcTypeKind; | ||
| 97 | |||
| 98 | // Describes the severity of a particular diagnostic. | ||
| 99 | typedef enum DxcDiagnosticSeverity { | ||
| 100 | // A diagnostic that has been suppressed, e.g., by a command-line option. | ||
| 101 | DxcDiagnostic_Ignored = 0, | ||
| 102 | |||
| 103 | // This diagnostic is a note that should be attached to the previous | ||
| 104 | // (non-note) diagnostic. | ||
| 105 | DxcDiagnostic_Note = 1, | ||
| 106 | |||
| 107 | // This diagnostic indicates suspicious code that may not be wrong. | ||
| 108 | DxcDiagnostic_Warning = 2, | ||
| 109 | |||
| 110 | // This diagnostic indicates that the code is ill-formed. | ||
| 111 | DxcDiagnostic_Error = 3, | ||
| 112 | |||
| 113 | // This diagnostic indicates that the code is ill-formed such that future | ||
| 114 | // parser rec unlikely to produce useful results. | ||
| 115 | DxcDiagnostic_Fatal = 4 | ||
| 116 | |||
| 117 | } DxcDiagnosticSeverity; | ||
| 118 | |||
| 119 | // Options to control the display of diagnostics. | ||
| 120 | typedef enum DxcDiagnosticDisplayOptions { | ||
| 121 | // Display the source-location information where the diagnostic was located. | ||
| 122 | DxcDiagnostic_DisplaySourceLocation = 0x01, | ||
| 123 | |||
| 124 | // If displaying the source-location information of the diagnostic, | ||
| 125 | // also include the column number. | ||
| 126 | DxcDiagnostic_DisplayColumn = 0x02, | ||
| 127 | |||
| 128 | // If displaying the source-location information of the diagnostic, | ||
| 129 | // also include information about source ranges in a machine-parsable format. | ||
| 130 | DxcDiagnostic_DisplaySourceRanges = 0x04, | ||
| 131 | |||
| 132 | // Display the option name associated with this diagnostic, if any. | ||
| 133 | DxcDiagnostic_DisplayOption = 0x08, | ||
| 134 | |||
| 135 | // Display the category number associated with this diagnostic, if any. | ||
| 136 | DxcDiagnostic_DisplayCategoryId = 0x10, | ||
| 137 | |||
| 138 | // Display the category name associated with this diagnostic, if any. | ||
| 139 | DxcDiagnostic_DisplayCategoryName = 0x20, | ||
| 140 | |||
| 141 | // Display the severity of the diagnostic message. | ||
| 142 | DxcDiagnostic_DisplaySeverity = 0x200 | ||
| 143 | } DxcDiagnosticDisplayOptions; | ||
| 144 | |||
| 145 | typedef enum DxcTranslationUnitFlags { | ||
| 146 | // Used to indicate that no special translation-unit options are needed. | ||
| 147 | DxcTranslationUnitFlags_None = 0x0, | ||
| 148 | |||
| 149 | // Used to indicate that the parser should construct a "detailed" | ||
| 150 | // preprocessing record, including all macro definitions and instantiations. | ||
| 151 | DxcTranslationUnitFlags_DetailedPreprocessingRecord = 0x01, | ||
| 152 | |||
| 153 | // Used to indicate that the translation unit is incomplete. | ||
| 154 | DxcTranslationUnitFlags_Incomplete = 0x02, | ||
| 155 | |||
| 156 | // Used to indicate that the translation unit should be built with an | ||
| 157 | // implicit precompiled header for the preamble. | ||
| 158 | DxcTranslationUnitFlags_PrecompiledPreamble = 0x04, | ||
| 159 | |||
| 160 | // Used to indicate that the translation unit should cache some | ||
| 161 | // code-completion results with each reparse of the source file. | ||
| 162 | DxcTranslationUnitFlags_CacheCompletionResults = 0x08, | ||
| 163 | |||
| 164 | // Used to indicate that the translation unit will be serialized with | ||
| 165 | // SaveTranslationUnit. | ||
| 166 | DxcTranslationUnitFlags_ForSerialization = 0x10, | ||
| 167 | |||
| 168 | // DEPRECATED | ||
| 169 | DxcTranslationUnitFlags_CXXChainedPCH = 0x20, | ||
| 170 | |||
| 171 | // Used to indicate that function/method bodies should be skipped while | ||
| 172 | // parsing. | ||
| 173 | DxcTranslationUnitFlags_SkipFunctionBodies = 0x40, | ||
| 174 | |||
| 175 | // Used to indicate that brief documentation comments should be | ||
| 176 | // included into the set of code completions returned from this translation | ||
| 177 | // unit. | ||
| 178 | DxcTranslationUnitFlags_IncludeBriefCommentsInCodeCompletion = 0x80, | ||
| 179 | |||
| 180 | // Used to indicate that compilation should occur on the caller's thread. | ||
| 181 | DxcTranslationUnitFlags_UseCallerThread = 0x800 | ||
| 182 | } DxcTranslationUnitFlags; | ||
| 183 | |||
| 184 | typedef enum DxcCursorFormatting { | ||
| 185 | DxcCursorFormatting_Default = | ||
| 186 | 0x0, // Default rules, language-insensitive formatting. | ||
| 187 | DxcCursorFormatting_UseLanguageOptions = | ||
| 188 | 0x1, // Language-sensitive formatting. | ||
| 189 | DxcCursorFormatting_SuppressSpecifiers = 0x2, // Supresses type specifiers. | ||
| 190 | DxcCursorFormatting_SuppressTagKeyword = | ||
| 191 | 0x4, // Suppressed tag keyword (eg, 'class'). | ||
| 192 | DxcCursorFormatting_IncludeNamespaceKeyword = | ||
| 193 | 0x8, // Include namespace keyword. | ||
| 194 | } DxcCursorFormatting; | ||
| 195 | |||
| 196 | enum DxcCursorKind { | ||
| 197 | /* Declarations */ | ||
| 198 | DxcCursor_UnexposedDecl = | ||
| 199 | 1, // A declaration whose specific kind is not exposed via this interface. | ||
| 200 | DxcCursor_StructDecl = 2, // A C or C++ struct. | ||
| 201 | DxcCursor_UnionDecl = 3, // A C or C++ union. | ||
| 202 | DxcCursor_ClassDecl = 4, // A C++ class. | ||
| 203 | DxcCursor_EnumDecl = 5, // An enumeration. | ||
| 204 | DxcCursor_FieldDecl = 6, // A field (in C) or non-static data member (in C++) | ||
| 205 | // in a struct, union, or C++ class. | ||
| 206 | DxcCursor_EnumConstantDecl = 7, // An enumerator constant. | ||
| 207 | DxcCursor_FunctionDecl = 8, // A function. | ||
| 208 | DxcCursor_VarDecl = 9, // A variable. | ||
| 209 | DxcCursor_ParmDecl = 10, // A function or method parameter. | ||
| 210 | DxcCursor_ObjCInterfaceDecl = 11, // An Objective-C interface. | ||
| 211 | DxcCursor_ObjCCategoryDecl = 12, // An Objective-C interface for a category. | ||
| 212 | DxcCursor_ObjCProtocolDecl = 13, // An Objective-C protocol declaration. | ||
| 213 | DxcCursor_ObjCPropertyDecl = 14, // An Objective-C property declaration. | ||
| 214 | DxcCursor_ObjCIvarDecl = 15, // An Objective-C instance variable. | ||
| 215 | DxcCursor_ObjCInstanceMethodDecl = 16, // An Objective-C instance method. | ||
| 216 | DxcCursor_ObjCClassMethodDecl = 17, // An Objective-C class method. | ||
| 217 | DxcCursor_ObjCImplementationDecl = 18, // An Objective-C \@implementation. | ||
| 218 | DxcCursor_ObjCCategoryImplDecl = | ||
| 219 | 19, // An Objective-C \@implementation for a category. | ||
| 220 | DxcCursor_TypedefDecl = 20, // A typedef | ||
| 221 | DxcCursor_CXXMethod = 21, // A C++ class method. | ||
| 222 | DxcCursor_Namespace = 22, // A C++ namespace. | ||
| 223 | DxcCursor_LinkageSpec = 23, // A linkage specification, e.g. 'extern "C"'. | ||
| 224 | DxcCursor_Constructor = 24, // A C++ constructor. | ||
| 225 | DxcCursor_Destructor = 25, // A C++ destructor. | ||
| 226 | DxcCursor_ConversionFunction = 26, // A C++ conversion function. | ||
| 227 | DxcCursor_TemplateTypeParameter = 27, // A C++ template type parameter. | ||
| 228 | DxcCursor_NonTypeTemplateParameter = 28, // A C++ non-type template parameter. | ||
| 229 | DxcCursor_TemplateTemplateParameter = | ||
| 230 | 29, // A C++ template template parameter. | ||
| 231 | DxcCursor_FunctionTemplate = 30, // A C++ function template. | ||
| 232 | DxcCursor_ClassTemplate = 31, // A C++ class template. | ||
| 233 | DxcCursor_ClassTemplatePartialSpecialization = | ||
| 234 | 32, // A C++ class template partial specialization. | ||
| 235 | DxcCursor_NamespaceAlias = 33, // A C++ namespace alias declaration. | ||
| 236 | DxcCursor_UsingDirective = 34, // A C++ using directive. | ||
| 237 | DxcCursor_UsingDeclaration = 35, // A C++ using declaration. | ||
| 238 | DxcCursor_TypeAliasDecl = 36, // A C++ alias declaration | ||
| 239 | DxcCursor_ObjCSynthesizeDecl = 37, // An Objective-C \@synthesize definition. | ||
| 240 | DxcCursor_ObjCDynamicDecl = 38, // An Objective-C \@dynamic definition. | ||
| 241 | DxcCursor_CXXAccessSpecifier = 39, // An access specifier. | ||
| 242 | |||
| 243 | DxcCursor_FirstDecl = DxcCursor_UnexposedDecl, | ||
| 244 | DxcCursor_LastDecl = DxcCursor_CXXAccessSpecifier, | ||
| 245 | |||
| 246 | /* References */ | ||
| 247 | DxcCursor_FirstRef = 40, /* Decl references */ | ||
| 248 | DxcCursor_ObjCSuperClassRef = 40, | ||
| 249 | DxcCursor_ObjCProtocolRef = 41, | ||
| 250 | DxcCursor_ObjCClassRef = 42, | ||
| 251 | /** | ||
| 252 | * \brief A reference to a type declaration. | ||
| 253 | * | ||
| 254 | * A type reference occurs anywhere where a type is named but not | ||
| 255 | * declared. For example, given: | ||
| 256 | * | ||
| 257 | * \code | ||
| 258 | * typedef unsigned size_type; | ||
| 259 | * size_type size; | ||
| 260 | * \endcode | ||
| 261 | * | ||
| 262 | * The typedef is a declaration of size_type (DxcCursor_TypedefDecl), | ||
| 263 | * while the type of the variable "size" is referenced. The cursor | ||
| 264 | * referenced by the type of size is the typedef for size_type. | ||
| 265 | */ | ||
| 266 | DxcCursor_TypeRef = 43, // A reference to a type declaration. | ||
| 267 | DxcCursor_CXXBaseSpecifier = 44, | ||
| 268 | DxcCursor_TemplateRef = | ||
| 269 | 45, // A reference to a class template, function template, template | ||
| 270 | // template parameter, or class template partial specialization. | ||
| 271 | DxcCursor_NamespaceRef = 46, // A reference to a namespace or namespace alias. | ||
| 272 | DxcCursor_MemberRef = | ||
| 273 | 47, // A reference to a member of a struct, union, or class that occurs in | ||
| 274 | // some non-expression context, e.g., a designated initializer. | ||
| 275 | /** | ||
| 276 | * \brief A reference to a labeled statement. | ||
| 277 | * | ||
| 278 | * This cursor kind is used to describe the jump to "start_over" in the | ||
| 279 | * goto statement in the following example: | ||
| 280 | * | ||
| 281 | * \code | ||
| 282 | * start_over: | ||
| 283 | * ++counter; | ||
| 284 | * | ||
| 285 | * goto start_over; | ||
| 286 | * \endcode | ||
| 287 | * | ||
| 288 | * A label reference cursor refers to a label statement. | ||
| 289 | */ | ||
| 290 | DxcCursor_LabelRef = 48, // A reference to a labeled statement. | ||
| 291 | |||
| 292 | // A reference to a set of overloaded functions or function templates | ||
| 293 | // that has not yet been resolved to a specific function or function template. | ||
| 294 | // | ||
| 295 | // An overloaded declaration reference cursor occurs in C++ templates where | ||
| 296 | // a dependent name refers to a function. | ||
| 297 | DxcCursor_OverloadedDeclRef = 49, | ||
| 298 | DxcCursor_VariableRef = | ||
| 299 | 50, // A reference to a variable that occurs in some non-expression | ||
| 300 | // context, e.g., a C++ lambda capture list. | ||
| 301 | |||
| 302 | DxcCursor_LastRef = DxcCursor_VariableRef, | ||
| 303 | |||
| 304 | /* Error conditions */ | ||
| 305 | DxcCursor_FirstInvalid = 70, | ||
| 306 | DxcCursor_InvalidFile = 70, | ||
| 307 | DxcCursor_NoDeclFound = 71, | ||
| 308 | DxcCursor_NotImplemented = 72, | ||
| 309 | DxcCursor_InvalidCode = 73, | ||
| 310 | DxcCursor_LastInvalid = DxcCursor_InvalidCode, | ||
| 311 | |||
| 312 | /* Expressions */ | ||
| 313 | DxcCursor_FirstExpr = 100, | ||
| 314 | |||
| 315 | /** | ||
| 316 | * \brief An expression whose specific kind is not exposed via this | ||
| 317 | * interface. | ||
| 318 | * | ||
| 319 | * Unexposed expressions have the same operations as any other kind | ||
| 320 | * of expression; one can extract their location information, | ||
| 321 | * spelling, children, etc. However, the specific kind of the | ||
| 322 | * expression is not reported. | ||
| 323 | */ | ||
| 324 | DxcCursor_UnexposedExpr = 100, // An expression whose specific kind is not | ||
| 325 | // exposed via this interface. | ||
| 326 | DxcCursor_DeclRefExpr = | ||
| 327 | 101, // An expression that refers to some value declaration, such as a | ||
| 328 | // function, varible, or enumerator. | ||
| 329 | DxcCursor_MemberRefExpr = | ||
| 330 | 102, // An expression that refers to a member of a struct, union, class, | ||
| 331 | // Objective-C class, etc. | ||
| 332 | DxcCursor_CallExpr = 103, // An expression that calls a function. | ||
| 333 | DxcCursor_ObjCMessageExpr = 104, // An expression that sends a message to an | ||
| 334 | // Objective-C object or class. | ||
| 335 | DxcCursor_BlockExpr = 105, // An expression that represents a block literal. | ||
| 336 | DxcCursor_IntegerLiteral = 106, // An integer literal. | ||
| 337 | DxcCursor_FloatingLiteral = 107, // A floating point number literal. | ||
| 338 | DxcCursor_ImaginaryLiteral = 108, // An imaginary number literal. | ||
| 339 | DxcCursor_StringLiteral = 109, // A string literal. | ||
| 340 | DxcCursor_CharacterLiteral = 110, // A character literal. | ||
| 341 | DxcCursor_ParenExpr = | ||
| 342 | 111, // A parenthesized expression, e.g. "(1)". This AST node is only | ||
| 343 | // formed if full location information is requested. | ||
| 344 | DxcCursor_UnaryOperator = 112, // This represents the unary-expression's | ||
| 345 | // (except sizeof and alignof). | ||
| 346 | DxcCursor_ArraySubscriptExpr = 113, // [C99 6.5.2.1] Array Subscripting. | ||
| 347 | DxcCursor_BinaryOperator = | ||
| 348 | 114, // A builtin binary operation expression such as "x + y" or "x <= y". | ||
| 349 | DxcCursor_CompoundAssignOperator = 115, // Compound assignment such as "+=". | ||
| 350 | DxcCursor_ConditionalOperator = 116, // The ?: ternary operator. | ||
| 351 | DxcCursor_CStyleCastExpr = | ||
| 352 | 117, // An explicit cast in C (C99 6.5.4) or a C-style cast in C++ (C++ | ||
| 353 | // [expr.cast]), which uses the syntax (Type)expr, eg: (int)f. | ||
| 354 | DxcCursor_CompoundLiteralExpr = 118, // [C99 6.5.2.5] | ||
| 355 | DxcCursor_InitListExpr = 119, // Describes an C or C++ initializer list. | ||
| 356 | DxcCursor_AddrLabelExpr = | ||
| 357 | 120, // The GNU address of label extension, representing &&label. | ||
| 358 | DxcCursor_StmtExpr = | ||
| 359 | 121, // This is the GNU Statement Expression extension: ({int X=4; X;}) | ||
| 360 | DxcCursor_GenericSelectionExpr = 122, // Represents a C11 generic selection. | ||
| 361 | |||
| 362 | /** \brief Implements the GNU __null extension, which is a name for a null | ||
| 363 | * pointer constant that has integral type (e.g., int or long) and is the same | ||
| 364 | * size and alignment as a pointer. | ||
| 365 | * | ||
| 366 | * The __null extension is typically only used by system headers, which define | ||
| 367 | * NULL as __null in C++ rather than using 0 (which is an integer that may not | ||
| 368 | * match the size of a pointer). | ||
| 369 | */ | ||
| 370 | DxcCursor_GNUNullExpr = 123, | ||
| 371 | DxcCursor_CXXStaticCastExpr = 124, // C++'s static_cast<> expression. | ||
| 372 | DxcCursor_CXXDynamicCastExpr = 125, // C++'s dynamic_cast<> expression. | ||
| 373 | DxcCursor_CXXReinterpretCastExpr = | ||
| 374 | 126, // C++'s reinterpret_cast<> expression. | ||
| 375 | DxcCursor_CXXConstCastExpr = 127, // C++'s const_cast<> expression. | ||
| 376 | |||
| 377 | /** \brief Represents an explicit C++ type conversion that uses "functional" | ||
| 378 | * notion (C++ [expr.type.conv]). | ||
| 379 | * | ||
| 380 | * Example: | ||
| 381 | * \code | ||
| 382 | * x = int(0.5); | ||
| 383 | * \endcode | ||
| 384 | */ | ||
| 385 | DxcCursor_CXXFunctionalCastExpr = 128, | ||
| 386 | DxcCursor_CXXTypeidExpr = 129, // A C++ typeid expression (C++ [expr.typeid]). | ||
| 387 | DxcCursor_CXXBoolLiteralExpr = 130, // [C++ 2.13.5] C++ Boolean Literal. | ||
| 388 | DxcCursor_CXXNullPtrLiteralExpr = 131, // [C++0x 2.14.7] C++ Pointer Literal. | ||
| 389 | DxcCursor_CXXThisExpr = 132, // Represents the "this" expression in C++ | ||
| 390 | DxcCursor_CXXThrowExpr = 133, // [C++ 15] C++ Throw Expression, both 'throw' | ||
| 391 | // and 'throw' assignment-expression. | ||
| 392 | DxcCursor_CXXNewExpr = 134, // A new expression for memory allocation and | ||
| 393 | // constructor calls, e.g: "new CXXNewExpr(foo)". | ||
| 394 | DxcCursor_CXXDeleteExpr = | ||
| 395 | 135, // A delete expression for memory deallocation and destructor calls, | ||
| 396 | // e.g. "delete[] pArray". | ||
| 397 | DxcCursor_UnaryExpr = 136, // A unary expression. | ||
| 398 | DxcCursor_ObjCStringLiteral = | ||
| 399 | 137, // An Objective-C string literal i.e. @"foo". | ||
| 400 | DxcCursor_ObjCEncodeExpr = 138, // An Objective-C \@encode expression. | ||
| 401 | DxcCursor_ObjCSelectorExpr = 139, // An Objective-C \@selector expression. | ||
| 402 | DxcCursor_ObjCProtocolExpr = 140, // An Objective-C \@protocol expression. | ||
| 403 | |||
| 404 | /** \brief An Objective-C "bridged" cast expression, which casts between | ||
| 405 | * Objective-C pointers and C pointers, transferring ownership in the process. | ||
| 406 | * | ||
| 407 | * \code | ||
| 408 | * NSString *str = (__bridge_transfer NSString *)CFCreateString(); | ||
| 409 | * \endcode | ||
| 410 | */ | ||
| 411 | DxcCursor_ObjCBridgedCastExpr = 141, | ||
| 412 | |||
| 413 | /** \brief Represents a C++0x pack expansion that produces a sequence of | ||
| 414 | * expressions. | ||
| 415 | * | ||
| 416 | * A pack expansion expression contains a pattern (which itself is an | ||
| 417 | * expression) followed by an ellipsis. For example: | ||
| 418 | * | ||
| 419 | * \code | ||
| 420 | * template<typename F, typename ...Types> | ||
| 421 | * void forward(F f, Types &&...args) { | ||
| 422 | * f(static_cast<Types&&>(args)...); | ||
| 423 | * } | ||
| 424 | * \endcode | ||
| 425 | */ | ||
| 426 | DxcCursor_PackExpansionExpr = 142, | ||
| 427 | |||
| 428 | /** \brief Represents an expression that computes the length of a parameter | ||
| 429 | * pack. | ||
| 430 | * | ||
| 431 | * \code | ||
| 432 | * template<typename ...Types> | ||
| 433 | * struct count { | ||
| 434 | * static const unsigned value = sizeof...(Types); | ||
| 435 | * }; | ||
| 436 | * \endcode | ||
| 437 | */ | ||
| 438 | DxcCursor_SizeOfPackExpr = 143, | ||
| 439 | |||
| 440 | /* \brief Represents a C++ lambda expression that produces a local function | ||
| 441 | * object. | ||
| 442 | * | ||
| 443 | * \code | ||
| 444 | * void abssort(float *x, unsigned N) { | ||
| 445 | * std::sort(x, x + N, | ||
| 446 | * [](float a, float b) { | ||
| 447 | * return std::abs(a) < std::abs(b); | ||
| 448 | * }); | ||
| 449 | * } | ||
| 450 | * \endcode | ||
| 451 | */ | ||
| 452 | DxcCursor_LambdaExpr = 144, | ||
| 453 | DxcCursor_ObjCBoolLiteralExpr = 145, // Objective-c Boolean Literal. | ||
| 454 | DxcCursor_ObjCSelfExpr = | ||
| 455 | 146, // Represents the "self" expression in a ObjC method. | ||
| 456 | DxcCursor_LastExpr = DxcCursor_ObjCSelfExpr, | ||
| 457 | |||
| 458 | /* Statements */ | ||
| 459 | DxcCursor_FirstStmt = 200, | ||
| 460 | /** | ||
| 461 | * \brief A statement whose specific kind is not exposed via this | ||
| 462 | * interface. | ||
| 463 | * | ||
| 464 | * Unexposed statements have the same operations as any other kind of | ||
| 465 | * statement; one can extract their location information, spelling, | ||
| 466 | * children, etc. However, the specific kind of the statement is not | ||
| 467 | * reported. | ||
| 468 | */ | ||
| 469 | DxcCursor_UnexposedStmt = 200, | ||
| 470 | |||
| 471 | /** \brief A labelled statement in a function. | ||
| 472 | * | ||
| 473 | * This cursor kind is used to describe the "start_over:" label statement in | ||
| 474 | * the following example: | ||
| 475 | * | ||
| 476 | * \code | ||
| 477 | * start_over: | ||
| 478 | * ++counter; | ||
| 479 | * \endcode | ||
| 480 | * | ||
| 481 | */ | ||
| 482 | DxcCursor_LabelStmt = 201, | ||
| 483 | DxcCursor_CompoundStmt = | ||
| 484 | 202, // A group of statements like { stmt stmt }. This cursor kind is used | ||
| 485 | // to describe compound statements, e.g. function bodies. | ||
| 486 | DxcCursor_CaseStmt = 203, // A case statement. | ||
| 487 | DxcCursor_DefaultStmt = 204, // A default statement. | ||
| 488 | DxcCursor_IfStmt = 205, // An if statement | ||
| 489 | DxcCursor_SwitchStmt = 206, // A switch statement. | ||
| 490 | DxcCursor_WhileStmt = 207, // A while statement. | ||
| 491 | DxcCursor_DoStmt = 208, // A do statement. | ||
| 492 | DxcCursor_ForStmt = 209, // A for statement. | ||
| 493 | DxcCursor_GotoStmt = 210, // A goto statement. | ||
| 494 | DxcCursor_IndirectGotoStmt = 211, // An indirect goto statement. | ||
| 495 | DxcCursor_ContinueStmt = 212, // A continue statement. | ||
| 496 | DxcCursor_BreakStmt = 213, // A break statement. | ||
| 497 | DxcCursor_ReturnStmt = 214, // A return statement. | ||
| 498 | DxcCursor_GCCAsmStmt = 215, // A GCC inline assembly statement extension. | ||
| 499 | DxcCursor_AsmStmt = DxcCursor_GCCAsmStmt, | ||
| 500 | |||
| 501 | DxcCursor_ObjCAtTryStmt = | ||
| 502 | 216, // Objective-C's overall \@try-\@catch-\@finally statement. | ||
| 503 | DxcCursor_ObjCAtCatchStmt = 217, // Objective-C's \@catch statement. | ||
| 504 | DxcCursor_ObjCAtFinallyStmt = 218, // Objective-C's \@finally statement. | ||
| 505 | DxcCursor_ObjCAtThrowStmt = 219, // Objective-C's \@throw statement. | ||
| 506 | DxcCursor_ObjCAtSynchronizedStmt = | ||
| 507 | 220, // Objective-C's \@synchronized statement. | ||
| 508 | DxcCursor_ObjCAutoreleasePoolStmt = | ||
| 509 | 221, // Objective-C's autorelease pool statement. | ||
| 510 | DxcCursor_ObjCForCollectionStmt = 222, // Objective-C's collection statement. | ||
| 511 | |||
| 512 | DxcCursor_CXXCatchStmt = 223, // C++'s catch statement. | ||
| 513 | DxcCursor_CXXTryStmt = 224, // C++'s try statement. | ||
| 514 | DxcCursor_CXXForRangeStmt = 225, // C++'s for (* : *) statement. | ||
| 515 | |||
| 516 | DxcCursor_SEHTryStmt = | ||
| 517 | 226, // Windows Structured Exception Handling's try statement. | ||
| 518 | DxcCursor_SEHExceptStmt = | ||
| 519 | 227, // Windows Structured Exception Handling's except statement. | ||
| 520 | DxcCursor_SEHFinallyStmt = | ||
| 521 | 228, // Windows Structured Exception Handling's finally statement. | ||
| 522 | |||
| 523 | DxcCursor_MSAsmStmt = 229, // A MS inline assembly statement extension. | ||
| 524 | DxcCursor_NullStmt = 230, // The null satement ";": C99 6.8.3p3. | ||
| 525 | DxcCursor_DeclStmt = 231, // Adaptor class for mixing declarations with | ||
| 526 | // statements and expressions. | ||
| 527 | DxcCursor_OMPParallelDirective = 232, // OpenMP parallel directive. | ||
| 528 | DxcCursor_OMPSimdDirective = 233, // OpenMP SIMD directive. | ||
| 529 | DxcCursor_OMPForDirective = 234, // OpenMP for directive. | ||
| 530 | DxcCursor_OMPSectionsDirective = 235, // OpenMP sections directive. | ||
| 531 | DxcCursor_OMPSectionDirective = 236, // OpenMP section directive. | ||
| 532 | DxcCursor_OMPSingleDirective = 237, // OpenMP single directive. | ||
| 533 | DxcCursor_OMPParallelForDirective = 238, // OpenMP parallel for directive. | ||
| 534 | DxcCursor_OMPParallelSectionsDirective = | ||
| 535 | 239, // OpenMP parallel sections directive. | ||
| 536 | DxcCursor_OMPTaskDirective = 240, // OpenMP task directive. | ||
| 537 | DxcCursor_OMPMasterDirective = 241, // OpenMP master directive. | ||
| 538 | DxcCursor_OMPCriticalDirective = 242, // OpenMP critical directive. | ||
| 539 | DxcCursor_OMPTaskyieldDirective = 243, // OpenMP taskyield directive. | ||
| 540 | DxcCursor_OMPBarrierDirective = 244, // OpenMP barrier directive. | ||
| 541 | DxcCursor_OMPTaskwaitDirective = 245, // OpenMP taskwait directive. | ||
| 542 | DxcCursor_OMPFlushDirective = 246, // OpenMP flush directive. | ||
| 543 | DxcCursor_SEHLeaveStmt = | ||
| 544 | 247, // Windows Structured Exception Handling's leave statement. | ||
| 545 | DxcCursor_OMPOrderedDirective = 248, // OpenMP ordered directive. | ||
| 546 | DxcCursor_OMPAtomicDirective = 249, // OpenMP atomic directive. | ||
| 547 | DxcCursor_OMPForSimdDirective = 250, // OpenMP for SIMD directive. | ||
| 548 | DxcCursor_OMPParallelForSimdDirective = | ||
| 549 | 251, // OpenMP parallel for SIMD directive. | ||
| 550 | DxcCursor_OMPTargetDirective = 252, // OpenMP target directive. | ||
| 551 | DxcCursor_OMPTeamsDirective = 253, // OpenMP teams directive. | ||
| 552 | DxcCursor_OMPTaskgroupDirective = 254, // OpenMP taskgroup directive. | ||
| 553 | DxcCursor_OMPCancellationPointDirective = | ||
| 554 | 255, // OpenMP cancellation point directive. | ||
| 555 | DxcCursor_OMPCancelDirective = 256, // OpenMP cancel directive. | ||
| 556 | DxcCursor_LastStmt = DxcCursor_OMPCancelDirective, | ||
| 557 | |||
| 558 | DxcCursor_TranslationUnit = | ||
| 559 | 300, // Cursor that represents the translation unit itself. | ||
| 560 | |||
| 561 | /* Attributes */ | ||
| 562 | DxcCursor_FirstAttr = 400, | ||
| 563 | /** | ||
| 564 | * \brief An attribute whose specific kind is not exposed via this | ||
| 565 | * interface. | ||
| 566 | */ | ||
| 567 | DxcCursor_UnexposedAttr = 400, | ||
| 568 | |||
| 569 | DxcCursor_IBActionAttr = 401, | ||
| 570 | DxcCursor_IBOutletAttr = 402, | ||
| 571 | DxcCursor_IBOutletCollectionAttr = 403, | ||
| 572 | DxcCursor_CXXFinalAttr = 404, | ||
| 573 | DxcCursor_CXXOverrideAttr = 405, | ||
| 574 | DxcCursor_AnnotateAttr = 406, | ||
| 575 | DxcCursor_AsmLabelAttr = 407, | ||
| 576 | DxcCursor_PackedAttr = 408, | ||
| 577 | DxcCursor_PureAttr = 409, | ||
| 578 | DxcCursor_ConstAttr = 410, | ||
| 579 | DxcCursor_NoDuplicateAttr = 411, | ||
| 580 | DxcCursor_CUDAConstantAttr = 412, | ||
| 581 | DxcCursor_CUDADeviceAttr = 413, | ||
| 582 | DxcCursor_CUDAGlobalAttr = 414, | ||
| 583 | DxcCursor_CUDAHostAttr = 415, | ||
| 584 | DxcCursor_CUDASharedAttr = 416, | ||
| 585 | DxcCursor_LastAttr = DxcCursor_CUDASharedAttr, | ||
| 586 | |||
| 587 | /* Preprocessing */ | ||
| 588 | DxcCursor_PreprocessingDirective = 500, | ||
| 589 | DxcCursor_MacroDefinition = 501, | ||
| 590 | DxcCursor_MacroExpansion = 502, | ||
| 591 | DxcCursor_MacroInstantiation = DxcCursor_MacroExpansion, | ||
| 592 | DxcCursor_InclusionDirective = 503, | ||
| 593 | DxcCursor_FirstPreprocessing = DxcCursor_PreprocessingDirective, | ||
| 594 | DxcCursor_LastPreprocessing = DxcCursor_InclusionDirective, | ||
| 595 | |||
| 596 | /* Extra Declarations */ | ||
| 597 | /** | ||
| 598 | * \brief A module import declaration. | ||
| 599 | */ | ||
| 600 | DxcCursor_ModuleImportDecl = 600, | ||
| 601 | DxcCursor_FirstExtraDecl = DxcCursor_ModuleImportDecl, | ||
| 602 | DxcCursor_LastExtraDecl = DxcCursor_ModuleImportDecl | ||
| 603 | }; | ||
| 604 | |||
| 605 | enum DxcCursorKindFlags { | ||
| 606 | DxcCursorKind_None = 0, | ||
| 607 | DxcCursorKind_Declaration = 0x1, | ||
| 608 | DxcCursorKind_Reference = 0x2, | ||
| 609 | DxcCursorKind_Expression = 0x4, | ||
| 610 | DxcCursorKind_Statement = 0x8, | ||
| 611 | DxcCursorKind_Attribute = 0x10, | ||
| 612 | DxcCursorKind_Invalid = 0x20, | ||
| 613 | DxcCursorKind_TranslationUnit = 0x40, | ||
| 614 | DxcCursorKind_Preprocessing = 0x80, | ||
| 615 | DxcCursorKind_Unexposed = 0x100, | ||
| 616 | }; | ||
| 617 | |||
| 618 | enum DxcCodeCompleteFlags { | ||
| 619 | DxcCodeCompleteFlags_None = 0, | ||
| 620 | DxcCodeCompleteFlags_IncludeMacros = 0x1, | ||
| 621 | DxcCodeCompleteFlags_IncludeCodePatterns = 0x2, | ||
| 622 | DxcCodeCompleteFlags_IncludeBriefComments = 0x4, | ||
| 623 | }; | ||
| 624 | |||
| 625 | enum DxcCompletionChunkKind { | ||
| 626 | DxcCompletionChunk_Optional = 0, | ||
| 627 | DxcCompletionChunk_TypedText = 1, | ||
| 628 | DxcCompletionChunk_Text = 2, | ||
| 629 | DxcCompletionChunk_Placeholder = 3, | ||
| 630 | DxcCompletionChunk_Informative = 4, | ||
| 631 | DxcCompletionChunk_CurrentParameter = 5, | ||
| 632 | DxcCompletionChunk_LeftParen = 6, | ||
| 633 | DxcCompletionChunk_RightParen = 7, | ||
| 634 | DxcCompletionChunk_LeftBracket = 8, | ||
| 635 | DxcCompletionChunk_RightBracket = 9, | ||
| 636 | DxcCompletionChunk_LeftBrace = 10, | ||
| 637 | DxcCompletionChunk_RightBrace = 11, | ||
| 638 | DxcCompletionChunk_LeftAngle = 12, | ||
| 639 | DxcCompletionChunk_RightAngle = 13, | ||
| 640 | DxcCompletionChunk_Comma = 14, | ||
| 641 | DxcCompletionChunk_ResultType = 15, | ||
| 642 | DxcCompletionChunk_Colon = 16, | ||
| 643 | DxcCompletionChunk_SemiColon = 17, | ||
| 644 | DxcCompletionChunk_Equal = 18, | ||
| 645 | DxcCompletionChunk_HorizontalSpace = 19, | ||
| 646 | DxcCompletionChunk_VerticalSpace = 20, | ||
| 647 | }; | ||
| 648 | |||
| 649 | struct IDxcCursor; | ||
| 650 | struct IDxcDiagnostic; | ||
| 651 | struct IDxcFile; | ||
| 652 | struct IDxcInclusion; | ||
| 653 | struct IDxcIntelliSense; | ||
| 654 | struct IDxcIndex; | ||
| 655 | struct IDxcSourceLocation; | ||
| 656 | struct IDxcSourceRange; | ||
| 657 | struct IDxcToken; | ||
| 658 | struct IDxcTranslationUnit; | ||
| 659 | struct IDxcType; | ||
| 660 | struct IDxcUnsavedFile; | ||
| 661 | struct IDxcCodeCompleteResults; | ||
| 662 | struct IDxcCompletionResult; | ||
| 663 | struct IDxcCompletionString; | ||
| 664 | |||
| 665 | CROSS_PLATFORM_UUIDOF(IDxcCursor, "1467b985-288d-4d2a-80c1-ef89c42c40bc") | ||
| 666 | struct IDxcCursor : public IUnknown { | ||
| 667 | virtual HRESULT STDMETHODCALLTYPE | ||
| 668 | GetExtent(_Outptr_result_nullonfailure_ IDxcSourceRange **pRange) = 0; | ||
| 669 | virtual HRESULT STDMETHODCALLTYPE | ||
| 670 | GetLocation(_Outptr_result_nullonfailure_ IDxcSourceLocation **pResult) = 0; | ||
| 671 | virtual HRESULT STDMETHODCALLTYPE GetKind(_Out_ DxcCursorKind *pResult) = 0; | ||
| 672 | virtual HRESULT STDMETHODCALLTYPE | ||
| 673 | GetKindFlags(_Out_ DxcCursorKindFlags *pResult) = 0; | ||
| 674 | virtual HRESULT STDMETHODCALLTYPE | ||
| 675 | GetSemanticParent(_Outptr_result_nullonfailure_ IDxcCursor **pResult) = 0; | ||
| 676 | virtual HRESULT STDMETHODCALLTYPE | ||
| 677 | GetLexicalParent(_Outptr_result_nullonfailure_ IDxcCursor **pResult) = 0; | ||
| 678 | virtual HRESULT STDMETHODCALLTYPE | ||
| 679 | GetCursorType(_Outptr_result_nullonfailure_ IDxcType **pResult) = 0; | ||
| 680 | virtual HRESULT STDMETHODCALLTYPE GetNumArguments(_Out_ int *pResult) = 0; | ||
| 681 | virtual HRESULT STDMETHODCALLTYPE GetArgumentAt( | ||
| 682 | int index, _Outptr_result_nullonfailure_ IDxcCursor **pResult) = 0; | ||
| 683 | virtual HRESULT STDMETHODCALLTYPE | ||
| 684 | GetReferencedCursor(_Outptr_result_nullonfailure_ IDxcCursor **pResult) = 0; | ||
| 685 | /// <summary>For a cursor that is either a reference to or a declaration of | ||
| 686 | /// some entity, retrieve a cursor that describes the definition of that | ||
| 687 | /// entity.</summary> <remarks>Some entities can be declared multiple times | ||
| 688 | /// within a translation unit, but only one of those declarations can also be | ||
| 689 | /// a definition.</remarks> <returns>A cursor to the definition of this | ||
| 690 | /// entity; nullptr if there is no definition in this translation | ||
| 691 | /// unit.</returns> | ||
| 692 | virtual HRESULT STDMETHODCALLTYPE | ||
| 693 | GetDefinitionCursor(_Outptr_result_nullonfailure_ IDxcCursor **pResult) = 0; | ||
| 694 | virtual HRESULT STDMETHODCALLTYPE | ||
| 695 | FindReferencesInFile(_In_ IDxcFile *file, unsigned skip, unsigned top, | ||
| 696 | _Out_ unsigned *pResultLength, | ||
| 697 | _Outptr_result_buffer_maybenull_(*pResultLength) | ||
| 698 | IDxcCursor ***pResult) = 0; | ||
| 699 | /// <summary>Gets the name for the entity references by the cursor, e.g. foo | ||
| 700 | /// for an 'int foo' variable.</summary> | ||
| 701 | virtual HRESULT STDMETHODCALLTYPE | ||
| 702 | GetSpelling(_Outptr_result_maybenull_ LPSTR *pResult) = 0; | ||
| 703 | virtual HRESULT STDMETHODCALLTYPE IsEqualTo(_In_ IDxcCursor *other, | ||
| 704 | _Out_ BOOL *pResult) = 0; | ||
| 705 | virtual HRESULT STDMETHODCALLTYPE IsNull(_Out_ BOOL *pResult) = 0; | ||
| 706 | virtual HRESULT STDMETHODCALLTYPE IsDefinition(_Out_ BOOL *pResult) = 0; | ||
| 707 | /// <summary>Gets the display name for the cursor, including e.g. parameter | ||
| 708 | /// types for a function.</summary> | ||
| 709 | virtual HRESULT STDMETHODCALLTYPE GetDisplayName(_Out_ BSTR *pResult) = 0; | ||
| 710 | /// <summary>Gets the qualified name for the symbol the cursor refers | ||
| 711 | /// to.</summary> | ||
| 712 | virtual HRESULT STDMETHODCALLTYPE GetQualifiedName( | ||
| 713 | BOOL includeTemplateArgs, _Outptr_result_maybenull_ BSTR *pResult) = 0; | ||
| 714 | /// <summary>Gets a name for the cursor, applying the specified formatting | ||
| 715 | /// flags.</summary> | ||
| 716 | virtual HRESULT STDMETHODCALLTYPE | ||
| 717 | GetFormattedName(DxcCursorFormatting formatting, | ||
| 718 | _Outptr_result_maybenull_ BSTR *pResult) = 0; | ||
| 719 | /// <summary>Gets children in pResult up to top elements.</summary> | ||
| 720 | virtual HRESULT STDMETHODCALLTYPE | ||
| 721 | GetChildren(unsigned skip, unsigned top, _Out_ unsigned *pResultLength, | ||
| 722 | _Outptr_result_buffer_maybenull_(*pResultLength) | ||
| 723 | IDxcCursor ***pResult) = 0; | ||
| 724 | /// <summary>Gets the cursor following a location within a compound | ||
| 725 | /// cursor.</summary> | ||
| 726 | virtual HRESULT STDMETHODCALLTYPE | ||
| 727 | GetSnappedChild(_In_ IDxcSourceLocation *location, | ||
| 728 | _Outptr_result_maybenull_ IDxcCursor **pResult) = 0; | ||
| 729 | }; | ||
| 730 | |||
| 731 | CROSS_PLATFORM_UUIDOF(IDxcDiagnostic, "4f76b234-3659-4d33-99b0-3b0db994b564") | ||
| 732 | struct IDxcDiagnostic : public IUnknown { | ||
| 733 | virtual HRESULT STDMETHODCALLTYPE | ||
| 734 | FormatDiagnostic(DxcDiagnosticDisplayOptions options, | ||
| 735 | _Outptr_result_maybenull_ LPSTR *pResult) = 0; | ||
| 736 | virtual HRESULT STDMETHODCALLTYPE | ||
| 737 | GetSeverity(_Out_ DxcDiagnosticSeverity *pResult) = 0; | ||
| 738 | virtual HRESULT STDMETHODCALLTYPE | ||
| 739 | GetLocation(_Outptr_result_nullonfailure_ IDxcSourceLocation **pResult) = 0; | ||
| 740 | virtual HRESULT STDMETHODCALLTYPE | ||
| 741 | GetSpelling(_Outptr_result_maybenull_ LPSTR *pResult) = 0; | ||
| 742 | virtual HRESULT STDMETHODCALLTYPE | ||
| 743 | GetCategoryText(_Outptr_result_maybenull_ LPSTR *pResult) = 0; | ||
| 744 | virtual HRESULT STDMETHODCALLTYPE GetNumRanges(_Out_ unsigned *pResult) = 0; | ||
| 745 | virtual HRESULT STDMETHODCALLTYPE | ||
| 746 | GetRangeAt(unsigned index, | ||
| 747 | _Outptr_result_nullonfailure_ IDxcSourceRange **pResult) = 0; | ||
| 748 | virtual HRESULT STDMETHODCALLTYPE GetNumFixIts(_Out_ unsigned *pResult) = 0; | ||
| 749 | virtual HRESULT STDMETHODCALLTYPE | ||
| 750 | GetFixItAt(unsigned index, | ||
| 751 | _Outptr_result_nullonfailure_ IDxcSourceRange **pReplacementRange, | ||
| 752 | _Outptr_result_maybenull_ LPSTR *pText) = 0; | ||
| 753 | }; | ||
| 754 | |||
| 755 | CROSS_PLATFORM_UUIDOF(IDxcFile, "bb2fca9e-1478-47ba-b08c-2c502ada4895") | ||
| 756 | struct IDxcFile : public IUnknown { | ||
| 757 | /// <summary>Gets the file name for this file.</summary> | ||
| 758 | virtual HRESULT STDMETHODCALLTYPE | ||
| 759 | GetName(_Outptr_result_maybenull_ LPSTR *pResult) = 0; | ||
| 760 | /// <summary>Checks whether this file is equal to the other specified | ||
| 761 | /// file.</summary> | ||
| 762 | virtual HRESULT STDMETHODCALLTYPE IsEqualTo(_In_ IDxcFile *other, | ||
| 763 | _Out_ BOOL *pResult) = 0; | ||
| 764 | }; | ||
| 765 | |||
| 766 | CROSS_PLATFORM_UUIDOF(IDxcInclusion, "0c364d65-df44-4412-888e-4e552fc5e3d6") | ||
| 767 | struct IDxcInclusion : public IUnknown { | ||
| 768 | virtual HRESULT STDMETHODCALLTYPE | ||
| 769 | GetIncludedFile(_Outptr_result_nullonfailure_ IDxcFile **pResult) = 0; | ||
| 770 | virtual HRESULT STDMETHODCALLTYPE GetStackLength(_Out_ unsigned *pResult) = 0; | ||
| 771 | virtual HRESULT STDMETHODCALLTYPE | ||
| 772 | GetStackItem(unsigned index, | ||
| 773 | _Outptr_result_nullonfailure_ IDxcSourceLocation **pResult) = 0; | ||
| 774 | }; | ||
| 775 | |||
| 776 | CROSS_PLATFORM_UUIDOF(IDxcIntelliSense, "b1f99513-46d6-4112-8169-dd0d6053f17d") | ||
| 777 | struct IDxcIntelliSense : public IUnknown { | ||
| 778 | virtual HRESULT STDMETHODCALLTYPE | ||
| 779 | CreateIndex(_Outptr_result_nullonfailure_ IDxcIndex **index) = 0; | ||
| 780 | virtual HRESULT STDMETHODCALLTYPE GetNullLocation( | ||
| 781 | _Outptr_result_nullonfailure_ IDxcSourceLocation **location) = 0; | ||
| 782 | virtual HRESULT STDMETHODCALLTYPE | ||
| 783 | GetNullRange(_Outptr_result_nullonfailure_ IDxcSourceRange **location) = 0; | ||
| 784 | virtual HRESULT STDMETHODCALLTYPE | ||
| 785 | GetRange(_In_ IDxcSourceLocation *start, _In_ IDxcSourceLocation *end, | ||
| 786 | _Outptr_result_nullonfailure_ IDxcSourceRange **location) = 0; | ||
| 787 | virtual HRESULT STDMETHODCALLTYPE GetDefaultDiagnosticDisplayOptions( | ||
| 788 | _Out_ DxcDiagnosticDisplayOptions *pValue) = 0; | ||
| 789 | virtual HRESULT STDMETHODCALLTYPE | ||
| 790 | GetDefaultEditingTUOptions(_Out_ DxcTranslationUnitFlags *pValue) = 0; | ||
| 791 | virtual HRESULT STDMETHODCALLTYPE CreateUnsavedFile( | ||
| 792 | _In_ LPCSTR fileName, _In_ LPCSTR contents, unsigned contentLength, | ||
| 793 | _Outptr_result_nullonfailure_ IDxcUnsavedFile **pResult) = 0; | ||
| 794 | }; | ||
| 795 | |||
| 796 | CROSS_PLATFORM_UUIDOF(IDxcIndex, "937824a0-7f5a-4815-9ba7-7fc0424f4173") | ||
| 797 | struct IDxcIndex : public IUnknown { | ||
| 798 | virtual HRESULT STDMETHODCALLTYPE | ||
| 799 | SetGlobalOptions(DxcGlobalOptions options) = 0; | ||
| 800 | virtual HRESULT STDMETHODCALLTYPE | ||
| 801 | GetGlobalOptions(_Out_ DxcGlobalOptions *options) = 0; | ||
| 802 | virtual HRESULT STDMETHODCALLTYPE ParseTranslationUnit( | ||
| 803 | _In_z_ const char *source_filename, | ||
| 804 | _In_count_(num_command_line_args) const char *const *command_line_args, | ||
| 805 | int num_command_line_args, | ||
| 806 | _In_count_(num_unsaved_files) IDxcUnsavedFile **unsaved_files, | ||
| 807 | unsigned num_unsaved_files, DxcTranslationUnitFlags options, | ||
| 808 | _Out_ IDxcTranslationUnit **pTranslationUnit) = 0; | ||
| 809 | }; | ||
| 810 | |||
| 811 | CROSS_PLATFORM_UUIDOF(IDxcSourceLocation, | ||
| 812 | "8e7ddf1c-d7d3-4d69-b286-85fccba1e0cf") | ||
| 813 | struct IDxcSourceLocation : public IUnknown { | ||
| 814 | virtual HRESULT STDMETHODCALLTYPE IsEqualTo(_In_ IDxcSourceLocation *other, | ||
| 815 | _Out_ BOOL *pResult) = 0; | ||
| 816 | virtual HRESULT STDMETHODCALLTYPE GetSpellingLocation( | ||
| 817 | _Outptr_opt_ IDxcFile **pFile, _Out_opt_ unsigned *pLine, | ||
| 818 | _Out_opt_ unsigned *pCol, _Out_opt_ unsigned *pOffset) = 0; | ||
| 819 | virtual HRESULT STDMETHODCALLTYPE IsNull(_Out_ BOOL *pResult) = 0; | ||
| 820 | virtual HRESULT STDMETHODCALLTYPE | ||
| 821 | GetPresumedLocation(_Outptr_opt_ LPSTR *pFilename, _Out_opt_ unsigned *pLine, | ||
| 822 | _Out_opt_ unsigned *pCol) = 0; | ||
| 823 | }; | ||
| 824 | |||
| 825 | CROSS_PLATFORM_UUIDOF(IDxcSourceRange, "f1359b36-a53f-4e81-b514-b6b84122a13f") | ||
| 826 | struct IDxcSourceRange : public IUnknown { | ||
| 827 | virtual HRESULT STDMETHODCALLTYPE IsNull(_Out_ BOOL *pValue) = 0; | ||
| 828 | virtual HRESULT STDMETHODCALLTYPE | ||
| 829 | GetStart(_Out_ IDxcSourceLocation **pValue) = 0; | ||
| 830 | virtual HRESULT STDMETHODCALLTYPE | ||
| 831 | GetEnd(_Out_ IDxcSourceLocation **pValue) = 0; | ||
| 832 | virtual HRESULT STDMETHODCALLTYPE GetOffsets(_Out_ unsigned *startOffset, | ||
| 833 | _Out_ unsigned *endOffset) = 0; | ||
| 834 | }; | ||
| 835 | |||
| 836 | CROSS_PLATFORM_UUIDOF(IDxcToken, "7f90b9ff-a275-4932-97d8-3cfd234482a2") | ||
| 837 | struct IDxcToken : public IUnknown { | ||
| 838 | virtual HRESULT STDMETHODCALLTYPE GetKind(_Out_ DxcTokenKind *pValue) = 0; | ||
| 839 | virtual HRESULT STDMETHODCALLTYPE | ||
| 840 | GetLocation(_Out_ IDxcSourceLocation **pValue) = 0; | ||
| 841 | virtual HRESULT STDMETHODCALLTYPE | ||
| 842 | GetExtent(_Out_ IDxcSourceRange **pValue) = 0; | ||
| 843 | virtual HRESULT STDMETHODCALLTYPE GetSpelling(_Out_ LPSTR *pValue) = 0; | ||
| 844 | }; | ||
| 845 | |||
| 846 | CROSS_PLATFORM_UUIDOF(IDxcTranslationUnit, | ||
| 847 | "9677dee0-c0e5-46a1-8b40-3db3168be63d") | ||
| 848 | struct IDxcTranslationUnit : public IUnknown { | ||
| 849 | virtual HRESULT STDMETHODCALLTYPE GetCursor(_Out_ IDxcCursor **pCursor) = 0; | ||
| 850 | virtual HRESULT STDMETHODCALLTYPE | ||
| 851 | Tokenize(_In_ IDxcSourceRange *range, | ||
| 852 | _Outptr_result_buffer_maybenull_(*pTokenCount) IDxcToken ***pTokens, | ||
| 853 | _Out_ unsigned *pTokenCount) = 0; | ||
| 854 | virtual HRESULT STDMETHODCALLTYPE | ||
| 855 | GetLocation(_In_ IDxcFile *file, unsigned line, unsigned column, | ||
| 856 | _Outptr_result_nullonfailure_ IDxcSourceLocation **pResult) = 0; | ||
| 857 | virtual HRESULT STDMETHODCALLTYPE | ||
| 858 | GetNumDiagnostics(_Out_ unsigned *pValue) = 0; | ||
| 859 | virtual HRESULT STDMETHODCALLTYPE | ||
| 860 | GetDiagnostic(unsigned index, | ||
| 861 | _Outptr_result_nullonfailure_ IDxcDiagnostic **pValue) = 0; | ||
| 862 | virtual HRESULT STDMETHODCALLTYPE | ||
| 863 | GetFile(_In_ const char *name, | ||
| 864 | _Outptr_result_nullonfailure_ IDxcFile **pResult) = 0; | ||
| 865 | virtual HRESULT STDMETHODCALLTYPE | ||
| 866 | GetFileName(_Outptr_result_maybenull_ LPSTR *pResult) = 0; | ||
| 867 | virtual HRESULT STDMETHODCALLTYPE Reparse(_In_count_(num_unsaved_files) | ||
| 868 | IDxcUnsavedFile **unsaved_files, | ||
| 869 | unsigned num_unsaved_files) = 0; | ||
| 870 | virtual HRESULT STDMETHODCALLTYPE | ||
| 871 | GetCursorForLocation(_In_ IDxcSourceLocation *location, | ||
| 872 | _Outptr_result_nullonfailure_ IDxcCursor **pResult) = 0; | ||
| 873 | virtual HRESULT STDMETHODCALLTYPE GetLocationForOffset( | ||
| 874 | _In_ IDxcFile *file, unsigned offset, | ||
| 875 | _Outptr_result_nullonfailure_ IDxcSourceLocation **pResult) = 0; | ||
| 876 | virtual HRESULT STDMETHODCALLTYPE GetSkippedRanges( | ||
| 877 | _In_ IDxcFile *file, _Out_ unsigned *pResultCount, | ||
| 878 | _Outptr_result_buffer_(*pResultCount) IDxcSourceRange ***pResult) = 0; | ||
| 879 | virtual HRESULT STDMETHODCALLTYPE | ||
| 880 | GetDiagnosticDetails(unsigned index, DxcDiagnosticDisplayOptions options, | ||
| 881 | _Out_ unsigned *errorCode, _Out_ unsigned *errorLine, | ||
| 882 | _Out_ unsigned *errorColumn, _Out_ BSTR *errorFile, | ||
| 883 | _Out_ unsigned *errorOffset, _Out_ unsigned *errorLength, | ||
| 884 | _Out_ BSTR *errorMessage) = 0; | ||
| 885 | virtual HRESULT STDMETHODCALLTYPE GetInclusionList( | ||
| 886 | _Out_ unsigned *pResultCount, | ||
| 887 | _Outptr_result_buffer_(*pResultCount) IDxcInclusion ***pResult) = 0; | ||
| 888 | virtual HRESULT STDMETHODCALLTYPE CodeCompleteAt( | ||
| 889 | _In_ const char *fileName, unsigned line, unsigned column, | ||
| 890 | _In_ IDxcUnsavedFile **pUnsavedFiles, unsigned numUnsavedFiles, | ||
| 891 | _In_ DxcCodeCompleteFlags options, | ||
| 892 | _Outptr_result_nullonfailure_ IDxcCodeCompleteResults **pResult) = 0; | ||
| 893 | }; | ||
| 894 | |||
| 895 | CROSS_PLATFORM_UUIDOF(IDxcType, "2ec912fd-b144-4a15-ad0d-1c5439c81e46") | ||
| 896 | struct IDxcType : public IUnknown { | ||
| 897 | virtual HRESULT STDMETHODCALLTYPE | ||
| 898 | GetSpelling(_Outptr_result_z_ LPSTR *pResult) = 0; | ||
| 899 | virtual HRESULT STDMETHODCALLTYPE IsEqualTo(_In_ IDxcType *other, | ||
| 900 | _Out_ BOOL *pResult) = 0; | ||
| 901 | virtual HRESULT STDMETHODCALLTYPE GetKind(_Out_ DxcTypeKind *pResult) = 0; | ||
| 902 | }; | ||
| 903 | |||
| 904 | CROSS_PLATFORM_UUIDOF(IDxcUnsavedFile, "8ec00f98-07d0-4e60-9d7c-5a50b5b0017f") | ||
| 905 | struct IDxcUnsavedFile : public IUnknown { | ||
| 906 | virtual HRESULT STDMETHODCALLTYPE | ||
| 907 | GetFileName(_Outptr_result_z_ LPSTR *pFileName) = 0; | ||
| 908 | virtual HRESULT STDMETHODCALLTYPE | ||
| 909 | GetContents(_Outptr_result_z_ LPSTR *pContents) = 0; | ||
| 910 | virtual HRESULT STDMETHODCALLTYPE GetLength(_Out_ unsigned *pLength) = 0; | ||
| 911 | }; | ||
| 912 | |||
| 913 | CROSS_PLATFORM_UUIDOF(IDxcCodeCompleteResults, | ||
| 914 | "1E06466A-FD8B-45F3-A78F-8A3F76EBB552") | ||
| 915 | struct IDxcCodeCompleteResults : public IUnknown { | ||
| 916 | virtual HRESULT STDMETHODCALLTYPE GetNumResults(_Out_ unsigned *pResult) = 0; | ||
| 917 | virtual HRESULT STDMETHODCALLTYPE | ||
| 918 | GetResultAt(unsigned index, | ||
| 919 | _Outptr_result_nullonfailure_ IDxcCompletionResult **pResult) = 0; | ||
| 920 | }; | ||
| 921 | |||
| 922 | CROSS_PLATFORM_UUIDOF(IDxcCompletionResult, | ||
| 923 | "943C0588-22D0-4784-86FC-701F802AC2B6") | ||
| 924 | struct IDxcCompletionResult : public IUnknown { | ||
| 925 | virtual HRESULT STDMETHODCALLTYPE | ||
| 926 | GetCursorKind(_Out_ DxcCursorKind *pResult) = 0; | ||
| 927 | virtual HRESULT STDMETHODCALLTYPE GetCompletionString( | ||
| 928 | _Outptr_result_nullonfailure_ IDxcCompletionString **pResult) = 0; | ||
| 929 | }; | ||
| 930 | |||
| 931 | CROSS_PLATFORM_UUIDOF(IDxcCompletionString, | ||
| 932 | "06B51E0F-A605-4C69-A110-CD6E14B58EEC") | ||
| 933 | struct IDxcCompletionString : public IUnknown { | ||
| 934 | virtual HRESULT STDMETHODCALLTYPE | ||
| 935 | GetNumCompletionChunks(_Out_ unsigned *pResult) = 0; | ||
| 936 | virtual HRESULT STDMETHODCALLTYPE GetCompletionChunkKind( | ||
| 937 | unsigned chunkNumber, _Out_ DxcCompletionChunkKind *pResult) = 0; | ||
| 938 | virtual HRESULT STDMETHODCALLTYPE | ||
| 939 | GetCompletionChunkText(unsigned chunkNumber, _Out_ LPSTR *pResult) = 0; | ||
| 940 | }; | ||
| 941 | |||
| 942 | // Fun fact: 'extern' is required because const is by default static in C++, so | ||
| 943 | // CLSID_DxcIntelliSense is not visible externally (this is OK in C, since const | ||
| 944 | // is not by default static in C) | ||
| 945 | |||
| 946 | #ifdef _MSC_VER | ||
| 947 | #define CLSID_SCOPE __declspec(selectany) extern | ||
| 948 | #else | ||
| 949 | #define CLSID_SCOPE | ||
| 950 | #endif | ||
| 951 | |||
| 952 | CLSID_SCOPE const CLSID | ||
| 953 | CLSID_DxcIntelliSense = {/* 3047833c-d1c0-4b8e-9d40-102878605985 */ | ||
| 954 | 0x3047833c, | ||
| 955 | 0xd1c0, | ||
| 956 | 0x4b8e, | ||
| 957 | {0x9d, 0x40, 0x10, 0x28, 0x78, 0x60, 0x59, 0x85}}; | ||
| 958 | |||
| 959 | #endif | ||
diff --git a/contrib/dxc_2025_07_14/inc/hlsl/LICENSE.txt b/contrib/dxc_2025_07_14/inc/hlsl/LICENSE.txt new file mode 100644 index 0000000..94472c3 --- /dev/null +++ b/contrib/dxc_2025_07_14/inc/hlsl/LICENSE.txt | |||
| @@ -0,0 +1,222 @@ | |||
| 1 | ============================================================================== | ||
| 2 | The LLVM Project is under the Apache License v2.0 with LLVM Exceptions: | ||
| 3 | ============================================================================== | ||
| 4 | |||
| 5 | Apache License | ||
| 6 | Version 2.0, January 2004 | ||
| 7 | http://www.apache.org/licenses/ | ||
| 8 | |||
| 9 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION | ||
| 10 | |||
| 11 | 1. Definitions. | ||
| 12 | |||
| 13 | "License" shall mean the terms and conditions for use, reproduction, | ||
| 14 | and distribution as defined by Sections 1 through 9 of this document. | ||
| 15 | |||
| 16 | "Licensor" shall mean the copyright owner or entity authorized by | ||
| 17 | the copyright owner that is granting the License. | ||
| 18 | |||
| 19 | "Legal Entity" shall mean the union of the acting entity and all | ||
| 20 | other entities that control, are controlled by, or are under common | ||
| 21 | control with that entity. For the purposes of this definition, | ||
| 22 | "control" means (i) the power, direct or indirect, to cause the | ||
| 23 | direction or management of such entity, whether by contract or | ||
| 24 | otherwise, or (ii) ownership of fifty percent (50%) or more of the | ||
| 25 | outstanding shares, or (iii) beneficial ownership of such entity. | ||
| 26 | |||
| 27 | "You" (or "Your") shall mean an individual or Legal Entity | ||
| 28 | exercising permissions granted by this License. | ||
| 29 | |||
| 30 | "Source" form shall mean the preferred form for making modifications, | ||
| 31 | including but not limited to software source code, documentation | ||
| 32 | source, and configuration files. | ||
| 33 | |||
| 34 | "Object" form shall mean any form resulting from mechanical | ||
| 35 | transformation or translation of a Source form, including but | ||
| 36 | not limited to compiled object code, generated documentation, | ||
| 37 | and conversions to other media types. | ||
| 38 | |||
| 39 | "Work" shall mean the work of authorship, whether in Source or | ||
| 40 | Object form, made available under the License, as indicated by a | ||
| 41 | copyright notice that is included in or attached to the work | ||
| 42 | (an example is provided in the Appendix below). | ||
| 43 | |||
| 44 | "Derivative Works" shall mean any work, whether in Source or Object | ||
| 45 | form, that is based on (or derived from) the Work and for which the | ||
| 46 | editorial revisions, annotations, elaborations, or other modifications | ||
| 47 | represent, as a whole, an original work of authorship. For the purposes | ||
| 48 | of this License, Derivative Works shall not include works that remain | ||
| 49 | separable from, or merely link (or bind by name) to the interfaces of, | ||
| 50 | the Work and Derivative Works thereof. | ||
| 51 | |||
| 52 | "Contribution" shall mean any work of authorship, including | ||
| 53 | the original version of the Work and any modifications or additions | ||
| 54 | to that Work or Derivative Works thereof, that is intentionally | ||
| 55 | submitted to Licensor for inclusion in the Work by the copyright owner | ||
| 56 | or by an individual or Legal Entity authorized to submit on behalf of | ||
| 57 | the copyright owner. For the purposes of this definition, "submitted" | ||
| 58 | means any form of electronic, verbal, or written communication sent | ||
| 59 | to the Licensor or its representatives, including but not limited to | ||
| 60 | communication on electronic mailing lists, source code control systems, | ||
| 61 | and issue tracking systems that are managed by, or on behalf of, the | ||
| 62 | Licensor for the purpose of discussing and improving the Work, but | ||
| 63 | excluding communication that is conspicuously marked or otherwise | ||
| 64 | designated in writing by the copyright owner as "Not a Contribution." | ||
| 65 | |||
| 66 | "Contributor" shall mean Licensor and any individual or Legal Entity | ||
| 67 | on behalf of whom a Contribution has been received by Licensor and | ||
| 68 | subsequently incorporated within the Work. | ||
| 69 | |||
| 70 | 2. Grant of Copyright License. Subject to the terms and conditions of | ||
| 71 | this License, each Contributor hereby grants to You a perpetual, | ||
| 72 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable | ||
| 73 | copyright license to reproduce, prepare Derivative Works of, | ||
| 74 | publicly display, publicly perform, sublicense, and distribute the | ||
| 75 | Work and such Derivative Works in Source or Object form. | ||
| 76 | |||
| 77 | 3. Grant of Patent License. Subject to the terms and conditions of | ||
| 78 | this License, each Contributor hereby grants to You a perpetual, | ||
| 79 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable | ||
| 80 | (except as stated in this section) patent license to make, have made, | ||
| 81 | use, offer to sell, sell, import, and otherwise transfer the Work, | ||
| 82 | where such license applies only to those patent claims licensable | ||
| 83 | by such Contributor that are necessarily infringed by their | ||
| 84 | Contribution(s) alone or by combination of their Contribution(s) | ||
| 85 | with the Work to which such Contribution(s) was submitted. If You | ||
| 86 | institute patent litigation against any entity (including a | ||
| 87 | cross-claim or counterclaim in a lawsuit) alleging that the Work | ||
| 88 | or a Contribution incorporated within the Work constitutes direct | ||
| 89 | or contributory patent infringement, then any patent licenses | ||
| 90 | granted to You under this License for that Work shall terminate | ||
| 91 | as of the date such litigation is filed. | ||
| 92 | |||
| 93 | 4. Redistribution. You may reproduce and distribute copies of the | ||
| 94 | Work or Derivative Works thereof in any medium, with or without | ||
| 95 | modifications, and in Source or Object form, provided that You | ||
| 96 | meet the following conditions: | ||
| 97 | |||
| 98 | (a) You must give any other recipients of the Work or | ||
| 99 | Derivative Works a copy of this License; and | ||
| 100 | |||
| 101 | (b) You must cause any modified files to carry prominent notices | ||
| 102 | stating that You changed the files; and | ||
| 103 | |||
| 104 | (c) You must retain, in the Source form of any Derivative Works | ||
| 105 | that You distribute, all copyright, patent, trademark, and | ||
| 106 | attribution notices from the Source form of the Work, | ||
| 107 | excluding those notices that do not pertain to any part of | ||
| 108 | the Derivative Works; and | ||
| 109 | |||
| 110 | (d) If the Work includes a "NOTICE" text file as part of its | ||
| 111 | distribution, then any Derivative Works that You distribute must | ||
| 112 | include a readable copy of the attribution notices contained | ||
| 113 | within such NOTICE file, excluding those notices that do not | ||
| 114 | pertain to any part of the Derivative Works, in at least one | ||
| 115 | of the following places: within a NOTICE text file distributed | ||
| 116 | as part of the Derivative Works; within the Source form or | ||
| 117 | documentation, if provided along with the Derivative Works; or, | ||
| 118 | within a display generated by the Derivative Works, if and | ||
| 119 | wherever such third-party notices normally appear. The contents | ||
| 120 | of the NOTICE file are for informational purposes only and | ||
| 121 | do not modify the License. You may add Your own attribution | ||
| 122 | notices within Derivative Works that You distribute, alongside | ||
| 123 | or as an addendum to the NOTICE text from the Work, provided | ||
| 124 | that such additional attribution notices cannot be construed | ||
| 125 | as modifying the License. | ||
| 126 | |||
| 127 | You may add Your own copyright statement to Your modifications and | ||
| 128 | may provide additional or different license terms and conditions | ||
| 129 | for use, reproduction, or distribution of Your modifications, or | ||
| 130 | for any such Derivative Works as a whole, provided Your use, | ||
| 131 | reproduction, and distribution of the Work otherwise complies with | ||
| 132 | the conditions stated in this License. | ||
| 133 | |||
| 134 | 5. Submission of Contributions. Unless You explicitly state otherwise, | ||
| 135 | any Contribution intentionally submitted for inclusion in the Work | ||
| 136 | by You to the Licensor shall be under the terms and conditions of | ||
| 137 | this License, without any additional terms or conditions. | ||
| 138 | Notwithstanding the above, nothing herein shall supersede or modify | ||
| 139 | the terms of any separate license agreement you may have executed | ||
| 140 | with Licensor regarding such Contributions. | ||
| 141 | |||
| 142 | 6. Trademarks. This License does not grant permission to use the trade | ||
| 143 | names, trademarks, service marks, or product names of the Licensor, | ||
| 144 | except as required for reasonable and customary use in describing the | ||
| 145 | origin of the Work and reproducing the content of the NOTICE file. | ||
| 146 | |||
| 147 | 7. Disclaimer of Warranty. Unless required by applicable law or | ||
| 148 | agreed to in writing, Licensor provides the Work (and each | ||
| 149 | Contributor provides its Contributions) on an "AS IS" BASIS, | ||
| 150 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or | ||
| 151 | implied, including, without limitation, any warranties or conditions | ||
| 152 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A | ||
| 153 | PARTICULAR PURPOSE. You are solely responsible for determining the | ||
| 154 | appropriateness of using or redistributing the Work and assume any | ||
| 155 | risks associated with Your exercise of permissions under this License. | ||
| 156 | |||
| 157 | 8. Limitation of Liability. In no event and under no legal theory, | ||
| 158 | whether in tort (including negligence), contract, or otherwise, | ||
| 159 | unless required by applicable law (such as deliberate and grossly | ||
| 160 | negligent acts) or agreed to in writing, shall any Contributor be | ||
| 161 | liable to You for damages, including any direct, indirect, special, | ||
| 162 | incidental, or consequential damages of any character arising as a | ||
| 163 | result of this License or out of the use or inability to use the | ||
| 164 | Work (including but not limited to damages for loss of goodwill, | ||
| 165 | work stoppage, computer failure or malfunction, or any and all | ||
| 166 | other commercial damages or losses), even if such Contributor | ||
| 167 | has been advised of the possibility of such damages. | ||
| 168 | |||
| 169 | 9. Accepting Warranty or Additional Liability. While redistributing | ||
| 170 | the Work or Derivative Works thereof, You may choose to offer, | ||
| 171 | and charge a fee for, acceptance of support, warranty, indemnity, | ||
| 172 | or other liability obligations and/or rights consistent with this | ||
| 173 | License. However, in accepting such obligations, You may act only | ||
| 174 | on Your own behalf and on Your sole responsibility, not on behalf | ||
| 175 | of any other Contributor, and only if You agree to indemnify, | ||
| 176 | defend, and hold each Contributor harmless for any liability | ||
| 177 | incurred by, or claims asserted against, such Contributor by reason | ||
| 178 | of your accepting any such warranty or additional liability. | ||
| 179 | |||
| 180 | END OF TERMS AND CONDITIONS | ||
| 181 | |||
| 182 | APPENDIX: How to apply the Apache License to your work. | ||
| 183 | |||
| 184 | To apply the Apache License to your work, attach the following | ||
| 185 | boilerplate notice, with the fields enclosed by brackets "[]" | ||
| 186 | replaced with your own identifying information. (Don't include | ||
| 187 | the brackets!) The text should be enclosed in the appropriate | ||
| 188 | comment syntax for the file format. We also recommend that a | ||
| 189 | file or class name and description of purpose be included on the | ||
| 190 | same "printed page" as the copyright notice for easier | ||
| 191 | identification within third-party archives. | ||
| 192 | |||
| 193 | Copyright [yyyy] [name of copyright owner] | ||
| 194 | |||
| 195 | Licensed under the Apache License, Version 2.0 (the "License"); | ||
| 196 | you may not use this file except in compliance with the License. | ||
| 197 | You may obtain a copy of the License at | ||
| 198 | |||
| 199 | http://www.apache.org/licenses/LICENSE-2.0 | ||
| 200 | |||
| 201 | Unless required by applicable law or agreed to in writing, software | ||
| 202 | distributed under the License is distributed on an "AS IS" BASIS, | ||
| 203 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| 204 | See the License for the specific language governing permissions and | ||
| 205 | limitations under the License. | ||
| 206 | |||
| 207 | |||
| 208 | ---- LLVM Exceptions to the Apache 2.0 License ---- | ||
| 209 | |||
| 210 | As an exception, if, as a result of your compiling your source code, portions | ||
| 211 | of this Software are embedded into an Object form of such source code, you | ||
| 212 | may redistribute such embedded portions in such Object form without complying | ||
| 213 | with the conditions of Sections 4(a), 4(b) and 4(d) of the License. | ||
| 214 | |||
| 215 | In addition, if you combine or link compiled forms of this Software with | ||
| 216 | software that is licensed under the GPLv2 ("Combined Software") and if a | ||
| 217 | court of competent jurisdiction determines that the patent provision (Section | ||
| 218 | 3), the indemnity provision (Section 9) or other Section of the License | ||
| 219 | conflicts with the conditions of the GPLv2, you may retroactively and | ||
| 220 | prospectively choose to deem waived or otherwise exclude such Section(s) of | ||
| 221 | the License, but only in their entirety and only with respect to the Combined | ||
| 222 | Software. | ||
diff --git a/contrib/dxc_2025_07_14/inc/hlsl/README.txt b/contrib/dxc_2025_07_14/inc/hlsl/README.txt new file mode 100644 index 0000000..a760bb9 --- /dev/null +++ b/contrib/dxc_2025_07_14/inc/hlsl/README.txt | |||
| @@ -0,0 +1,7 @@ | |||
| 1 | HLSL Standard Header Library | ||
| 2 | ============================ | ||
| 3 | |||
| 4 | The contents of this directory and subdirectories are the HLSL Standard Header | ||
| 5 | library. These headers are open source software. You may freely distribute all | ||
| 6 | or parts of these headers under the terms of the license agreement found in | ||
| 7 | LICENSE.txt. | ||
diff --git a/contrib/dxc_2025_07_14/inc/hlsl/dx/linalg.h b/contrib/dxc_2025_07_14/inc/hlsl/dx/linalg.h new file mode 100644 index 0000000..4f5e620 --- /dev/null +++ b/contrib/dxc_2025_07_14/inc/hlsl/dx/linalg.h | |||
| @@ -0,0 +1,198 @@ | |||
| 1 | // Header for linear algebra APIs. | ||
| 2 | |||
| 3 | #if __spirv__ | ||
| 4 | #error "Cooperative vectors not (yet) supported for SPIRV" | ||
| 5 | #endif | ||
| 6 | |||
| 7 | #if ((__SHADER_TARGET_MAJOR > 6) || \ | ||
| 8 | (__SHADER_TARGET_MAJOR == 6 && __SHADER_TARGET_MINOR >= 9)) && \ | ||
| 9 | (__HLSL_VERSION >= 2021) | ||
| 10 | |||
| 11 | namespace dx { | ||
| 12 | namespace linalg { | ||
| 13 | |||
| 14 | // NOTE: can't be an enum class because we get this error: | ||
| 15 | // error: non-type template argument of type 'dx::linalg::DataType' is not | ||
| 16 | // an integral constant expression | ||
| 17 | // | ||
| 18 | enum DataType { | ||
| 19 | DATA_TYPE_SINT16 = 2, // ComponentType::I16 | ||
| 20 | DATA_TYPE_UINT16 = 3, // ComponentType::U16 | ||
| 21 | DATA_TYPE_SINT32 = 4, // ComponentType::I32 | ||
| 22 | DATA_TYPE_UINT32 = 5, // ComponentType::U32 | ||
| 23 | DATA_TYPE_FLOAT16 = 8, // ComponentType::F16 | ||
| 24 | DATA_TYPE_FLOAT32 = 9, // ComponentType::F32 | ||
| 25 | DATA_TYPE_SINT8_T4_PACKED = 17, // ComponentType::PackedS8x32 | ||
| 26 | DATA_TYPE_UINT8_T4_PACKED = 18, // ComponentType::PackedU8x32 | ||
| 27 | DATA_TYPE_UINT8 = 19, // ComponentType::U8 | ||
| 28 | DATA_TYPE_SINT8 = 20, // ComponentType::I8 | ||
| 29 | DATA_TYPE_FLOAT8_E4M3 = 21, // ComponentType::F8_E4M3 | ||
| 30 | // (1 sign, 4 exp, 3 mantissa bits) | ||
| 31 | DATA_TYPE_FLOAT8_E5M2 = 22, // ComponentType::F8_E5M2 | ||
| 32 | // (1 sign, 5 exp, 2 mantissa bits) | ||
| 33 | }; | ||
| 34 | |||
| 35 | enum MatrixLayout { | ||
| 36 | MATRIX_LAYOUT_ROW_MAJOR = 0, | ||
| 37 | MATRIX_LAYOUT_COLUMN_MAJOR = 1, | ||
| 38 | MATRIX_LAYOUT_MUL_OPTIMAL = 2, | ||
| 39 | MATRIX_LAYOUT_OUTER_PRODUCT_OPTIMAL = 3 | ||
| 40 | }; | ||
| 41 | |||
| 42 | // | ||
| 43 | // Helper for signedness | ||
| 44 | // | ||
| 45 | namespace details { | ||
| 46 | |||
| 47 | template <typename T> struct IsUnsigned {}; | ||
| 48 | |||
| 49 | #define _SPECIALIZE_ISUNSIGNED(type, value) \ | ||
| 50 | template <> struct IsUnsigned<type> { \ | ||
| 51 | static const bool Value = value; \ | ||
| 52 | } | ||
| 53 | |||
| 54 | _SPECIALIZE_ISUNSIGNED(uint8_t4_packed, true); | ||
| 55 | _SPECIALIZE_ISUNSIGNED(int8_t4_packed, true); | ||
| 56 | _SPECIALIZE_ISUNSIGNED(uint32_t, true); | ||
| 57 | _SPECIALIZE_ISUNSIGNED(int32_t, false); | ||
| 58 | _SPECIALIZE_ISUNSIGNED(float32_t, false); | ||
| 59 | |||
| 60 | #ifdef __HLSL_ENABLE_16_BIT | ||
| 61 | _SPECIALIZE_ISUNSIGNED(uint16_t, true); | ||
| 62 | _SPECIALIZE_ISUNSIGNED(int16_t, false); | ||
| 63 | _SPECIALIZE_ISUNSIGNED(float16_t, false); | ||
| 64 | #else // //__HLSL_ENABLE_16_BIT | ||
| 65 | _SPECIALIZE_ISUNSIGNED(half, false); | ||
| 66 | #endif //__HLSL_ENABLE_16_BIT | ||
| 67 | |||
| 68 | #undef _SPECIALIZE_ISUNSIGNED | ||
| 69 | |||
| 70 | } // namespace details | ||
| 71 | |||
| 72 | // | ||
| 73 | // (RW)MatrixRef | ||
| 74 | // | ||
| 75 | |||
| 76 | template <typename BufferTy, DataType DT, uint M, uint K, MatrixLayout ML, | ||
| 77 | bool Transpose> | ||
| 78 | struct MatrixRefImpl { | ||
| 79 | BufferTy Buffer; | ||
| 80 | uint StartOffset; | ||
| 81 | uint Stride; | ||
| 82 | }; | ||
| 83 | |||
| 84 | template <DataType DT, uint M, uint K, MatrixLayout ML, bool Transpose = false> | ||
| 85 | using MatrixRef = MatrixRefImpl<ByteAddressBuffer, DT, M, K, ML, Transpose>; | ||
| 86 | |||
| 87 | template <DataType DT, uint M, uint K, MatrixLayout ML, bool Transpose = false> | ||
| 88 | using RWMatrixRef = MatrixRefImpl<RWByteAddressBuffer, DT, M, K, ML, Transpose>; | ||
| 89 | |||
| 90 | // | ||
| 91 | // (RW)VectorRef | ||
| 92 | // | ||
| 93 | |||
| 94 | template <typename BufferTy, DataType DT> struct VectorRefImpl { | ||
| 95 | BufferTy Buffer; | ||
| 96 | uint StartOffset; | ||
| 97 | }; | ||
| 98 | |||
| 99 | template <DataType DT> using VectorRef = VectorRefImpl<ByteAddressBuffer, DT>; | ||
| 100 | |||
| 101 | template <DataType DT> | ||
| 102 | using RWVectorRef = VectorRefImpl<RWByteAddressBuffer, DT>; | ||
| 103 | |||
| 104 | // | ||
| 105 | // Vector | ||
| 106 | // | ||
| 107 | |||
| 108 | template <typename T, int N, DataType DT> struct InterpretedVector { | ||
| 109 | vector<T, N> Data; | ||
| 110 | }; | ||
| 111 | |||
| 112 | template <DataType DT, typename T, int N> | ||
| 113 | InterpretedVector<T, N, DT> MakeInterpretedVector(vector<T, N> Vec) { | ||
| 114 | InterpretedVector<T, N, DT> IV = {Vec}; | ||
| 115 | return IV; | ||
| 116 | } | ||
| 117 | |||
| 118 | // | ||
| 119 | // Mul | ||
| 120 | // | ||
| 121 | |||
| 122 | template <typename OutputElTy, typename InputElTy, int InputElCount, | ||
| 123 | typename MatrixBufferTy, DataType InputDT, DataType MatrixDT, | ||
| 124 | uint MatrixM, uint MatrixK, MatrixLayout MatrixLayout, | ||
| 125 | bool MatrixTranspose> | ||
| 126 | vector<OutputElTy, MatrixM> | ||
| 127 | Mul(MatrixRefImpl<MatrixBufferTy, MatrixDT, MatrixM, MatrixK, MatrixLayout, | ||
| 128 | MatrixTranspose> | ||
| 129 | Matrix, | ||
| 130 | InterpretedVector<InputElTy, InputElCount, InputDT> InputVector) { | ||
| 131 | |||
| 132 | vector<OutputElTy, MatrixM> OutputVector; | ||
| 133 | |||
| 134 | __builtin_MatVecMul( | ||
| 135 | /*out*/ OutputVector, details::IsUnsigned<OutputElTy>::Value, | ||
| 136 | InputVector.Data, details::IsUnsigned<InputElTy>::Value, InputDT, | ||
| 137 | Matrix.Buffer, Matrix.StartOffset, MatrixDT, MatrixM, MatrixK, | ||
| 138 | MatrixLayout, MatrixTranspose, Matrix.Stride); | ||
| 139 | |||
| 140 | return OutputVector; | ||
| 141 | } | ||
| 142 | |||
| 143 | // | ||
| 144 | // MulAdd | ||
| 145 | // | ||
| 146 | |||
| 147 | template <typename OutputElTy, typename InputElTy, int InputElCount, | ||
| 148 | typename MatrixBufferTy, DataType InputDT, DataType MatrixDT, | ||
| 149 | uint MatrixM, uint MatrixK, MatrixLayout MatrixLayout, | ||
| 150 | bool MatrixTranspose, typename BiasVectorBufferTy, | ||
| 151 | DataType BiasVectorDT> | ||
| 152 | vector<OutputElTy, MatrixM> | ||
| 153 | MulAdd(MatrixRefImpl<MatrixBufferTy, MatrixDT, MatrixM, MatrixK, MatrixLayout, | ||
| 154 | MatrixTranspose> | ||
| 155 | Matrix, | ||
| 156 | InterpretedVector<InputElTy, InputElCount, InputDT> InputVector, | ||
| 157 | VectorRefImpl<BiasVectorBufferTy, BiasVectorDT> BiasVector) { | ||
| 158 | |||
| 159 | vector<OutputElTy, MatrixM> OutputVector; | ||
| 160 | |||
| 161 | __builtin_MatVecMulAdd( | ||
| 162 | /*out*/ OutputVector, details::IsUnsigned<OutputElTy>::Value, | ||
| 163 | InputVector.Data, details::IsUnsigned<InputElTy>::Value, InputDT, | ||
| 164 | Matrix.Buffer, Matrix.StartOffset, MatrixDT, MatrixM, MatrixK, | ||
| 165 | MatrixLayout, MatrixTranspose, Matrix.Stride, BiasVector.Buffer, | ||
| 166 | BiasVector.StartOffset, BiasVectorDT); | ||
| 167 | |||
| 168 | return OutputVector; | ||
| 169 | } | ||
| 170 | |||
| 171 | // | ||
| 172 | // OuterProductAccumulate | ||
| 173 | // | ||
| 174 | |||
| 175 | template <typename ElTy, int MatrixM, int MatrixN, DataType MatrixDT, | ||
| 176 | MatrixLayout MatrixLayout> | ||
| 177 | void OuterProductAccumulate( | ||
| 178 | vector<ElTy, MatrixM> InputVector1, vector<ElTy, MatrixN> InputVector2, | ||
| 179 | RWMatrixRef<MatrixDT, MatrixM, MatrixN, MatrixLayout, false> Matrix) { | ||
| 180 | __builtin_OuterProductAccumulate(InputVector1, InputVector2, Matrix.Buffer, | ||
| 181 | Matrix.StartOffset, MatrixDT, MatrixLayout, | ||
| 182 | Matrix.Stride); | ||
| 183 | } | ||
| 184 | |||
| 185 | // | ||
| 186 | // VectorAccumulate | ||
| 187 | // | ||
| 188 | |||
| 189 | template <typename ElTy, int ElCount> | ||
| 190 | void VectorAccumulate(vector<ElTy, ElCount> InputVector, | ||
| 191 | RWByteAddressBuffer Buffer, uint Offset) { | ||
| 192 | __builtin_VectorAccumulate(InputVector, Buffer, Offset); | ||
| 193 | } | ||
| 194 | |||
| 195 | } // namespace linalg | ||
| 196 | } // namespace dx | ||
| 197 | |||
| 198 | #endif // SM 6.9 check and HV version check | ||
diff --git a/contrib/dxc_2025_07_14/inc/hlsl/vk/khr/cooperative_matrix.h b/contrib/dxc_2025_07_14/inc/hlsl/vk/khr/cooperative_matrix.h new file mode 100644 index 0000000..a53ab4c --- /dev/null +++ b/contrib/dxc_2025_07_14/inc/hlsl/vk/khr/cooperative_matrix.h | |||
| @@ -0,0 +1,275 @@ | |||
| 1 | // Copyright (c) 2024 Google LLC | ||
| 2 | // | ||
| 3 | // This file is licensed under the Apache License v2.0 with LLVM Exceptions. | ||
| 4 | // See https://llvm.org/LICENSE.txt for license information. | ||
| 5 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | ||
| 6 | |||
| 7 | #ifndef _HLSL_VK_KHR_COOPERATIVE_MATRIX_H_ | ||
| 8 | #define _HLSL_VK_KHR_COOPERATIVE_MATRIX_H_ | ||
| 9 | |||
| 10 | #if __SPIRV_MAJOR_VERSION__ == 1 && __SPIRV_MINOR_VERSION__ < 6 | ||
| 11 | #error "CooperativeMatrix requires a minimum of SPIR-V 1.6" | ||
| 12 | #endif | ||
| 13 | |||
| 14 | #include "vk/spirv.h" | ||
| 15 | |||
| 16 | namespace vk { | ||
| 17 | namespace khr { | ||
| 18 | |||
| 19 | // The base cooperative matrix class. The template arguments correspond to the | ||
| 20 | // operands in the OpTypeCooperativeMatrixKHR instruction. | ||
| 21 | template <typename ComponentType, Scope scope, uint rows, uint columns, | ||
| 22 | CooperativeMatrixUse use> | ||
| 23 | class CooperativeMatrix { | ||
| 24 | template <class NewComponentType> | ||
| 25 | CooperativeMatrix<NewComponentType, scope, rows, columns, use> cast(); | ||
| 26 | |||
| 27 | // Apply OpSNegate or OFNegate, depending on ComponentType, in a element by | ||
| 28 | // element manner. | ||
| 29 | CooperativeMatrix negate(); | ||
| 30 | |||
| 31 | // Apply OpIAdd or OFAdd, depending on ComponentType, in a element by element | ||
| 32 | // manner. | ||
| 33 | CooperativeMatrix operator+(CooperativeMatrix other); | ||
| 34 | |||
| 35 | // Apply OpISub or OFSub, depending on ComponentType, in a element by element | ||
| 36 | // manner. | ||
| 37 | CooperativeMatrix operator-(CooperativeMatrix other); | ||
| 38 | |||
| 39 | // Apply OpIMul or OFMul, depending on ComponentType, in a element by element | ||
| 40 | // manner. | ||
| 41 | CooperativeMatrix operator*(CooperativeMatrix other); | ||
| 42 | |||
| 43 | // Apply OpSDiv, OpUDiv or OFDiv, depending on ComponentType, in a element by | ||
| 44 | // element manner. | ||
| 45 | CooperativeMatrix operator/(CooperativeMatrix other); | ||
| 46 | |||
| 47 | // Apply OpMatrixTimesScalar in a element by element manner. | ||
| 48 | CooperativeMatrix operator*(ComponentType scalar); | ||
| 49 | |||
| 50 | // Store the cooperative matrix using OpCooperativeMatrixStoreKHR to | ||
| 51 | // data using the given memory layout, stride, and memory access operands. | ||
| 52 | // `NonPrivatePointer` and `MakePointerAvailable` with the workgroup scope | ||
| 53 | // will be added to the memory access operands to make the memory coherent. | ||
| 54 | // | ||
| 55 | // This function uses a SPIR-V pointer because HLSL does not allow groupshared | ||
| 56 | // memory object to be passed by reference. The pointer is a hack to get | ||
| 57 | // around that. | ||
| 58 | // | ||
| 59 | // The layout and stride will be passed to the SPIR-V instruction as is. The | ||
| 60 | // precise meaning can be found in the specification for | ||
| 61 | // SPV_KHR_cooperative_matrix. | ||
| 62 | template <uint32_t memoryAccessOperands, CooperativeMatrixLayout layout, | ||
| 63 | class Type> | ||
| 64 | void Store(WorkgroupSpirvPointer<Type> data, uint32_t stride); | ||
| 65 | |||
| 66 | // Same as above, but uses MemoryAccessMaskNone for the memory access | ||
| 67 | // operands. | ||
| 68 | template <CooperativeMatrixLayout layout, class Type> | ||
| 69 | void Store(WorkgroupSpirvPointer<Type> data, uint32_t stride) { | ||
| 70 | Store<MemoryAccessMaskNone, layout>(data, stride); | ||
| 71 | } | ||
| 72 | |||
| 73 | // Store the cooperative matrix using OpCooperativeMatrixStoreKHR to | ||
| 74 | // data[index] using the given memory layout, stride, and memory access | ||
| 75 | // operands. The layout and stride will be passed to the SPIR-V instruction as | ||
| 76 | // is. The precise meaning can be found in the specification for | ||
| 77 | // SPV_KHR_cooperative_matrix. | ||
| 78 | template <uint32_t memoryAccessOperands, CooperativeMatrixLayout layout, | ||
| 79 | class Type> | ||
| 80 | void Store(RWStructuredBuffer<Type> data, uint32_t index, uint32_t stride); | ||
| 81 | |||
| 82 | // Same as above, but uses MemoryAccessMaskNone for the memory access | ||
| 83 | // operands. | ||
| 84 | template <CooperativeMatrixLayout layout, class Type> | ||
| 85 | void Store(RWStructuredBuffer<Type> data, uint32_t index, uint32_t stride) { | ||
| 86 | Store<MemoryAccessMaskNone, layout>(data, index, stride); | ||
| 87 | } | ||
| 88 | |||
| 89 | // Store the cooperative matrix using OpCooperativeMatrixStoreKHR to | ||
| 90 | // data[index] using the given memory layout, stride, and memory access | ||
| 91 | // operands. `NonPrivatePointer` and `MakePointerAvailable` with the | ||
| 92 | // QueueFamily scope will be added to the memory access operands to make the | ||
| 93 | // memory coherent. | ||
| 94 | // | ||
| 95 | // The layout and stride will be passed to the SPIR-V instruction as is. The | ||
| 96 | // precise meaning can be found in the specification for | ||
| 97 | // SPV_KHR_cooperative_matrix. | ||
| 98 | template <uint32_t memoryAccessOperands, CooperativeMatrixLayout layout, | ||
| 99 | class Type> | ||
| 100 | void CoherentStore(globallycoherent RWStructuredBuffer<Type> data, | ||
| 101 | uint32_t index, uint32_t stride); | ||
| 102 | |||
| 103 | // Same as above, but uses MemoryAccessMaskNone for the memory access operands | ||
| 104 | // template argument. | ||
| 105 | template <CooperativeMatrixLayout layout, class Type> | ||
| 106 | void CoherentStore(globallycoherent RWStructuredBuffer<Type> data, | ||
| 107 | uint32_t index, uint32_t stride) { | ||
| 108 | CoherentStore<MemoryAccessMaskNone, layout>(data, index, stride); | ||
| 109 | } | ||
| 110 | |||
| 111 | // Loads a cooperative matrix using OpCooperativeMatrixLoadKHR from | ||
| 112 | // data using the given memory layout, stride, and memory access operands. | ||
| 113 | // `NonPrivatePointer` and `MakePointerVisible` with the workgroup scope | ||
| 114 | // will be added to the memory access operands to make the memory coherent. | ||
| 115 | // | ||
| 116 | // This function uses a SPIR-V pointer because HLSL does not allow groupshared | ||
| 117 | // memory object to be passed by reference. The pointer is a hack to get | ||
| 118 | // around that. | ||
| 119 | // | ||
| 120 | // The layout and stride will be passed to the SPIR-V instruction as is. The | ||
| 121 | // precise meaning can be found in the specification for | ||
| 122 | // SPV_KHR_cooperative_matrix. | ||
| 123 | template <uint32_t memoryAccessOperands, CooperativeMatrixLayout layout, | ||
| 124 | class Type> | ||
| 125 | static CooperativeMatrix Load(WorkgroupSpirvPointer<Type> data, | ||
| 126 | uint32_t stride); | ||
| 127 | |||
| 128 | // Same as above, but uses MemoryAccessMaskNone for the memory access | ||
| 129 | // operands. | ||
| 130 | template <CooperativeMatrixLayout layout, class Type> | ||
| 131 | static CooperativeMatrix Load(WorkgroupSpirvPointer<Type> data, | ||
| 132 | uint32_t stride) { | ||
| 133 | return Load<MemoryAccessMaskNone, layout>(data, stride); | ||
| 134 | } | ||
| 135 | |||
| 136 | // Loads a cooperative matrix using OpCooperativeMatrixLoadKHR from | ||
| 137 | // data[index] using the given memory layout, stride, and memory access | ||
| 138 | // operands. | ||
| 139 | // | ||
| 140 | // The layout and stride will be passed to the SPIR-V instruction as is. The | ||
| 141 | // precise meaning can be found in the specification for | ||
| 142 | // SPV_KHR_cooperative_matrix. | ||
| 143 | template <uint32_t memoryAccessOperands, CooperativeMatrixLayout layout, | ||
| 144 | class Type> | ||
| 145 | static CooperativeMatrix Load(RWStructuredBuffer<Type> data, uint32_t index, | ||
| 146 | uint32_t stride); | ||
| 147 | |||
| 148 | // Same as above, but uses MemoryAccessMaskNone for the memory access | ||
| 149 | // operands. | ||
| 150 | template <CooperativeMatrixLayout layout, class Type> | ||
| 151 | static CooperativeMatrix Load(RWStructuredBuffer<Type> data, uint32_t index, | ||
| 152 | uint32_t stride) { | ||
| 153 | return Load<MemoryAccessMaskNone, layout>(data, index, stride); | ||
| 154 | } | ||
| 155 | |||
| 156 | // Loads a cooperative matrix using OpCooperativeMatrixLoadKHR from | ||
| 157 | // data[index] using the given memory layout, stride, and memory access | ||
| 158 | // operands. `NonPrivatePointer` and `MakePointerVisible` with the QueueFamily | ||
| 159 | // scope will be added to the memory access operands to make the memory | ||
| 160 | // coherent. | ||
| 161 | // | ||
| 162 | // | ||
| 163 | // The layout and stride will be passed to the SPIR-V instruction as is. The | ||
| 164 | // precise meaning can be found in the specification for | ||
| 165 | // SPV_KHR_cooperative_matrix. | ||
| 166 | template <uint32_t memoryAccessOperands, CooperativeMatrixLayout layout, | ||
| 167 | class Type> | ||
| 168 | static CooperativeMatrix | ||
| 169 | CoherentLoad(globallycoherent RWStructuredBuffer<Type> data, uint32_t index, | ||
| 170 | uint32_t stride); | ||
| 171 | |||
| 172 | // Same as above, but uses MemoryAccessMaskNone for the memory access operands | ||
| 173 | // template argument. | ||
| 174 | template <CooperativeMatrixLayout layout, class Type> | ||
| 175 | static CooperativeMatrix | ||
| 176 | CoherentLoad(globallycoherent RWStructuredBuffer<Type> data, uint32_t index, | ||
| 177 | uint32_t stride) { | ||
| 178 | return CoherentLoad<MemoryAccessMaskNone, layout>(data, index, stride); | ||
| 179 | } | ||
| 180 | |||
| 181 | // Loads a cooperative matrix using OpCooperativeMatrixLoadKHR from | ||
| 182 | // data[index] using the given memory layout, stride, and memory access | ||
| 183 | // operands. No memory access bits are added to the operands. Since the memory | ||
| 184 | // is readonly, there should be no need. | ||
| 185 | // | ||
| 186 | // The layout and stride will be passed to the SPIR-V instruction as is. The | ||
| 187 | // precise meaning can be found in the specification for | ||
| 188 | // SPV_KHR_cooperative_matrix. | ||
| 189 | template <uint32_t memoryAccessOperands, CooperativeMatrixLayout layout, | ||
| 190 | class Type> | ||
| 191 | static CooperativeMatrix Load(StructuredBuffer<Type> data, uint32_t index, | ||
| 192 | uint32_t stride); | ||
| 193 | |||
| 194 | // Same as above, but uses MemoryAccessMaskNone for the memory access | ||
| 195 | // operands. | ||
| 196 | template <CooperativeMatrixLayout layout, class Type> | ||
| 197 | static CooperativeMatrix Load(StructuredBuffer<Type> data, uint32_t index, | ||
| 198 | uint32_t stride) { | ||
| 199 | return Load<MemoryAccessMaskNone, layout>(data, index, stride); | ||
| 200 | } | ||
| 201 | |||
| 202 | // Constructs a cooperative matrix with all values initialized to v. Note that | ||
| 203 | // all threads in scope must have the same value for v. | ||
| 204 | static CooperativeMatrix Splat(ComponentType v); | ||
| 205 | |||
| 206 | // Returns the result of OpCooperativeMatrixLengthKHR on the current type. | ||
| 207 | static uint32_t GetLength(); | ||
| 208 | |||
| 209 | // Functions to access the elements of the cooperative matrix. The index must | ||
| 210 | // be less than GetLength(). | ||
| 211 | void Set(ComponentType value, uint32_t index); | ||
| 212 | ComponentType Get(uint32_t index); | ||
| 213 | |||
| 214 | static const bool hasSignedIntegerComponentType = | ||
| 215 | (ComponentType(0) - ComponentType(1) < ComponentType(0)); | ||
| 216 | |||
| 217 | // clang-format off | ||
| 218 | using SpirvMatrixType = vk::SpirvOpaqueType< | ||
| 219 | /* OpTypeCooperativeMatrixKHR */ 4456, ComponentType, | ||
| 220 | vk::integral_constant<uint, scope>, vk::integral_constant<uint, rows>, | ||
| 221 | vk::integral_constant<uint, columns>, vk::integral_constant<uint, use> >; | ||
| 222 | |||
| 223 | [[vk::ext_extension("SPV_KHR_cooperative_matrix")]] | ||
| 224 | [[vk::ext_capability(/* CooperativeMatrixKHRCapability */ 6022)]] | ||
| 225 | [[vk::ext_capability(/* VulkanMemoryModel */ 5345)]] | ||
| 226 | SpirvMatrixType _matrix; | ||
| 227 | // clang-format on | ||
| 228 | }; | ||
| 229 | |||
| 230 | // Cooperative matrix that can be used in the "a" position of a multiply add | ||
| 231 | // instruction (r = (a * b) + c). | ||
| 232 | template <typename ComponentType, Scope scope, uint rows, uint columns> | ||
| 233 | using CooperativeMatrixA = | ||
| 234 | CooperativeMatrix<ComponentType, scope, rows, columns, | ||
| 235 | CooperativeMatrixUseMatrixAKHR>; | ||
| 236 | |||
| 237 | // Cooperative matrix that can be used in the "b" position of a multiply add | ||
| 238 | // instruction (r = (a * b) + c). | ||
| 239 | template <typename ComponentType, Scope scope, uint rows, uint columns> | ||
| 240 | using CooperativeMatrixB = | ||
| 241 | CooperativeMatrix<ComponentType, scope, rows, columns, | ||
| 242 | CooperativeMatrixUseMatrixBKHR>; | ||
| 243 | |||
| 244 | // Cooperative matrix that can be used in the "r" and "c" position of a multiply | ||
| 245 | // add instruction (r = (a * b) + c). | ||
| 246 | template <typename ComponentType, Scope scope, uint rows, uint columns> | ||
| 247 | using CooperativeMatrixAccumulator = | ||
| 248 | CooperativeMatrix<ComponentType, scope, rows, columns, | ||
| 249 | CooperativeMatrixUseMatrixAccumulatorKHR>; | ||
| 250 | |||
| 251 | // Returns the result of OpCooperativeMatrixMulAddKHR when applied to a, b, and | ||
| 252 | // c. The cooperative matrix operands are inferred, with the | ||
| 253 | // SaturatingAccumulationKHR bit not set. | ||
| 254 | template <typename ComponentType, Scope scope, uint rows, uint columns, uint K> | ||
| 255 | CooperativeMatrixAccumulator<ComponentType, scope, rows, columns> | ||
| 256 | cooperativeMatrixMultiplyAdd( | ||
| 257 | CooperativeMatrixA<ComponentType, scope, rows, K> a, | ||
| 258 | CooperativeMatrixB<ComponentType, scope, K, columns> b, | ||
| 259 | CooperativeMatrixAccumulator<ComponentType, scope, rows, columns> c); | ||
| 260 | |||
| 261 | // Returns the result of OpCooperativeMatrixMulAddKHR when applied to a, b, and | ||
| 262 | // c. The cooperative matrix operands are inferred, with the | ||
| 263 | // SaturatingAccumulationKHR bit set. | ||
| 264 | template <typename ComponentType, Scope scope, uint rows, uint columns, uint K> | ||
| 265 | CooperativeMatrixAccumulator<ComponentType, scope, rows, columns> | ||
| 266 | cooperativeMatrixSaturatingMultiplyAdd( | ||
| 267 | CooperativeMatrixA<ComponentType, scope, rows, K> a, | ||
| 268 | CooperativeMatrixB<ComponentType, scope, K, columns> b, | ||
| 269 | CooperativeMatrixAccumulator<ComponentType, scope, rows, columns> c); | ||
| 270 | |||
| 271 | } // namespace khr | ||
| 272 | } // namespace vk | ||
| 273 | |||
| 274 | #include "cooperative_matrix.impl" | ||
| 275 | #endif // _HLSL_VK_KHR_COOPERATIVE_MATRIX_H_ | ||
diff --git a/contrib/dxc_2025_07_14/inc/hlsl/vk/khr/cooperative_matrix.impl b/contrib/dxc_2025_07_14/inc/hlsl/vk/khr/cooperative_matrix.impl new file mode 100644 index 0000000..2acae8e --- /dev/null +++ b/contrib/dxc_2025_07_14/inc/hlsl/vk/khr/cooperative_matrix.impl | |||
| @@ -0,0 +1,377 @@ | |||
| 1 | // Copyright (c) 2024 Google LLC | ||
| 2 | // | ||
| 3 | // This file is licensed under the Apache License v2.0 with LLVM Exceptions. | ||
| 4 | // See https://llvm.org/LICENSE.txt for license information. | ||
| 5 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | ||
| 6 | |||
| 7 | #include "vk/opcode_selector.h" | ||
| 8 | |||
| 9 | template <typename ResultType, typename ComponentType> | ||
| 10 | [[vk::ext_instruction(/* OpMatrixTimesScalar */ 143)]] ResultType | ||
| 11 | __builtin_spv_MatrixTimesScalar(ResultType a, ComponentType b); | ||
| 12 | |||
| 13 | template <typename ComponentType, vk::Scope scope, uint rows, uint columns, | ||
| 14 | vk::CooperativeMatrixUse use> | ||
| 15 | [[vk::ext_instruction(/* OpCompositeExtract */ 81)]] ComponentType | ||
| 16 | __builtin_spv_ExtractFromCooperativeMatrix( | ||
| 17 | typename vk::khr::CooperativeMatrix<ComponentType, scope, rows, columns, | ||
| 18 | use>::SpirvMatrixType matrix, | ||
| 19 | uint32_t index); | ||
| 20 | |||
| 21 | template <typename CoopMatrixType, typename ComponentType> | ||
| 22 | [[vk::ext_instruction(/* OpCompositeConstruct */ 80)]] CoopMatrixType | ||
| 23 | __builtin_spv_ConstructCooperativeMatrix(ComponentType value); | ||
| 24 | |||
| 25 | template <class ResultPointerType, class BaseType> | ||
| 26 | [[vk::ext_instruction(/* OpAccessChain */ 65)]] ResultPointerType | ||
| 27 | __builtin_spv_AccessChain([[vk::ext_reference]] BaseType base, uint32_t index); | ||
| 28 | |||
| 29 | template <class ObjectType, class PointerType> | ||
| 30 | [[vk::ext_instruction(/* OpLoad */ 61)]] ObjectType | ||
| 31 | __builtin_spv_LoadPointer(PointerType base); | ||
| 32 | |||
| 33 | template <class PointerType, class ObjectType> | ||
| 34 | [[vk::ext_instruction(/* OpLoad */ 62)]] void | ||
| 35 | __builtin_spv_StorePointer(PointerType base, ObjectType object); | ||
| 36 | |||
| 37 | template <typename ComponentType, vk::Scope scope, uint rows, uint columns, | ||
| 38 | vk::CooperativeMatrixUse use> | ||
| 39 | [[vk::ext_instruction(/* OpCompositeInsert */ 82)]] | ||
| 40 | typename vk::khr::CooperativeMatrix<ComponentType, scope, rows, columns, | ||
| 41 | use>::SpirvMatrixType | ||
| 42 | __builtin_spv_InsertIntoCooperativeMatrix( | ||
| 43 | ComponentType value, | ||
| 44 | typename vk::khr::CooperativeMatrix<ComponentType, scope, rows, columns, | ||
| 45 | use>::SpirvMatrixType matrix, | ||
| 46 | uint32_t index); | ||
| 47 | |||
| 48 | // Define the load and store instructions | ||
| 49 | template <typename ResultType, typename PointerType> | ||
| 50 | [[vk::ext_instruction(/* OpCooperativeMatrixLoadKHR */ 4457)]] ResultType | ||
| 51 | __builtin_spv_CooperativeMatrixLoadKHR( | ||
| 52 | [[vk::ext_reference]] PointerType pointer, | ||
| 53 | vk::CooperativeMatrixLayout memory_layout, uint stride, | ||
| 54 | [[vk::ext_literal]] uint32_t memory_operand); | ||
| 55 | |||
| 56 | template <typename ResultType, typename PointerType> | ||
| 57 | [[vk::ext_instruction(/* OpCooperativeMatrixLoadKHR */ 4457)]] ResultType | ||
| 58 | __builtin_spv_CooperativeMatrixLoadKHR( | ||
| 59 | [[vk::ext_reference]] PointerType pointer, | ||
| 60 | vk::CooperativeMatrixLayout memory_layout, uint stride, | ||
| 61 | [[vk::ext_literal]] uint32_t memory_operand, vk::Scope scope); | ||
| 62 | |||
| 63 | template <typename ResultType, typename PointerType> | ||
| 64 | [[vk::ext_instruction(/* OpCooperativeMatrixLoadKHR */ 4457)]] ResultType | ||
| 65 | __builtin_spv_CooperativeMatrixWorkgroupLoadKHR( | ||
| 66 | vk::WorkgroupSpirvPointer<PointerType> pointer, | ||
| 67 | vk::CooperativeMatrixLayout memory_layout, uint stride, | ||
| 68 | [[vk::ext_literal]] uint32_t memory_operand, vk::Scope scope); | ||
| 69 | |||
| 70 | template <typename ObjectType, typename PointerType> | ||
| 71 | [[vk::ext_instruction(/* OpCooperativeMatrixStoreKHR */ 4458)]] void | ||
| 72 | __builtin_spv_CooperativeMatrixStoreKHR( | ||
| 73 | [[vk::ext_reference]] PointerType pointer, ObjectType object, | ||
| 74 | vk::CooperativeMatrixLayout memory_layout, uint stride, | ||
| 75 | [[vk::ext_literal]] uint32_t memory_operand, vk::Scope scope); | ||
| 76 | |||
| 77 | template <typename ObjectType, typename PointerType> | ||
| 78 | [[vk::ext_instruction(/* OpCooperativeMatrixStoreKHR */ 4458)]] void | ||
| 79 | __builtin_spv_CooperativeMatrixStoreKHR( | ||
| 80 | [[vk::ext_reference]] PointerType pointer, ObjectType object, | ||
| 81 | vk::CooperativeMatrixLayout memory_layout, uint stride, | ||
| 82 | [[vk::ext_literal]] uint32_t memory_operand); | ||
| 83 | |||
| 84 | template <typename ObjectType, typename PointerType> | ||
| 85 | [[vk::ext_instruction(/* OpCooperativeMatrixStoreKHR */ 4458)]] void | ||
| 86 | __builtin_spv_CooperativeMatrixWorkgroupStoreKHR( | ||
| 87 | vk::WorkgroupSpirvPointer<PointerType> pointer, ObjectType object, | ||
| 88 | vk::CooperativeMatrixLayout memory_layout, uint stride, | ||
| 89 | [[vk::ext_literal]] uint32_t memory_operand, vk::Scope scope); | ||
| 90 | |||
| 91 | // We cannot define `OpCooperativeMatrixLengthKHR` using ext_instruction because | ||
| 92 | // one of the operands is a type id. This builtin will have specific code in the | ||
| 93 | // compiler to expand it. | ||
| 94 | template <class MatrixType> uint __builtin_spv_CooperativeMatrixLengthKHR(); | ||
| 95 | |||
| 96 | // Arithmetic Instructions | ||
| 97 | template <typename ResultType, typename MatrixTypeA, typename MatrixTypeB, | ||
| 98 | typename MatrixTypeC> | ||
| 99 | [[vk::ext_instruction(/* OpCooperativeMatrixMulAddKHR */ 4459)]] ResultType | ||
| 100 | __builtin_spv_CooperativeMatrixMulAddKHR(MatrixTypeA a, MatrixTypeB b, | ||
| 101 | MatrixTypeC c, | ||
| 102 | [[vk::ext_literal]] int operands); | ||
| 103 | namespace vk { | ||
| 104 | namespace khr { | ||
| 105 | |||
| 106 | template <class ComponentType, Scope scope, uint rows, uint columns, | ||
| 107 | CooperativeMatrixUse use> | ||
| 108 | template <class NewComponentType> | ||
| 109 | CooperativeMatrix<NewComponentType, scope, rows, columns, use> | ||
| 110 | CooperativeMatrix<ComponentType, scope, rows, columns, use>::cast() { | ||
| 111 | using ResultType = | ||
| 112 | CooperativeMatrix<NewComponentType, scope, rows, columns, use>; | ||
| 113 | ResultType result; | ||
| 114 | result._matrix = util::ConversionSelector<ComponentType, NewComponentType>:: | ||
| 115 | template Convert<typename ResultType::SpirvMatrixType>(_matrix); | ||
| 116 | return result; | ||
| 117 | } | ||
| 118 | |||
| 119 | template <class ComponentType, Scope scope, uint rows, uint columns, | ||
| 120 | CooperativeMatrixUse use> | ||
| 121 | CooperativeMatrix<ComponentType, scope, rows, columns, use> | ||
| 122 | CooperativeMatrix<ComponentType, scope, rows, columns, use>::negate() { | ||
| 123 | CooperativeMatrix result; | ||
| 124 | result._matrix = util::ArithmeticSelector<ComponentType>::Negate(_matrix); | ||
| 125 | return result; | ||
| 126 | } | ||
| 127 | |||
| 128 | template <class ComponentType, Scope scope, uint rows, uint columns, | ||
| 129 | CooperativeMatrixUse use> | ||
| 130 | CooperativeMatrix<ComponentType, scope, rows, columns, use> | ||
| 131 | CooperativeMatrix<ComponentType, scope, rows, columns, use>::operator+( | ||
| 132 | CooperativeMatrix other) { | ||
| 133 | CooperativeMatrix result; | ||
| 134 | result._matrix = | ||
| 135 | util::ArithmeticSelector<ComponentType>::Add(_matrix, other._matrix); | ||
| 136 | return result; | ||
| 137 | } | ||
| 138 | |||
| 139 | template <class ComponentType, Scope scope, uint rows, uint columns, | ||
| 140 | CooperativeMatrixUse use> | ||
| 141 | CooperativeMatrix<ComponentType, scope, rows, columns, use> | ||
| 142 | CooperativeMatrix<ComponentType, scope, rows, columns, use>::operator-( | ||
| 143 | CooperativeMatrix other) { | ||
| 144 | CooperativeMatrix result; | ||
| 145 | result._matrix = | ||
| 146 | util::ArithmeticSelector<ComponentType>::Sub(_matrix, other._matrix); | ||
| 147 | return result; | ||
| 148 | } | ||
| 149 | |||
| 150 | template <class ComponentType, Scope scope, uint rows, uint columns, | ||
| 151 | CooperativeMatrixUse use> | ||
| 152 | CooperativeMatrix<ComponentType, scope, rows, columns, use> | ||
| 153 | CooperativeMatrix<ComponentType, scope, rows, columns, use>::operator*( | ||
| 154 | CooperativeMatrix other) { | ||
| 155 | CooperativeMatrix result; | ||
| 156 | result._matrix = | ||
| 157 | util::ArithmeticSelector<ComponentType>::Mul(_matrix, other._matrix); | ||
| 158 | return result; | ||
| 159 | } | ||
| 160 | |||
| 161 | template <class ComponentType, Scope scope, uint rows, uint columns, | ||
| 162 | CooperativeMatrixUse use> | ||
| 163 | CooperativeMatrix<ComponentType, scope, rows, columns, use> | ||
| 164 | CooperativeMatrix<ComponentType, scope, rows, columns, use>::operator/( | ||
| 165 | CooperativeMatrix other) { | ||
| 166 | CooperativeMatrix result; | ||
| 167 | result._matrix = | ||
| 168 | util::ArithmeticSelector<ComponentType>::Div(_matrix, other._matrix); | ||
| 169 | return result; | ||
| 170 | } | ||
| 171 | |||
| 172 | template <class ComponentType, Scope scope, uint rows, uint columns, | ||
| 173 | CooperativeMatrixUse use> | ||
| 174 | CooperativeMatrix<ComponentType, scope, rows, columns, use> | ||
| 175 | CooperativeMatrix<ComponentType, scope, rows, columns, use>::operator*( | ||
| 176 | ComponentType scalar) { | ||
| 177 | CooperativeMatrix result; | ||
| 178 | result._matrix = __builtin_spv_MatrixTimesScalar(_matrix, scalar); | ||
| 179 | return result; | ||
| 180 | } | ||
| 181 | |||
| 182 | template <class ComponentType, Scope scope, uint rows, uint columns, | ||
| 183 | CooperativeMatrixUse use> | ||
| 184 | template <uint32_t memoryAccessOperands, CooperativeMatrixLayout layout, | ||
| 185 | class Type> | ||
| 186 | void CooperativeMatrix<ComponentType, scope, rows, columns, use>::Store( | ||
| 187 | WorkgroupSpirvPointer<Type> data, uint32_t stride) { | ||
| 188 | __builtin_spv_CooperativeMatrixWorkgroupStoreKHR( | ||
| 189 | data, _matrix, layout, stride, | ||
| 190 | memoryAccessOperands | MemoryAccessNonPrivatePointerMask | | ||
| 191 | MemoryAccessMakePointerAvailableMask, | ||
| 192 | ScopeWorkgroup); | ||
| 193 | } | ||
| 194 | |||
| 195 | template <class ComponentType, Scope scope, uint rows, uint columns, | ||
| 196 | CooperativeMatrixUse use> | ||
| 197 | template <uint32_t memoryAccessOperands, CooperativeMatrixLayout layout, | ||
| 198 | class Type> | ||
| 199 | void CooperativeMatrix<ComponentType, scope, rows, columns, use>::Store( | ||
| 200 | RWStructuredBuffer<Type> data, uint32_t index, uint32_t stride) { | ||
| 201 | __builtin_spv_CooperativeMatrixStoreKHR(data[index], _matrix, layout, stride, | ||
| 202 | memoryAccessOperands); | ||
| 203 | } | ||
| 204 | |||
| 205 | template <class ComponentType, Scope scope, uint rows, uint columns, | ||
| 206 | CooperativeMatrixUse use> | ||
| 207 | template <uint32_t memoryAccessOperands, CooperativeMatrixLayout layout, | ||
| 208 | class Type> | ||
| 209 | void CooperativeMatrix<ComponentType, scope, rows, columns, use>::CoherentStore( | ||
| 210 | globallycoherent RWStructuredBuffer<Type> data, uint32_t index, | ||
| 211 | uint32_t stride) { | ||
| 212 | __builtin_spv_CooperativeMatrixStoreKHR( | ||
| 213 | data[index], _matrix, layout, stride, | ||
| 214 | memoryAccessOperands | MemoryAccessNonPrivatePointerMask | | ||
| 215 | MemoryAccessMakePointerAvailableMask, | ||
| 216 | ScopeQueueFamily); | ||
| 217 | } | ||
| 218 | |||
| 219 | template <class ComponentType, Scope scope, uint rows, uint columns, | ||
| 220 | CooperativeMatrixUse use> | ||
| 221 | template <uint32_t memoryAccessOperands, CooperativeMatrixLayout layout, | ||
| 222 | class Type> | ||
| 223 | CooperativeMatrix<ComponentType, scope, rows, columns, use> | ||
| 224 | CooperativeMatrix<ComponentType, scope, rows, columns, use>::Load( | ||
| 225 | vk::WorkgroupSpirvPointer<Type> buffer, uint32_t stride) { | ||
| 226 | CooperativeMatrix result; | ||
| 227 | result._matrix = | ||
| 228 | __builtin_spv_CooperativeMatrixWorkgroupLoadKHR<SpirvMatrixType>( | ||
| 229 | buffer, layout, stride, | ||
| 230 | memoryAccessOperands | MemoryAccessNonPrivatePointerMask | | ||
| 231 | MemoryAccessMakePointerVisibleMask, | ||
| 232 | ScopeWorkgroup); | ||
| 233 | return result; | ||
| 234 | } | ||
| 235 | |||
| 236 | template <class ComponentType, Scope scope, uint rows, uint columns, | ||
| 237 | CooperativeMatrixUse use> | ||
| 238 | template <uint32_t memoryAccessOperands, CooperativeMatrixLayout layout, | ||
| 239 | class Type> | ||
| 240 | CooperativeMatrix<ComponentType, scope, rows, columns, use> | ||
| 241 | CooperativeMatrix<ComponentType, scope, rows, columns, use>::Load( | ||
| 242 | RWStructuredBuffer<Type> buffer, uint32_t index, uint32_t stride) { | ||
| 243 | CooperativeMatrix result; | ||
| 244 | result._matrix = __builtin_spv_CooperativeMatrixLoadKHR<SpirvMatrixType>( | ||
| 245 | buffer[index], layout, stride, memoryAccessOperands); | ||
| 246 | return result; | ||
| 247 | } | ||
| 248 | |||
| 249 | template <class ComponentType, Scope scope, uint rows, uint columns, | ||
| 250 | CooperativeMatrixUse use> | ||
| 251 | template <uint32_t memoryAccessOperands, CooperativeMatrixLayout layout, | ||
| 252 | class Type> | ||
| 253 | CooperativeMatrix<ComponentType, scope, rows, columns, use> | ||
| 254 | CooperativeMatrix<ComponentType, scope, rows, columns, use>::CoherentLoad( | ||
| 255 | RWStructuredBuffer<Type> buffer, uint32_t index, uint32_t stride) { | ||
| 256 | CooperativeMatrix result; | ||
| 257 | result._matrix = __builtin_spv_CooperativeMatrixLoadKHR<SpirvMatrixType>( | ||
| 258 | buffer[index], layout, stride, | ||
| 259 | memoryAccessOperands | MemoryAccessNonPrivatePointerMask | | ||
| 260 | MemoryAccessMakePointerVisibleMask, | ||
| 261 | ScopeQueueFamily); | ||
| 262 | return result; | ||
| 263 | } | ||
| 264 | |||
| 265 | template <class ComponentType, Scope scope, uint rows, uint columns, | ||
| 266 | CooperativeMatrixUse use> | ||
| 267 | template <uint32_t memoryAccessOperands, CooperativeMatrixLayout layout, | ||
| 268 | class Type> | ||
| 269 | CooperativeMatrix<ComponentType, scope, rows, columns, use> | ||
| 270 | CooperativeMatrix<ComponentType, scope, rows, columns, use>::Load( | ||
| 271 | StructuredBuffer<Type> buffer, uint32_t index, uint32_t stride) { | ||
| 272 | CooperativeMatrix result; | ||
| 273 | result._matrix = __builtin_spv_CooperativeMatrixLoadKHR<SpirvMatrixType>( | ||
| 274 | buffer[index], layout, stride, MemoryAccessMaskNone); | ||
| 275 | return result; | ||
| 276 | } | ||
| 277 | |||
| 278 | template <class ComponentType, Scope scope, uint rows, uint columns, | ||
| 279 | CooperativeMatrixUse use> | ||
| 280 | CooperativeMatrix<ComponentType, scope, rows, columns, use> | ||
| 281 | CooperativeMatrix<ComponentType, scope, rows, columns, use>::Splat( | ||
| 282 | ComponentType v) { | ||
| 283 | CooperativeMatrix result; | ||
| 284 | result._matrix = __builtin_spv_ConstructCooperativeMatrix<SpirvMatrixType>(v); | ||
| 285 | return result; | ||
| 286 | } | ||
| 287 | |||
| 288 | template <class ComponentType, Scope scope, uint rows, uint columns, | ||
| 289 | CooperativeMatrixUse use> | ||
| 290 | uint CooperativeMatrix<ComponentType, scope, rows, columns, use>::GetLength() { | ||
| 291 | return __builtin_spv_CooperativeMatrixLengthKHR<SpirvMatrixType>(); | ||
| 292 | } | ||
| 293 | |||
| 294 | template <class ComponentType, Scope scope, uint rows, uint columns, | ||
| 295 | CooperativeMatrixUse use> | ||
| 296 | ComponentType CooperativeMatrix<ComponentType, scope, rows, columns, use>::Get( | ||
| 297 | uint32_t index) { | ||
| 298 | // clang-format off | ||
| 299 | using ComponentPtr = vk::SpirvOpaqueType< | ||
| 300 | /* OpTypePointer */ 32, | ||
| 301 | /* function storage class */ vk::Literal<vk::integral_constant<uint, 7> >, | ||
| 302 | ComponentType>; | ||
| 303 | // clang-format on | ||
| 304 | ComponentPtr ptr = __builtin_spv_AccessChain<ComponentPtr>(_matrix, index); | ||
| 305 | return __builtin_spv_LoadPointer<ComponentType>(ptr); | ||
| 306 | } | ||
| 307 | |||
| 308 | template <class ComponentType, Scope scope, uint rows, uint columns, | ||
| 309 | CooperativeMatrixUse use> | ||
| 310 | void CooperativeMatrix<ComponentType, scope, rows, columns, use>::Set( | ||
| 311 | ComponentType value, uint32_t index) { | ||
| 312 | // clang-format off | ||
| 313 | using ComponentPtr = vk::SpirvOpaqueType< | ||
| 314 | /* OpTypePointer */ 32, | ||
| 315 | /* function storage class */ vk::Literal<vk::integral_constant<uint, 7> >, | ||
| 316 | ComponentType>; | ||
| 317 | // clang-format on | ||
| 318 | ComponentPtr ptr = __builtin_spv_AccessChain<ComponentPtr>(_matrix, index); | ||
| 319 | return __builtin_spv_StorePointer(ptr, value); | ||
| 320 | } | ||
| 321 | |||
| 322 | template <typename ComponentType, Scope scope, uint rows, uint columns, uint K> | ||
| 323 | CooperativeMatrixAccumulator<ComponentType, scope, rows, columns> | ||
| 324 | cooperativeMatrixMultiplyAdd( | ||
| 325 | CooperativeMatrixA<ComponentType, scope, rows, K> a, | ||
| 326 | CooperativeMatrixB<ComponentType, scope, K, columns> b, | ||
| 327 | CooperativeMatrixAccumulator<ComponentType, scope, rows, columns> c) { | ||
| 328 | |||
| 329 | const vk::CooperativeMatrixOperandsMask allSignedComponents = | ||
| 330 | vk::CooperativeMatrixOperandsMatrixASignedComponentsKHRMask | | ||
| 331 | vk::CooperativeMatrixOperandsMatrixBSignedComponentsKHRMask | | ||
| 332 | vk::CooperativeMatrixOperandsMatrixCSignedComponentsKHRMask | | ||
| 333 | vk::CooperativeMatrixOperandsMatrixResultSignedComponentsKHRMask; | ||
| 334 | |||
| 335 | const vk::CooperativeMatrixOperandsMask operands = | ||
| 336 | (vk::CooperativeMatrixOperandsMask)( | ||
| 337 | a.hasSignedIntegerComponentType | ||
| 338 | ? allSignedComponents | ||
| 339 | : vk::CooperativeMatrixOperandsMaskNone); | ||
| 340 | |||
| 341 | CooperativeMatrixAccumulator<ComponentType, scope, rows, columns> result; | ||
| 342 | result._matrix = __builtin_spv_CooperativeMatrixMulAddKHR< | ||
| 343 | typename CooperativeMatrixAccumulator<ComponentType, scope, rows, | ||
| 344 | columns>::SpirvMatrixType>( | ||
| 345 | a._matrix, b._matrix, c._matrix, operands); | ||
| 346 | return result; | ||
| 347 | } | ||
| 348 | |||
| 349 | template <typename ComponentType, Scope scope, uint rows, uint columns, uint K> | ||
| 350 | CooperativeMatrixAccumulator<ComponentType, scope, rows, columns> | ||
| 351 | cooperativeMatrixSaturatingMultiplyAdd( | ||
| 352 | CooperativeMatrixA<ComponentType, scope, rows, K> a, | ||
| 353 | CooperativeMatrixB<ComponentType, scope, K, columns> b, | ||
| 354 | CooperativeMatrixAccumulator<ComponentType, scope, rows, columns> c) { | ||
| 355 | |||
| 356 | const vk::CooperativeMatrixOperandsMask allSignedComponents = | ||
| 357 | vk::CooperativeMatrixOperandsMatrixASignedComponentsKHRMask | | ||
| 358 | vk::CooperativeMatrixOperandsMatrixBSignedComponentsKHRMask | | ||
| 359 | vk::CooperativeMatrixOperandsMatrixCSignedComponentsKHRMask | | ||
| 360 | vk::CooperativeMatrixOperandsMatrixResultSignedComponentsKHRMask | | ||
| 361 | vk::CooperativeMatrixOperandsSaturatingAccumulationKHRMask; | ||
| 362 | |||
| 363 | const vk::CooperativeMatrixOperandsMask operands = | ||
| 364 | (vk::CooperativeMatrixOperandsMask)( | ||
| 365 | a.hasSignedIntegerComponentType | ||
| 366 | ? allSignedComponents | ||
| 367 | : vk::CooperativeMatrixOperandsSaturatingAccumulationKHRMask); | ||
| 368 | CooperativeMatrixAccumulator<ComponentType, scope, rows, columns> result; | ||
| 369 | result._matrix = __builtin_spv_CooperativeMatrixMulAddKHR< | ||
| 370 | typename CooperativeMatrixAccumulator<ComponentType, scope, rows, | ||
| 371 | columns>::SpirvMatrixType>( | ||
| 372 | a._matrix, b._matrix, c._matrix, operands); | ||
| 373 | return result; | ||
| 374 | } | ||
| 375 | |||
| 376 | } // namespace khr | ||
| 377 | } // namespace vk | ||
diff --git a/contrib/dxc_2025_07_14/inc/hlsl/vk/opcode_selector.h b/contrib/dxc_2025_07_14/inc/hlsl/vk/opcode_selector.h new file mode 100644 index 0000000..bc8672c --- /dev/null +++ b/contrib/dxc_2025_07_14/inc/hlsl/vk/opcode_selector.h | |||
| @@ -0,0 +1,227 @@ | |||
| 1 | // Copyright (c) 2024 Google LLC | ||
| 2 | // | ||
| 3 | // This file is licensed under the Apache License v2.0 with LLVM Exceptions. | ||
| 4 | // See https://llvm.org/LICENSE.txt for license information. | ||
| 5 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | ||
| 6 | |||
| 7 | #ifndef _HLSL_VK_KHR_OPCODE_SELECTOR_H_ | ||
| 8 | #define _HLSL_VK_KHR_OPCODE_SELECTOR_H_ | ||
| 9 | |||
| 10 | #define DECLARE_UNARY_OP(name, opcode) \ | ||
| 11 | template <typename ResultType> \ | ||
| 12 | [[vk::ext_instruction(opcode)]] ResultType __builtin_spv_##name( \ | ||
| 13 | ResultType a) | ||
| 14 | |||
| 15 | DECLARE_UNARY_OP(CopyObject, 83); | ||
| 16 | DECLARE_UNARY_OP(SNegate, 126); | ||
| 17 | DECLARE_UNARY_OP(FNegate, 127); | ||
| 18 | |||
| 19 | #define DECLARE_CONVERSION_OP(name, opcode) \ | ||
| 20 | template <typename ResultType, typename OperandType> \ | ||
| 21 | [[vk::ext_instruction(opcode)]] ResultType __builtin_spv_##name( \ | ||
| 22 | OperandType a) | ||
| 23 | |||
| 24 | DECLARE_CONVERSION_OP(ConvertFtoU, 109); | ||
| 25 | DECLARE_CONVERSION_OP(ConvertFtoS, 110); | ||
| 26 | DECLARE_CONVERSION_OP(ConvertSToF, 111); | ||
| 27 | DECLARE_CONVERSION_OP(ConvertUToF, 112); | ||
| 28 | DECLARE_CONVERSION_OP(UConvert, 113); | ||
| 29 | DECLARE_CONVERSION_OP(SConvert, 114); | ||
| 30 | DECLARE_CONVERSION_OP(FConvert, 115); | ||
| 31 | DECLARE_CONVERSION_OP(Bitcast, 124); | ||
| 32 | |||
| 33 | #undef DECLARY_UNARY_OP | ||
| 34 | |||
| 35 | #define DECLARE_BINOP(name, opcode) \ | ||
| 36 | template <typename ResultType> \ | ||
| 37 | [[vk::ext_instruction(opcode)]] ResultType __builtin_spv_##name( \ | ||
| 38 | ResultType a, ResultType b) | ||
| 39 | |||
| 40 | DECLARE_BINOP(IAdd, 128); | ||
| 41 | DECLARE_BINOP(FAdd, 129); | ||
| 42 | DECLARE_BINOP(ISub, 130); | ||
| 43 | DECLARE_BINOP(FSub, 131); | ||
| 44 | DECLARE_BINOP(IMul, 132); | ||
| 45 | DECLARE_BINOP(FMul, 133); | ||
| 46 | DECLARE_BINOP(UDiv, 134); | ||
| 47 | DECLARE_BINOP(SDiv, 135); | ||
| 48 | DECLARE_BINOP(FDiv, 136); | ||
| 49 | |||
| 50 | #undef DECLARE_BINOP | ||
| 51 | namespace vk { | ||
| 52 | namespace util { | ||
| 53 | |||
| 54 | template <class ComponentType> class ArithmeticSelector; | ||
| 55 | |||
| 56 | #define ARITHMETIC_SELECTOR(BaseType, OpNegate, OpAdd, OpSub, OpMul, OpDiv, \ | ||
| 57 | SIGNED_INTEGER_TYPE) \ | ||
| 58 | template <> class ArithmeticSelector<BaseType> { \ | ||
| 59 | template <class T> static T Negate(T a) { return OpNegate(a); } \ | ||
| 60 | template <class T> static T Add(T a, T b) { return OpAdd(a, b); } \ | ||
| 61 | template <class T> static T Sub(T a, T b) { return OpSub(a, b); } \ | ||
| 62 | template <class T> static T Mul(T a, T b) { return OpMul(a, b); } \ | ||
| 63 | template <class T> static T Div(T a, T b) { return OpDiv(a, b); } \ | ||
| 64 | }; | ||
| 65 | |||
| 66 | ARITHMETIC_SELECTOR(half, __builtin_spv_FNegate, __builtin_spv_FAdd, | ||
| 67 | __builtin_spv_FSub, __builtin_spv_FMul, __builtin_spv_FDiv, | ||
| 68 | false); | ||
| 69 | ARITHMETIC_SELECTOR(float, __builtin_spv_FNegate, __builtin_spv_FAdd, | ||
| 70 | __builtin_spv_FSub, __builtin_spv_FMul, __builtin_spv_FDiv, | ||
| 71 | false); | ||
| 72 | ARITHMETIC_SELECTOR(double, __builtin_spv_FNegate, __builtin_spv_FAdd, | ||
| 73 | __builtin_spv_FSub, __builtin_spv_FMul, __builtin_spv_FDiv, | ||
| 74 | false); | ||
| 75 | |||
| 76 | #if __HLSL_ENABLE_16_BIT | ||
| 77 | ARITHMETIC_SELECTOR(int16_t, __builtin_spv_SNegate, __builtin_spv_IAdd, | ||
| 78 | __builtin_spv_ISub, __builtin_spv_IMul, __builtin_spv_SDiv, | ||
| 79 | true); | ||
| 80 | ARITHMETIC_SELECTOR(uint16_t, __builtin_spv_SNegate, __builtin_spv_IAdd, | ||
| 81 | __builtin_spv_ISub, __builtin_spv_IMul, __builtin_spv_UDiv, | ||
| 82 | false); | ||
| 83 | #endif // __HLSL_ENABLE_16_BIT | ||
| 84 | |||
| 85 | ARITHMETIC_SELECTOR(int32_t, __builtin_spv_SNegate, __builtin_spv_IAdd, | ||
| 86 | __builtin_spv_ISub, __builtin_spv_IMul, __builtin_spv_SDiv, | ||
| 87 | true); | ||
| 88 | ARITHMETIC_SELECTOR(int64_t, __builtin_spv_SNegate, __builtin_spv_IAdd, | ||
| 89 | __builtin_spv_ISub, __builtin_spv_IMul, __builtin_spv_SDiv, | ||
| 90 | true); | ||
| 91 | ARITHMETIC_SELECTOR(uint32_t, __builtin_spv_SNegate, __builtin_spv_IAdd, | ||
| 92 | __builtin_spv_ISub, __builtin_spv_IMul, __builtin_spv_UDiv, | ||
| 93 | false); | ||
| 94 | ARITHMETIC_SELECTOR(uint64_t, __builtin_spv_SNegate, __builtin_spv_IAdd, | ||
| 95 | __builtin_spv_ISub, __builtin_spv_IMul, __builtin_spv_UDiv, | ||
| 96 | false); | ||
| 97 | |||
| 98 | // The conversion selector is will be used to convert one type to another | ||
| 99 | // using the SPIR-V conversion instructions. See | ||
| 100 | // https://registry.khronos.org/SPIR-V/specs/unified1/SPIRV.html#_conversion_instructions. | ||
| 101 | // SourceType and TargetType must be integer or floating point scalar type. | ||
| 102 | |||
| 103 | // ConversionSelector::Convert converts an object of type S to an object of type | ||
| 104 | // T. S must be SourceType, a vector of SourceType, or a cooperative matrix of | ||
| 105 | // SourceType. T must be TargetType, a vector of TargetType, or a cooperative | ||
| 106 | // matrix of TargetType. T must have the same number of components as S. T is a | ||
| 107 | // cooperative matrix if and only if S is a cooperative matrix. | ||
| 108 | template <class SourceType, class TargetType> class ConversionSelector; | ||
| 109 | |||
| 110 | #define CONVERSION_SELECTOR(SourceType, TargetType, OpConvert) \ | ||
| 111 | template <> class ConversionSelector<SourceType, TargetType> { \ | ||
| 112 | template <class T, class S> static T Convert(S a) { \ | ||
| 113 | return OpConvert<T>(a); \ | ||
| 114 | } \ | ||
| 115 | }; | ||
| 116 | |||
| 117 | #if __HLSL_ENABLE_16_BIT | ||
| 118 | CONVERSION_SELECTOR(uint16_t, uint16_t, __builtin_spv_CopyObject); | ||
| 119 | CONVERSION_SELECTOR(uint16_t, int16_t, __builtin_spv_Bitcast); | ||
| 120 | CONVERSION_SELECTOR(uint16_t, uint32_t, __builtin_spv_UConvert); | ||
| 121 | CONVERSION_SELECTOR(uint16_t, int32_t, __builtin_spv_SConvert); | ||
| 122 | CONVERSION_SELECTOR(uint16_t, uint64_t, __builtin_spv_UConvert); | ||
| 123 | CONVERSION_SELECTOR(uint16_t, int64_t, __builtin_spv_SConvert); | ||
| 124 | CONVERSION_SELECTOR(uint16_t, half, __builtin_spv_ConvertUToF); | ||
| 125 | CONVERSION_SELECTOR(uint16_t, float, __builtin_spv_ConvertUToF); | ||
| 126 | CONVERSION_SELECTOR(uint16_t, double, __builtin_spv_ConvertUToF); | ||
| 127 | |||
| 128 | CONVERSION_SELECTOR(int16_t, uint16_t, __builtin_spv_Bitcast); | ||
| 129 | CONVERSION_SELECTOR(int16_t, int16_t, __builtin_spv_CopyObject); | ||
| 130 | CONVERSION_SELECTOR(int16_t, uint32_t, __builtin_spv_UConvert); | ||
| 131 | CONVERSION_SELECTOR(int16_t, int32_t, __builtin_spv_SConvert); | ||
| 132 | CONVERSION_SELECTOR(int16_t, uint64_t, __builtin_spv_UConvert); | ||
| 133 | CONVERSION_SELECTOR(int16_t, int64_t, __builtin_spv_SConvert); | ||
| 134 | CONVERSION_SELECTOR(int16_t, half, __builtin_spv_ConvertSToF); | ||
| 135 | CONVERSION_SELECTOR(int16_t, float, __builtin_spv_ConvertSToF); | ||
| 136 | CONVERSION_SELECTOR(int16_t, double, __builtin_spv_ConvertSToF); | ||
| 137 | |||
| 138 | CONVERSION_SELECTOR(uint32_t, uint16_t, __builtin_spv_UConvert); | ||
| 139 | CONVERSION_SELECTOR(uint32_t, int16_t, __builtin_spv_SConvert); | ||
| 140 | |||
| 141 | CONVERSION_SELECTOR(int32_t, uint16_t, __builtin_spv_UConvert); | ||
| 142 | CONVERSION_SELECTOR(int32_t, int16_t, __builtin_spv_SConvert); | ||
| 143 | |||
| 144 | CONVERSION_SELECTOR(uint64_t, uint16_t, __builtin_spv_UConvert); | ||
| 145 | CONVERSION_SELECTOR(uint64_t, int16_t, __builtin_spv_SConvert); | ||
| 146 | |||
| 147 | CONVERSION_SELECTOR(int64_t, uint16_t, __builtin_spv_UConvert); | ||
| 148 | CONVERSION_SELECTOR(int64_t, int16_t, __builtin_spv_SConvert); | ||
| 149 | |||
| 150 | CONVERSION_SELECTOR(half, uint16_t, __builtin_spv_ConvertFtoU); | ||
| 151 | CONVERSION_SELECTOR(half, int16_t, __builtin_spv_ConvertFtoS); | ||
| 152 | |||
| 153 | CONVERSION_SELECTOR(float, uint16_t, __builtin_spv_ConvertFtoU); | ||
| 154 | CONVERSION_SELECTOR(float, int16_t, __builtin_spv_ConvertFtoS); | ||
| 155 | |||
| 156 | CONVERSION_SELECTOR(double, uint16_t, __builtin_spv_ConvertFtoU); | ||
| 157 | CONVERSION_SELECTOR(double, int16_t, __builtin_spv_ConvertFtoS); | ||
| 158 | #endif | ||
| 159 | |||
| 160 | CONVERSION_SELECTOR(uint32_t, uint32_t, __builtin_spv_CopyObject); | ||
| 161 | CONVERSION_SELECTOR(uint32_t, int32_t, __builtin_spv_Bitcast); | ||
| 162 | CONVERSION_SELECTOR(uint32_t, uint64_t, __builtin_spv_UConvert); | ||
| 163 | CONVERSION_SELECTOR(uint32_t, int64_t, __builtin_spv_SConvert); | ||
| 164 | CONVERSION_SELECTOR(uint32_t, half, __builtin_spv_ConvertUToF); | ||
| 165 | CONVERSION_SELECTOR(uint32_t, float, __builtin_spv_ConvertUToF); | ||
| 166 | CONVERSION_SELECTOR(uint32_t, double, __builtin_spv_ConvertUToF); | ||
| 167 | |||
| 168 | CONVERSION_SELECTOR(int32_t, uint32_t, __builtin_spv_Bitcast); | ||
| 169 | CONVERSION_SELECTOR(int32_t, int32_t, __builtin_spv_CopyObject); | ||
| 170 | CONVERSION_SELECTOR(int32_t, uint64_t, __builtin_spv_UConvert); | ||
| 171 | CONVERSION_SELECTOR(int32_t, int64_t, __builtin_spv_SConvert); | ||
| 172 | CONVERSION_SELECTOR(int32_t, half, __builtin_spv_ConvertSToF); | ||
| 173 | CONVERSION_SELECTOR(int32_t, float, __builtin_spv_ConvertSToF); | ||
| 174 | CONVERSION_SELECTOR(int32_t, double, __builtin_spv_ConvertSToF); | ||
| 175 | |||
| 176 | CONVERSION_SELECTOR(uint64_t, uint32_t, __builtin_spv_UConvert); | ||
| 177 | CONVERSION_SELECTOR(uint64_t, int32_t, __builtin_spv_SConvert); | ||
| 178 | CONVERSION_SELECTOR(uint64_t, uint64_t, __builtin_spv_Bitcast); | ||
| 179 | CONVERSION_SELECTOR(uint64_t, int64_t, __builtin_spv_CopyObject); | ||
| 180 | CONVERSION_SELECTOR(uint64_t, half, __builtin_spv_ConvertUToF); | ||
| 181 | CONVERSION_SELECTOR(uint64_t, float, __builtin_spv_ConvertUToF); | ||
| 182 | CONVERSION_SELECTOR(uint64_t, double, __builtin_spv_ConvertUToF); | ||
| 183 | |||
| 184 | CONVERSION_SELECTOR(int64_t, uint32_t, __builtin_spv_UConvert); | ||
| 185 | CONVERSION_SELECTOR(int64_t, int32_t, __builtin_spv_SConvert); | ||
| 186 | CONVERSION_SELECTOR(int64_t, uint64_t, __builtin_spv_Bitcast); | ||
| 187 | CONVERSION_SELECTOR(int64_t, int64_t, __builtin_spv_CopyObject); | ||
| 188 | CONVERSION_SELECTOR(int64_t, half, __builtin_spv_ConvertSToF); | ||
| 189 | CONVERSION_SELECTOR(int64_t, float, __builtin_spv_ConvertSToF); | ||
| 190 | CONVERSION_SELECTOR(int64_t, double, __builtin_spv_ConvertSToF); | ||
| 191 | |||
| 192 | CONVERSION_SELECTOR(half, uint32_t, __builtin_spv_ConvertFtoU); | ||
| 193 | CONVERSION_SELECTOR(half, int32_t, __builtin_spv_ConvertFtoS); | ||
| 194 | CONVERSION_SELECTOR(half, uint64_t, __builtin_spv_ConvertFtoU); | ||
| 195 | CONVERSION_SELECTOR(half, int64_t, __builtin_spv_ConvertFtoS); | ||
| 196 | CONVERSION_SELECTOR(half, half, __builtin_spv_CopyObject); | ||
| 197 | #if __HLSL_ENABLE_16_BIT | ||
| 198 | CONVERSION_SELECTOR(half, float, __builtin_spv_FConvert); | ||
| 199 | #else | ||
| 200 | CONVERSION_SELECTOR(half, float, __builtin_spv_CopyObject); | ||
| 201 | #endif | ||
| 202 | |||
| 203 | CONVERSION_SELECTOR(half, double, __builtin_spv_FConvert); | ||
| 204 | |||
| 205 | CONVERSION_SELECTOR(float, uint32_t, __builtin_spv_ConvertFtoU); | ||
| 206 | CONVERSION_SELECTOR(float, int32_t, __builtin_spv_ConvertFtoS); | ||
| 207 | CONVERSION_SELECTOR(float, uint64_t, __builtin_spv_ConvertFtoU); | ||
| 208 | CONVERSION_SELECTOR(float, int64_t, __builtin_spv_ConvertFtoS); | ||
| 209 | #if __HLSL_ENABLE_16_BIT | ||
| 210 | CONVERSION_SELECTOR(float, half, __builtin_spv_FConvert); | ||
| 211 | #else | ||
| 212 | CONVERSION_SELECTOR(float, half, __builtin_spv_CopyObject); | ||
| 213 | #endif | ||
| 214 | CONVERSION_SELECTOR(float, float, __builtin_spv_CopyObject); | ||
| 215 | CONVERSION_SELECTOR(float, double, __builtin_spv_FConvert); | ||
| 216 | |||
| 217 | CONVERSION_SELECTOR(double, uint32_t, __builtin_spv_ConvertFtoU); | ||
| 218 | CONVERSION_SELECTOR(double, int32_t, __builtin_spv_ConvertFtoS); | ||
| 219 | CONVERSION_SELECTOR(double, uint64_t, __builtin_spv_ConvertFtoU); | ||
| 220 | CONVERSION_SELECTOR(double, int64_t, __builtin_spv_ConvertFtoS); | ||
| 221 | CONVERSION_SELECTOR(double, half, __builtin_spv_FConvert); | ||
| 222 | CONVERSION_SELECTOR(double, float, __builtin_spv_FConvert); | ||
| 223 | CONVERSION_SELECTOR(double, double, __builtin_spv_CopyObject); | ||
| 224 | }; // namespace util | ||
| 225 | } // namespace vk | ||
| 226 | |||
| 227 | #endif // _HLSL_VK_KHR_OPCODE_SELECTOR_H_ | ||
diff --git a/contrib/dxc_2025_07_14/inc/hlsl/vk/spirv.h b/contrib/dxc_2025_07_14/inc/hlsl/vk/spirv.h new file mode 100644 index 0000000..69bb53b --- /dev/null +++ b/contrib/dxc_2025_07_14/inc/hlsl/vk/spirv.h | |||
| @@ -0,0 +1,85 @@ | |||
| 1 | // Copyright (c) 2024 Google LLC | ||
| 2 | // | ||
| 3 | // This file is licensed under the Apache License v2.0 with LLVM Exceptions. | ||
| 4 | // See https://llvm.org/LICENSE.txt for license information. | ||
| 5 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | ||
| 6 | |||
| 7 | #ifndef _HLSL_VK_SPIRV_H_ | ||
| 8 | #define _HLSL_VK_SPIRV_H_ | ||
| 9 | |||
| 10 | namespace vk { | ||
| 11 | |||
| 12 | enum CooperativeMatrixUse { | ||
| 13 | CooperativeMatrixUseMatrixAKHR = 0, | ||
| 14 | CooperativeMatrixUseMatrixBKHR = 1, | ||
| 15 | CooperativeMatrixUseMatrixAccumulatorKHR = 2, | ||
| 16 | CooperativeMatrixUseMax = 0x7fffffff, | ||
| 17 | }; | ||
| 18 | |||
| 19 | enum CooperativeMatrixLayout { | ||
| 20 | CooperativeMatrixLayoutRowMajorKHR = 0, | ||
| 21 | CooperativeMatrixLayoutColumnMajorKHR = 1, | ||
| 22 | CooperativeMatrixLayoutRowBlockedInterleavedARM = 4202, | ||
| 23 | CooperativeMatrixLayoutColumnBlockedInterleavedARM = 4203, | ||
| 24 | CooperativeMatrixLayoutMax = 0x7fffffff, | ||
| 25 | }; | ||
| 26 | |||
| 27 | enum CooperativeMatrixOperandsMask { | ||
| 28 | CooperativeMatrixOperandsMaskNone = 0, | ||
| 29 | CooperativeMatrixOperandsMatrixASignedComponentsKHRMask = 0x00000001, | ||
| 30 | CooperativeMatrixOperandsMatrixBSignedComponentsKHRMask = 0x00000002, | ||
| 31 | CooperativeMatrixOperandsMatrixCSignedComponentsKHRMask = 0x00000004, | ||
| 32 | CooperativeMatrixOperandsMatrixResultSignedComponentsKHRMask = 0x00000008, | ||
| 33 | CooperativeMatrixOperandsSaturatingAccumulationKHRMask = 0x00000010, | ||
| 34 | }; | ||
| 35 | |||
| 36 | enum MemoryAccessMask { | ||
| 37 | MemoryAccessMaskNone = 0, | ||
| 38 | MemoryAccessVolatileMask = 0x00000001, | ||
| 39 | MemoryAccessAlignedMask = 0x00000002, | ||
| 40 | MemoryAccessNontemporalMask = 0x00000004, | ||
| 41 | MemoryAccessMakePointerAvailableMask = 0x00000008, | ||
| 42 | MemoryAccessMakePointerAvailableKHRMask = 0x00000008, | ||
| 43 | MemoryAccessMakePointerVisibleMask = 0x00000010, | ||
| 44 | MemoryAccessMakePointerVisibleKHRMask = 0x00000010, | ||
| 45 | MemoryAccessNonPrivatePointerMask = 0x00000020, | ||
| 46 | MemoryAccessNonPrivatePointerKHRMask = 0x00000020, | ||
| 47 | MemoryAccessAliasScopeINTELMaskMask = 0x00010000, | ||
| 48 | MemoryAccessNoAliasINTELMaskMask = 0x00020000, | ||
| 49 | }; | ||
| 50 | |||
| 51 | enum Scope { | ||
| 52 | ScopeCrossDevice = 0, | ||
| 53 | ScopeDevice = 1, | ||
| 54 | ScopeWorkgroup = 2, | ||
| 55 | ScopeSubgroup = 3, | ||
| 56 | ScopeInvocation = 4, | ||
| 57 | ScopeQueueFamily = 5, | ||
| 58 | ScopeQueueFamilyKHR = 5, | ||
| 59 | ScopeShaderCallKHR = 6, | ||
| 60 | ScopeMax = 0x7fffffff, | ||
| 61 | }; | ||
| 62 | |||
| 63 | enum StorageClass { | ||
| 64 | StorageClassWorkgroup = 4, | ||
| 65 | }; | ||
| 66 | |||
| 67 | // An opaque type to represent a Spir-V pointer to the workgroup storage class. | ||
| 68 | // clang-format off | ||
| 69 | template <typename PointeeType> | ||
| 70 | using WorkgroupSpirvPointer = const vk::SpirvOpaqueType< | ||
| 71 | /* OpTypePointer */ 32, | ||
| 72 | vk::Literal<vk::integral_constant<uint, StorageClassWorkgroup> >, | ||
| 73 | PointeeType>; | ||
| 74 | // clang-format on | ||
| 75 | |||
| 76 | // Returns an opaque Spir-V pointer to v. The memory object v's storage class | ||
| 77 | // modifier must be groupshared. If the incorrect storage class is used, then | ||
| 78 | // there will be a validation error, and it will not show the correct | ||
| 79 | template <typename T> | ||
| 80 | [[vk::ext_instruction(/* OpCopyObject */ 83)]] WorkgroupSpirvPointer<T> | ||
| 81 | GetGroupSharedAddress([[vk::ext_reference]] T v); | ||
| 82 | |||
| 83 | } // namespace vk | ||
| 84 | |||
| 85 | #endif // _HLSL_VK_SPIRV_H_ | ||
diff --git a/contrib/dxc_2025_07_14/lib/arm64/dxcompiler.lib b/contrib/dxc_2025_07_14/lib/arm64/dxcompiler.lib new file mode 100644 index 0000000..a0b591b --- /dev/null +++ b/contrib/dxc_2025_07_14/lib/arm64/dxcompiler.lib | |||
| Binary files differ | |||
diff --git a/contrib/dxc_2025_07_14/lib/arm64/dxil.lib b/contrib/dxc_2025_07_14/lib/arm64/dxil.lib new file mode 100644 index 0000000..8a6ab34 --- /dev/null +++ b/contrib/dxc_2025_07_14/lib/arm64/dxil.lib | |||
| Binary files differ | |||
diff --git a/contrib/dxc_2025_07_14/lib/x64/dxcompiler.lib b/contrib/dxc_2025_07_14/lib/x64/dxcompiler.lib new file mode 100644 index 0000000..fe2d5f0 --- /dev/null +++ b/contrib/dxc_2025_07_14/lib/x64/dxcompiler.lib | |||
| Binary files differ | |||
diff --git a/contrib/dxc_2025_07_14/lib/x64/dxil.lib b/contrib/dxc_2025_07_14/lib/x64/dxil.lib new file mode 100644 index 0000000..435d947 --- /dev/null +++ b/contrib/dxc_2025_07_14/lib/x64/dxil.lib | |||
| Binary files differ | |||
diff --git a/contrib/dxc_2025_07_14/lib/x86/dxcompiler.lib b/contrib/dxc_2025_07_14/lib/x86/dxcompiler.lib new file mode 100644 index 0000000..01f3ee0 --- /dev/null +++ b/contrib/dxc_2025_07_14/lib/x86/dxcompiler.lib | |||
| Binary files differ | |||
diff --git a/contrib/dxc_2025_07_14/lib/x86/dxil.lib b/contrib/dxc_2025_07_14/lib/x86/dxil.lib new file mode 100644 index 0000000..90d1adc --- /dev/null +++ b/contrib/dxc_2025_07_14/lib/x86/dxil.lib | |||
| Binary files differ | |||
