commit | d2bd484152df863eb5a0898c5f5e46a9212a1554 | [log] [tgz] |
---|---|---|
author | Antonio Maiorano <amaiorano@google.com> | Thu May 05 11:26:35 2022 -0400 |
committer | Antonio Maiorano <amaiorano@google.com> | Thu May 05 11:26:35 2022 -0400 |
tree | 9fd6855f34ad72deff6cbd17a248e4f8e0ca9ec6 | |
parent | 0346a16a5054e6096900af4b27e6696f38fa1af5 [diff] |
Squashed 'third_party/SPIRV-Headers/' changes from 6a55fade6..b765c355f b765c355f Merge pull request #279 from dgkoch/SPV_KHR_ray_cull_mask b74edd553 Add SPV_KHR_ray_cull_mask 46b791821 Merge pull request #274 from rayanht/patch-1 bfaccff6e Merge pull request #277 from kpet/spv-khr-subgroup-rotate ee9e6ddf3 do not enable the instruction with the extension c0bd60422 Add SPV_KHR_subgroup_rotate ef6eceddd Register magic number for SPIRVSmith 82becc8a8 Merge pull request #273 from Tachi107/patch-1 d9234dee3 build: use ARCH_INDEPENDENT if possible 9c3fd01c8 Merge pull request #270 from kpet/sycl 5bb42a80d Merge pull request #272 from DmitryBushev/open_master 5ecb8bc82 Removed extension section bf5bffa93 Add NamedBarrierCountINTEL execution mode 064395f0f Add a SourceLanguage for SYCL 4995a2f27 Merge pull request #269 from KornevNikita/uniform_group_instructions 7744288e2 Remove extensions tag from instructions 0e994ee9c Merge pull request #261 from ProkopRandacek/master 48fadab86 Merge branch 'master' of https://github.com/KhronosGroup/SPIRV-Headers into uniform_group_instructions a4a03f677 Implement SPV_KHR_uniform_group_instructions extension f75fc98ba Merge pull request #268 from bashbaug/SPV_INTEL_split_barrier 24c841de7 Merge pull request #263 from DataBeaver/master f85647cbf Merge pull request #264 from gnl21/demote-ext-tag ed206e381 update SPIR-V headers for SPV_INTEL_split_barrier bf985e99e regenerate headers c89cabce9 Add EXT tag to capability to DemoteToHelperInvocationEXT c31dbf6c1 Reserve enum range for MSP extensions e14816714 regenerate the headers 6e7a6754b Include bool type for C git-subtree-dir: third_party/SPIRV-Headers git-subtree-split: b765c355f488837ca4c77980ba69484f3ff277f5 Change-Id: Ie0e87011f32da046895827431c211e55f4d3cb05
This repository contains machine-readable files for the SPIR-V Registry. This includes:
Headers are provided in the include directory, with up-to-date headers in the unified1
subdirectory. Older headers are provided according to their version.
In contrast, the XML registry file has a linear history, so it is not tied to SPIR-V specification versions.
When a new version or revision of the SPIR-V specification is published, the SPIR-V Working Group will push new commits onto master, updating the files under include.
The SPIR-V XML registry file is updated by Khronos whenever a new enum range is allocated.
Pull requests can be made to
Tools that generate SPIR-V should use a magic number in the SPIR-V to help identify the generator.
Care should be taken to follow existing precedent in populating the details of reserved tokens. This includes:
Care should be taken to follow existing precedent in populating the details of reserved tokens. This includes:
"version" : "None"
mkdir build cd build cmake .. cmake --build . --target install
Then, for example, you will have /usr/local/include/spirv/unified1/spirv.h
If you want to install them somewhere else, then use -DCMAKE_INSTALL_PREFIX=/other/path
on the first cmake
command.
A CMake-based project can use the headers without installing, as follows:
add_subdirectory
directive to include this source tree.${SPIRV-Headers_SOURCE_DIR}/include}
in a target_include_directories
directive.#include
directives that explicitly mention the spirv
path component.#include "spirv/unified1/GLSL.std.450.h" #include "spirv/unified1/OpenCL.std.h" #include "spirv/unified1/spirv.hpp"
See also the example subdirectory. But since that example is inside this repostory, it doesn't use and add_subdirectory
directive.
A Bazel-based project can use the headers without installing, as follows:
local_repository
to your WORKSPACE
file. For example, if you place SPIRV-Headers under external/spirv-headers
, then add the following to your WORKSPACE
file:local_repository( name = "spirv_headers", path = "external/spirv-headers", )
deps
attribute of your build target based on your needs:@spirv_headers//:spirv_c_headers @spirv_headers//:spirv_cpp_headers @spirv_headers//:spirv_cpp11_headers
For example:
cc_library( name = "project", srcs = [ # Path to project sources ], hdrs = [ # Path to project headers ], deps = [ "@spirv_tools//:spirv_c_headers", # Other dependencies, ], )
#include
directives that explicitly mention the spirv
path component.#include "spirv/unified1/GLSL.std.450.h" #include "spirv/unified1/OpenCL.std.h" #include "spirv/unified1/spirv.hpp"
This will generally be done by Khronos, for a change to the JSON grammar. However, the project for the tool to do this is included in this repository, and can be used to test a PR, or even to include the results in the PR. This is not required though.
The header-generation project is under the tools/buildHeaders
directory. Use CMake to build and install the project, in a build
subdirectory (under tools/buildHeaders
). There is then a bash script at bin/makeHeaders
that shows how to use the built header-generator binary to generate the headers from the JSON grammar. (Execute bin/makeHeaders
from the tools/buildHeaders
directory.) Here's a complete example:
cd tools/buildHeaders mkdir build cd build cmake .. cmake --build . --target install cd .. ./bin/makeHeaders
Notes:
The GLSL.std.450.h and OpenCL.std.h extended instruction set headers are maintained manually.
The C/C++ header for each of the other extended instruction sets is generated from the corresponding JSON grammar file. For example, the OpenCLDebugInfo100.h header is generated from the extinst.opencl.debuginfo.100.grammar.json grammar file.
To generate these C/C++ headers, first make sure python3
is in your PATH, then invoke the build script as follows:
cd tools/buildHeaders python3 bin/makeExtinstHeaders.py
How are different versions published?
The multiple versions of the headers have been simplified into a single unified1
view. The JSON grammar has a “version” field saying what version things first showed up in.
How do you handle the evolution of extended instruction sets?
Extended instruction sets evolve asynchronously from the core spec. Right now there is only a single version of both the GLSL and OpenCL headers. So we don't yet have a problematic example to resolve.
Copyright (c) 2015-2018 The Khronos Group Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and/or associated documentation files (the "Materials"), to deal in the Materials without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Materials, and to permit persons to whom the Materials are furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Materials. MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.