mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-19 06:24:51 +08:00
feature: implementation of cl_khr_spirv_queries
Related-To: NEO-15093 Signed-off-by: Ben Ashbaugh <ben.ashbaugh@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
2d63adca99
commit
d2fda52121
@@ -435,6 +435,14 @@ else()
|
||||
endif()
|
||||
message(STATUS "Khronos OpenGL headers dir: ${KHRONOS_GL_HEADERS_DIR}")
|
||||
|
||||
if(NOT DEFINED KHRONOS_SPIRV_HEADERS_DIR)
|
||||
get_filename_component(SPIRV_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party/spirv_headers/include" ABSOLUTE)
|
||||
if(IS_DIRECTORY ${SPIRV_DIR})
|
||||
set(KHRONOS_SPIRV_HEADERS_DIR ${SPIRV_DIR})
|
||||
endif()
|
||||
endif()
|
||||
message(STATUS "Khronos SPIR-V headers dir: ${KHRONOS_SPIRV_HEADERS_DIR}")
|
||||
|
||||
if(NOT DEFINED AOT_CONFIG_HEADERS_DIR)
|
||||
get_filename_component(AOT_CONFIG_HEADERS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party${BRANCH_DIR_SUFFIX}aot_config_headers" ABSOLUTE)
|
||||
message(STATUS "AOT config headers dir: ${AOT_CONFIG_HEADERS_DIR}")
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2018-2024 Intel Corporation
|
||||
* Copyright (C) 2018-2025 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
@@ -347,6 +347,18 @@ typedef cl_bitfield cl_command_queue_mdapi_properties_intel;
|
||||
#define CL_KERNEL_REGISTER_COUNT_INTEL 0x425B
|
||||
#endif
|
||||
|
||||
/*************************************************
|
||||
* cl_khr_spirv_queries extension *
|
||||
*************************************************/
|
||||
|
||||
#ifndef cl_khr_spirv_queries
|
||||
#define cl_khr_spirv_queries 1
|
||||
#define CL_KHR_SPIRV_QUERIES_EXTENSION_NAME "cl_khr_spirv_queries"
|
||||
#define CL_DEVICE_SPIRV_EXTENDED_INSTRUCTION_SETS_KHR 0x12B9
|
||||
#define CL_DEVICE_SPIRV_EXTENSIONS_KHR 0x12BA
|
||||
#define CL_DEVICE_SPIRV_CAPABILITIES_KHR 0x12BB
|
||||
#endif
|
||||
|
||||
/*************************************************
|
||||
* cl_ext_float_atomics extension *
|
||||
*************************************************/
|
||||
|
||||
@@ -42,6 +42,7 @@ target_include_directories(${NEO_STATIC_LIB_NAME} PUBLIC
|
||||
${ENGINE_NODE_DIR}
|
||||
${KHRONOS_HEADERS_DIR}
|
||||
${KHRONOS_GL_HEADERS_DIR}
|
||||
${KHRONOS_SPIRV_HEADERS_DIR}
|
||||
${CIF_BASE_DIR}
|
||||
${IGC_OCL_ADAPTOR_DIR}
|
||||
${VISA_INCLUDE_DIR}
|
||||
|
||||
@@ -145,6 +145,7 @@ class ClDevice : public BaseObject<_cl_device_id> {
|
||||
void initializeExtensionsWithVersion();
|
||||
void initializeOpenclCAllVersions();
|
||||
void initializeILsWithVersion();
|
||||
void initializeSpirvQueries();
|
||||
void initializeOsSpecificCaps();
|
||||
void initializeMaxPoolCount();
|
||||
void initGTPinHelper();
|
||||
@@ -165,6 +166,7 @@ class ClDevice : public BaseObject<_cl_device_id> {
|
||||
|
||||
ClDeviceInfo deviceInfo = {};
|
||||
std::once_flag initializeExtensionsWithVersionOnce;
|
||||
std::once_flag initializeSpirvQueriesOnce;
|
||||
|
||||
std::vector<unsigned int> simultaneousInterops = {0};
|
||||
std::string compilerExtensions;
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
#include "opencl/source/sharings/sharing_factory.h"
|
||||
|
||||
#include "driver_version.h"
|
||||
#include "spirv/unified1/spirv.hpp"
|
||||
|
||||
#include <iterator>
|
||||
#include <sstream>
|
||||
@@ -432,6 +433,219 @@ void ClDevice::initializeILsWithVersion() {
|
||||
}
|
||||
}
|
||||
|
||||
void ClDevice::initializeSpirvQueries() {
|
||||
std::stringstream extStringStream{deviceExtensions};
|
||||
std::vector<std::string> extVector{
|
||||
std::istream_iterator<std::string>{extStringStream}, std::istream_iterator<std::string>{}};
|
||||
|
||||
std::stringstream ilsStringStream{device.getDeviceInfo().ilVersion};
|
||||
std::vector<std::string> ilsVector{
|
||||
std::istream_iterator<std::string>{ilsStringStream}, std::istream_iterator<std::string>{}};
|
||||
|
||||
deviceInfo.spirvCapabilities.reserve(64);
|
||||
|
||||
deviceInfo.spirvExtendedInstructionSets.push_back("OpenCL.std");
|
||||
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityAddresses);
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityFloat16Buffer);
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityInt16);
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityInt8);
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityKernel);
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityLinkage);
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityVector16);
|
||||
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityInt64);
|
||||
|
||||
if (getSharedDeviceInfo().imageSupport) {
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityImage1D);
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityImageBasic);
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityImageBuffer);
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityLiteralSampler);
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilitySampled1D);
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilitySampledBuffer);
|
||||
}
|
||||
|
||||
if (std::find(ilsVector.begin(), ilsVector.end(), "SPIR-V_1.6") != ilsVector.end()) {
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityUniformDecoration);
|
||||
}
|
||||
|
||||
if (deviceInfo.maxReadWriteImageArgs != 0) {
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityImageReadWrite);
|
||||
}
|
||||
|
||||
if (deviceInfo.genericAddressSpaceSupport == CL_TRUE) {
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityGenericPointer);
|
||||
}
|
||||
|
||||
if (deviceInfo.maxNumOfSubGroups != 0 || deviceInfo.workGroupCollectiveFunctionsSupport == CL_TRUE) {
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityGroups);
|
||||
}
|
||||
|
||||
if (deviceInfo.pipeSupport == CL_TRUE) {
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityPipes);
|
||||
}
|
||||
|
||||
if (deviceInfo.deviceEnqueueSupport != 0) {
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityDeviceEnqueue);
|
||||
}
|
||||
|
||||
if (deviceInfo.maxNumOfSubGroups != 0) {
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilitySubgroupDispatch);
|
||||
}
|
||||
|
||||
if (std::find(extVector.begin(), extVector.end(), "cl_khr_expect_assume") != extVector.end()) {
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityExpectAssumeKHR);
|
||||
}
|
||||
|
||||
if (std::find(extVector.begin(), extVector.end(), "cl_khr_extended_bit_ops") != extVector.end()) {
|
||||
deviceInfo.spirvExtensions.push_back("SPV_KHR_bit_instructions");
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityBitInstructions);
|
||||
}
|
||||
|
||||
if (std::find(extVector.begin(), extVector.end(), "cl_khr_fp16") != extVector.end()) {
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityFloat16);
|
||||
}
|
||||
|
||||
if (std::find(extVector.begin(), extVector.end(), "cl_khr_fp64") != extVector.end()) {
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityFloat64);
|
||||
}
|
||||
|
||||
if (std::find(extVector.begin(), extVector.end(), "cl_khr_int64_base_atomics") != extVector.end() ||
|
||||
std::find(extVector.begin(), extVector.end(), "cl_khr_int64_extended_atomics") != extVector.end()) {
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityInt64Atomics);
|
||||
}
|
||||
|
||||
if (std::find(extVector.begin(), extVector.end(), "cl_khr_integer_dot_product") != extVector.end()) {
|
||||
deviceInfo.spirvExtensions.push_back("SPV_KHR_integer_dot_product");
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityDotProduct);
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityDotProductInput4x8BitPacked);
|
||||
if (deviceInfo.integerDotCapabilities & CL_DEVICE_INTEGER_DOT_PRODUCT_INPUT_4x8BIT_KHR) {
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityDotProductInput4x8Bit);
|
||||
}
|
||||
}
|
||||
|
||||
if (std::find(extVector.begin(), extVector.end(), "cl_khr_kernel_clock") != extVector.end()) {
|
||||
deviceInfo.spirvExtensions.push_back("SPV_KHR_shader_clock");
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityShaderClockKHR);
|
||||
}
|
||||
|
||||
if (std::find(extVector.begin(), extVector.end(), "cl_khr_mipmap_image") != extVector.end() &&
|
||||
std::find(extVector.begin(), extVector.end(), "cl_khr_mipmap_image_writes") != extVector.end()) {
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityImageMipmap);
|
||||
}
|
||||
|
||||
if (std::find(extVector.begin(), extVector.end(), "cl_khr_spirv_linkonce_odr") != extVector.end()) {
|
||||
deviceInfo.spirvExtensions.push_back("SPV_KHR_linkonce_odr");
|
||||
}
|
||||
|
||||
if (std::find(extVector.begin(), extVector.end(), "cl_khr_spirv_no_integer_wrap_decoration") != extVector.end()) {
|
||||
deviceInfo.spirvExtensions.push_back("SPV_KHR_no_integer_wrap_decoration");
|
||||
}
|
||||
|
||||
if (std::find(extVector.begin(), extVector.end(), "cl_khr_subgroup_ballot") != extVector.end()) {
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityGroupNonUniformBallot);
|
||||
}
|
||||
|
||||
if (std::find(extVector.begin(), extVector.end(), "cl_khr_subgroup_clustered_reduce") != extVector.end()) {
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityGroupNonUniformClustered);
|
||||
}
|
||||
|
||||
if (std::find(extVector.begin(), extVector.end(), "cl_khr_subgroup_named_barrier") != extVector.end()) {
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityNamedBarrier);
|
||||
}
|
||||
|
||||
if (std::find(extVector.begin(), extVector.end(), "cl_khr_subgroup_non_uniform_arithmetic") != extVector.end()) {
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityGroupNonUniformArithmetic);
|
||||
}
|
||||
|
||||
if (std::find(extVector.begin(), extVector.end(), "cl_khr_subgroup_non_uniform_vote") != extVector.end()) {
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityGroupNonUniform);
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityGroupNonUniformVote);
|
||||
}
|
||||
|
||||
if (std::find(extVector.begin(), extVector.end(), "cl_khr_subgroup_rotate") != extVector.end()) {
|
||||
deviceInfo.spirvExtensions.push_back("SPV_KHR_subgroup_rotate");
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityGroupNonUniformRotateKHR);
|
||||
}
|
||||
|
||||
if (std::find(extVector.begin(), extVector.end(), "cl_khr_subgroup_shuffle") != extVector.end()) {
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityGroupNonUniformShuffle);
|
||||
}
|
||||
|
||||
if (std::find(extVector.begin(), extVector.end(), "cl_khr_subgroup_shuffle_relative") != extVector.end()) {
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityGroupNonUniformShuffleRelative);
|
||||
}
|
||||
|
||||
if (std::find(extVector.begin(), extVector.end(), "cl_khr_work_group_uniform_arithmetic") != extVector.end()) {
|
||||
deviceInfo.spirvExtensions.push_back("SPV_KHR_uniform_group_instructions");
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityGroupUniformArithmeticKHR);
|
||||
}
|
||||
|
||||
if (std::find(extVector.begin(), extVector.end(), "cl_ext_float_atomics") != extVector.end()) {
|
||||
if (deviceInfo.singleFpAtomicCapabilities & (CL_DEVICE_GLOBAL_FP_ATOMIC_ADD_EXT | CL_DEVICE_LOCAL_FP_ATOMIC_ADD_EXT)) {
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityAtomicFloat32AddEXT);
|
||||
}
|
||||
if (deviceInfo.singleFpAtomicCapabilities & (CL_DEVICE_GLOBAL_FP_ATOMIC_MIN_MAX_EXT | CL_DEVICE_LOCAL_FP_ATOMIC_MIN_MAX_EXT)) {
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityAtomicFloat32MinMaxEXT);
|
||||
}
|
||||
if (deviceInfo.halfFpAtomicCapabilities & (CL_DEVICE_GLOBAL_FP_ATOMIC_ADD_EXT | CL_DEVICE_LOCAL_FP_ATOMIC_ADD_EXT)) {
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityAtomicFloat16AddEXT);
|
||||
}
|
||||
if (deviceInfo.halfFpAtomicCapabilities & (CL_DEVICE_GLOBAL_FP_ATOMIC_MIN_MAX_EXT | CL_DEVICE_LOCAL_FP_ATOMIC_MIN_MAX_EXT)) {
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityAtomicFloat16MinMaxEXT);
|
||||
}
|
||||
if (deviceInfo.doubleFpAtomicCapabilities & (CL_DEVICE_GLOBAL_FP_ATOMIC_ADD_EXT | CL_DEVICE_LOCAL_FP_ATOMIC_ADD_EXT)) {
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityAtomicFloat64AddEXT);
|
||||
}
|
||||
if (deviceInfo.doubleFpAtomicCapabilities & (CL_DEVICE_GLOBAL_FP_ATOMIC_MIN_MAX_EXT | CL_DEVICE_LOCAL_FP_ATOMIC_MIN_MAX_EXT)) {
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityAtomicFloat64MinMaxEXT);
|
||||
}
|
||||
if (deviceInfo.singleFpAtomicCapabilities & (CL_DEVICE_GLOBAL_FP_ATOMIC_ADD_EXT | CL_DEVICE_LOCAL_FP_ATOMIC_ADD_EXT) ||
|
||||
deviceInfo.doubleFpAtomicCapabilities & (CL_DEVICE_GLOBAL_FP_ATOMIC_ADD_EXT | CL_DEVICE_LOCAL_FP_ATOMIC_ADD_EXT)) {
|
||||
deviceInfo.spirvExtensions.push_back("SPV_EXT_shader_atomic_float_add");
|
||||
}
|
||||
if (deviceInfo.singleFpAtomicCapabilities & (CL_DEVICE_GLOBAL_FP_ATOMIC_MIN_MAX_EXT | CL_DEVICE_LOCAL_FP_ATOMIC_MIN_MAX_EXT) ||
|
||||
deviceInfo.halfFpAtomicCapabilities & (CL_DEVICE_GLOBAL_FP_ATOMIC_MIN_MAX_EXT | CL_DEVICE_LOCAL_FP_ATOMIC_MIN_MAX_EXT) ||
|
||||
deviceInfo.doubleFpAtomicCapabilities & (CL_DEVICE_GLOBAL_FP_ATOMIC_MIN_MAX_EXT | CL_DEVICE_LOCAL_FP_ATOMIC_MIN_MAX_EXT)) {
|
||||
deviceInfo.spirvExtensions.push_back("SPV_EXT_shader_atomic_float_min_max");
|
||||
}
|
||||
}
|
||||
|
||||
if (std::find(extVector.begin(), extVector.end(), "cl_intel_bfloat16_conversions") != extVector.end()) {
|
||||
deviceInfo.spirvExtensions.push_back("SPV_INTEL_bfloat16_conversion");
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilityBFloat16ConversionINTEL);
|
||||
}
|
||||
|
||||
if (std::find(extVector.begin(), extVector.end(), "cl_intel_spirv_device_side_avc_motion_estimation") != extVector.end()) {
|
||||
deviceInfo.spirvExtensions.push_back("SPV_INTEL_device_side_avc_motion_estimation");
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilitySubgroupAvcMotionEstimationChromaINTEL);
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilitySubgroupAvcMotionEstimationINTEL);
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilitySubgroupAvcMotionEstimationIntraINTEL);
|
||||
}
|
||||
|
||||
if (std::find(extVector.begin(), extVector.end(), "cl_intel_spirv_media_block_io") != extVector.end()) {
|
||||
deviceInfo.spirvExtensions.push_back("SPV_INTEL_media_block_io");
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilitySubgroupImageMediaBlockIOINTEL);
|
||||
}
|
||||
|
||||
if (std::find(extVector.begin(), extVector.end(), "cl_intel_spirv_subgroups") != extVector.end()) {
|
||||
deviceInfo.spirvExtensions.push_back("SPV_INTEL_subgroups");
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilitySubgroupBufferBlockIOINTEL);
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilitySubgroupImageBlockIOINTEL);
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilitySubgroupShuffleINTEL);
|
||||
}
|
||||
|
||||
if (std::find(extVector.begin(), extVector.end(), "cl_intel_split_work_group_barrier") != extVector.end()) {
|
||||
deviceInfo.spirvExtensions.push_back("SPV_INTEL_split_barrier");
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilitySplitBarrierINTEL);
|
||||
}
|
||||
|
||||
if (std::find(extVector.begin(), extVector.end(), "cl_intel_subgroup_buffer_prefetch") != extVector.end()) {
|
||||
deviceInfo.spirvExtensions.push_back("SPV_INTEL_subgroup_buffer_prefetch");
|
||||
deviceInfo.spirvCapabilities.push_back(spv::CapabilitySubgroupBufferPrefetchINTEL);
|
||||
}
|
||||
}
|
||||
|
||||
void ClDevice::initializeMaxPoolCount() {
|
||||
auto &device = getDevice();
|
||||
const auto bitfield = device.getDeviceBitfield();
|
||||
|
||||
@@ -349,6 +349,27 @@ cl_int ClDevice::getDeviceInfo(cl_device_info paramName,
|
||||
src = getSharedDeviceInfo().threadsPerEUConfigs.begin();
|
||||
retSize = srcSize = (getSharedDeviceInfo().threadsPerEUConfigs.size() * sizeof(uint32_t));
|
||||
break;
|
||||
case CL_DEVICE_SPIRV_EXTENSIONS_KHR:
|
||||
std::call_once(initializeSpirvQueriesOnce, [this]() {
|
||||
this->initializeSpirvQueries();
|
||||
});
|
||||
src = deviceInfo.spirvExtensions.data();
|
||||
retSize = srcSize = deviceInfo.spirvExtensions.size() * sizeof(const char *);
|
||||
break;
|
||||
case CL_DEVICE_SPIRV_EXTENDED_INSTRUCTION_SETS_KHR:
|
||||
std::call_once(initializeSpirvQueriesOnce, [this]() {
|
||||
this->initializeSpirvQueries();
|
||||
});
|
||||
src = deviceInfo.spirvExtendedInstructionSets.data();
|
||||
retSize = srcSize = deviceInfo.spirvExtendedInstructionSets.size() * sizeof(const char *);
|
||||
break;
|
||||
case CL_DEVICE_SPIRV_CAPABILITIES_KHR:
|
||||
std::call_once(initializeSpirvQueriesOnce, [this]() {
|
||||
this->initializeSpirvQueries();
|
||||
});
|
||||
src = deviceInfo.spirvCapabilities.data();
|
||||
retSize = srcSize = deviceInfo.spirvCapabilities.size() * sizeof(cl_uint);
|
||||
break;
|
||||
default:
|
||||
if (getDeviceInfoForImage(paramName, src, srcSize, retSize)) {
|
||||
if (false == getSharedDeviceInfo().imageSupport) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2020-2024 Intel Corporation
|
||||
* Copyright (C) 2020-2025 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
@@ -146,6 +146,9 @@ struct ClDeviceInfo {
|
||||
cl_device_integer_dot_product_capabilities_khr integerDotCapabilities;
|
||||
cl_device_integer_dot_product_acceleration_properties_khr integerDotAccelerationProperties8Bit;
|
||||
cl_device_integer_dot_product_acceleration_properties_khr integerDotAccelerationProperties4x8BitPacked;
|
||||
std::vector<const char*> spirvExtensions;
|
||||
std::vector<const char*> spirvExtendedInstructionSets;
|
||||
std::vector<cl_uint> spirvCapabilities;
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
|
||||
@@ -309,6 +309,93 @@ TEST_F(clGetDeviceInfoTests, GivenClDeviceIlVersionParamWhenGettingDeviceInfoThe
|
||||
EXPECT_STREQ("SPIR-V_1.5 SPIR-V_1.4 SPIR-V_1.3 SPIR-V_1.2 SPIR-V_1.1 SPIR-V_1.0 ", paramValue.get());
|
||||
}
|
||||
|
||||
TEST_F(clGetDeviceInfoTests, SpirvQueryForSpirvExtensionsReturnsSpirvExtensions) {
|
||||
size_t paramRetSize = 0;
|
||||
|
||||
cl_int retVal = clGetDeviceInfo(
|
||||
testedClDevice,
|
||||
CL_DEVICE_SPIRV_EXTENSIONS_KHR,
|
||||
0,
|
||||
nullptr,
|
||||
¶mRetSize);
|
||||
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||
|
||||
std::vector<const char *> spirvExtensions(paramRetSize / sizeof(const char *));
|
||||
retVal = clGetDeviceInfo(
|
||||
testedClDevice,
|
||||
CL_DEVICE_SPIRV_EXTENSIONS_KHR,
|
||||
paramRetSize,
|
||||
spirvExtensions.data(),
|
||||
nullptr);
|
||||
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||
|
||||
for (auto extension : spirvExtensions) {
|
||||
EXPECT_EQ(0, std::strncmp(extension, "SPV_", 4));
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(clGetDeviceInfoTests, SpirvQueryForSpirvExtendedInstructionSetsReturnsSpirvExtendedInstructionSets) {
|
||||
size_t paramRetSize = 0;
|
||||
|
||||
cl_int retVal = clGetDeviceInfo(
|
||||
testedClDevice,
|
||||
CL_DEVICE_SPIRV_EXTENDED_INSTRUCTION_SETS_KHR,
|
||||
0,
|
||||
nullptr,
|
||||
¶mRetSize);
|
||||
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||
|
||||
std::vector<const char *> spirvExtendedInstructionSets(paramRetSize / sizeof(const char *));
|
||||
retVal = clGetDeviceInfo(
|
||||
testedClDevice,
|
||||
CL_DEVICE_SPIRV_EXTENDED_INSTRUCTION_SETS_KHR,
|
||||
paramRetSize,
|
||||
spirvExtendedInstructionSets.data(),
|
||||
nullptr);
|
||||
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||
|
||||
bool found = paramRetSize == 0;
|
||||
for (auto extinst : spirvExtendedInstructionSets) {
|
||||
if (std::strcmp(extinst, "OpenCL.std") == 0) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
EXPECT_TRUE(found);
|
||||
}
|
||||
|
||||
TEST_F(clGetDeviceInfoTests, SpirvQueryForSpirvCapabilitiesReturnsSpirvCapabilities) {
|
||||
size_t paramRetSize = 0;
|
||||
|
||||
cl_int retVal = clGetDeviceInfo(
|
||||
testedClDevice,
|
||||
CL_DEVICE_SPIRV_CAPABILITIES_KHR,
|
||||
0,
|
||||
nullptr,
|
||||
¶mRetSize);
|
||||
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||
|
||||
std::vector<cl_uint> spirvCapabilities(paramRetSize / sizeof(cl_uint));
|
||||
retVal = clGetDeviceInfo(
|
||||
testedClDevice,
|
||||
CL_DEVICE_SPIRV_CAPABILITIES_KHR,
|
||||
paramRetSize,
|
||||
spirvCapabilities.data(),
|
||||
nullptr);
|
||||
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||
|
||||
constexpr cl_uint spirvCapabilityKernel = 6;
|
||||
|
||||
bool found = paramRetSize == 0;
|
||||
for (auto cap : spirvCapabilities) {
|
||||
if (cap == spirvCapabilityKernel) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
EXPECT_TRUE(found);
|
||||
}
|
||||
|
||||
using matcherAtMostGen12lp = IsAtMostGfxCore<IGFX_GEN12LP_CORE>;
|
||||
HWTEST2_F(clGetDeviceInfoTests, givenClDeviceSupportedThreadArbitrationPolicyIntelWhenCallClGetDeviceInfoThenProperArrayIsReturned, matcherAtMostGen12lp) {
|
||||
cl_device_info paramName = 0;
|
||||
|
||||
@@ -152,6 +152,9 @@ TEST_F(DeviceGetCapsTest, WhenCreatingDeviceThenCapsArePopulatedCorrectly) {
|
||||
EXPECT_GT(caps.openclCAllVersions.size(), 0u);
|
||||
EXPECT_GT(caps.openclCFeatures.size(), 0u);
|
||||
EXPECT_EQ(caps.extensionsWithVersion.size(), 0u);
|
||||
EXPECT_EQ(caps.spirvExtendedInstructionSets.size(), 0u);
|
||||
EXPECT_EQ(caps.spirvExtensions.size(), 0u);
|
||||
EXPECT_EQ(caps.spirvCapabilities.size(), 0u);
|
||||
EXPECT_STREQ("v2025-04-14-00", caps.latestConformanceVersionPassed);
|
||||
|
||||
EXPECT_NE(nullptr, caps.spirVersions);
|
||||
@@ -559,6 +562,7 @@ TEST_F(DeviceGetCapsTest, givenOpenCLVersion21WhenCapsAreCreatedThenDeviceReport
|
||||
EXPECT_TRUE(hasSubstr(caps.deviceExtensions, std::string("cl_intel_spirv_subgroups")));
|
||||
EXPECT_TRUE(hasSubstr(caps.deviceExtensions, std::string("cl_khr_spirv_linkonce_odr")));
|
||||
EXPECT_TRUE(hasSubstr(caps.deviceExtensions, std::string("cl_khr_spirv_no_integer_wrap_decoration")));
|
||||
EXPECT_TRUE(hasSubstr(caps.deviceExtensions, std::string("cl_khr_spirv_queries")));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -608,6 +612,7 @@ TEST_F(DeviceGetCapsTest, givenOpenCLVersion12WhenCapsAreCreatedThenDeviceDoesnt
|
||||
EXPECT_FALSE(hasSubstr(caps.deviceExtensions, std::string("cl_intel_spirv_subgroups")));
|
||||
EXPECT_FALSE(hasSubstr(caps.deviceExtensions, std::string("cl_khr_spirv_linkonce_odr")));
|
||||
EXPECT_FALSE(hasSubstr(caps.deviceExtensions, std::string("cl_khr_spirv_no_integer_wrap_decoration")));
|
||||
EXPECT_FALSE(hasSubstr(caps.deviceExtensions, std::string("cl_khr_spirv_queries")));
|
||||
}
|
||||
|
||||
TEST_F(DeviceGetCapsTest, givenEnableNV12setToTrueAndSupportImagesWhenCapsAreCreatedThenDeviceReportsNV12Extension) {
|
||||
|
||||
@@ -281,6 +281,7 @@ TEST_F(PlatformTest, givenSupportingCl21WhenPlatformSupportsFp64ThenFillMatching
|
||||
EXPECT_TRUE(hasSubstr(compilerExtensions, std::string("cl_intel_spirv_subgroups")));
|
||||
EXPECT_TRUE(hasSubstr(compilerExtensions, std::string("cl_khr_spirv_linkonce_odr")));
|
||||
EXPECT_TRUE(hasSubstr(compilerExtensions, std::string("cl_khr_spirv_no_integer_wrap_decoration")));
|
||||
EXPECT_TRUE(hasSubstr(compilerExtensions, std::string("cl_khr_spirv_queries")));
|
||||
}
|
||||
|
||||
if (hwInfo->capabilityTable.ftrSupportsFP64) {
|
||||
|
||||
@@ -117,6 +117,7 @@ std::string CompilerProductHelperHw<gfxProduct>::getDeviceExtensions(const Hardw
|
||||
extensions += "cl_intel_spirv_subgroups ";
|
||||
extensions += "cl_khr_spirv_linkonce_odr ";
|
||||
extensions += "cl_khr_spirv_no_integer_wrap_decoration ";
|
||||
extensions += "cl_khr_spirv_queries ";
|
||||
|
||||
extensions += "cl_intel_unified_shared_memory ";
|
||||
if (hwInfo.capabilityTable.supportsImages) {
|
||||
|
||||
2
third_party/spirv_headers/.version
vendored
Normal file
2
third_party/spirv_headers/.version
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
git_url: https://github.com/KhronosGroup/SPIRV-Headers
|
||||
git_revision: 2a611a970fdbc41ac2e3e328802aed9985352dca
|
||||
502
third_party/spirv_headers/LICENSE
vendored
Normal file
502
third_party/spirv_headers/LICENSE
vendored
Normal file
@@ -0,0 +1,502 @@
|
||||
Files: All files except for those called out below.
|
||||
Copyright (c) 2015-2024 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.
|
||||
|
||||
---
|
||||
|
||||
Files: include/spirv/spir-v.xml
|
||||
Copyright (c) 2015-2024 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.
|
||||
|
||||
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.
|
||||
|
||||
---
|
||||
|
||||
Files: tools/buildHeaders/jsoncpp/*
|
||||
The JsonCpp library's source code, including accompanying documentation,
|
||||
tests and demonstration applications, are licensed under the following
|
||||
conditions...
|
||||
|
||||
The author (Baptiste Lepilleur) explicitly disclaims copyright in all
|
||||
jurisdictions which recognize such a disclaimer. In such jurisdictions,
|
||||
this software is released into the Public Domain.
|
||||
|
||||
In jurisdictions which do not recognize Public Domain property (e.g. Germany as of
|
||||
2010), this software is Copyright (c) 2007-2010 by Baptiste Lepilleur, and is
|
||||
released under the terms of the MIT License (see below).
|
||||
|
||||
In jurisdictions which recognize Public Domain property, the user of this
|
||||
software may choose to accept it either as 1) Public Domain, 2) under the
|
||||
conditions of the MIT License (see below), or 3) under the terms of dual
|
||||
Public Domain/MIT License conditions described here, as they choose.
|
||||
|
||||
The MIT License is about as close to Public Domain as a license can get, and is
|
||||
described in clear, concise terms at:
|
||||
|
||||
http://en.wikipedia.org/wiki/MIT_License
|
||||
|
||||
The full text of the MIT License follows:
|
||||
|
||||
========================================================================
|
||||
Copyright (c) 2007-2010 Baptiste Lepilleur
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
files (the "Software"), to deal in the Software without
|
||||
restriction, including without limitation the rights to use, copy,
|
||||
modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is
|
||||
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 Software.
|
||||
|
||||
THE SOFTWARE IS 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 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
========================================================================
|
||||
|
||||
---
|
||||
|
||||
Files: **.md, WORKSPACE, .git**
|
||||
|
||||
Attribution 4.0 International
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons Corporation ("Creative Commons") is not a law firm and
|
||||
does not provide legal services or legal advice. Distribution of
|
||||
Creative Commons public licenses does not create a lawyer-client or
|
||||
other relationship. Creative Commons makes its licenses and related
|
||||
information available on an "as-is" basis. Creative Commons gives no
|
||||
warranties regarding its licenses, any material licensed under their
|
||||
terms and conditions, or any related information. Creative Commons
|
||||
disclaims all liability for damages resulting from their use to the
|
||||
fullest extent possible.
|
||||
|
||||
Using Creative Commons Public Licenses
|
||||
|
||||
Creative Commons public licenses provide a standard set of terms and
|
||||
conditions that creators and other rights holders may use to share
|
||||
original works of authorship and other material subject to copyright
|
||||
and certain other rights specified in the public license below. The
|
||||
following considerations are for informational purposes only, are not
|
||||
exhaustive, and do not form part of our licenses.
|
||||
|
||||
Considerations for licensors: Our public licenses are
|
||||
intended for use by those authorized to give the public
|
||||
permission to use material in ways otherwise restricted by
|
||||
copyright and certain other rights. Our licenses are
|
||||
irrevocable. Licensors should read and understand the terms
|
||||
and conditions of the license they choose before applying it.
|
||||
Licensors should also secure all rights necessary before
|
||||
applying our licenses so that the public can reuse the
|
||||
material as expected. Licensors should clearly mark any
|
||||
material not subject to the license. This includes other CC-
|
||||
licensed material, or material used under an exception or
|
||||
limitation to copyright. More considerations for licensors:
|
||||
wiki.creativecommons.org/Considerations_for_licensors
|
||||
|
||||
Considerations for the public: By using one of our public
|
||||
licenses, a licensor grants the public permission to use the
|
||||
licensed material under specified terms and conditions. If
|
||||
the licensor's permission is not necessary for any reason--for
|
||||
example, because of any applicable exception or limitation to
|
||||
copyright--then that use is not regulated by the license. Our
|
||||
licenses grant only permissions under copyright and certain
|
||||
other rights that a licensor has authority to grant. Use of
|
||||
the licensed material may still be restricted for other
|
||||
reasons, including because others have copyright or other
|
||||
rights in the material. A licensor may make special requests,
|
||||
such as asking that all changes be marked or described.
|
||||
Although not required by our licenses, you are encouraged to
|
||||
respect those requests where reasonable. More considerations
|
||||
for the public:
|
||||
wiki.creativecommons.org/Considerations_for_licensees
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons Attribution 4.0 International Public License
|
||||
|
||||
By exercising the Licensed Rights (defined below), You accept and agree
|
||||
to be bound by the terms and conditions of this Creative Commons
|
||||
Attribution 4.0 International Public License ("Public License"). To the
|
||||
extent this Public License may be interpreted as a contract, You are
|
||||
granted the Licensed Rights in consideration of Your acceptance of
|
||||
these terms and conditions, and the Licensor grants You such rights in
|
||||
consideration of benefits the Licensor receives from making the
|
||||
Licensed Material available under these terms and conditions.
|
||||
|
||||
|
||||
Section 1 -- Definitions.
|
||||
|
||||
a. Adapted Material means material subject to Copyright and Similar
|
||||
Rights that is derived from or based upon the Licensed Material
|
||||
and in which the Licensed Material is translated, altered,
|
||||
arranged, transformed, or otherwise modified in a manner requiring
|
||||
permission under the Copyright and Similar Rights held by the
|
||||
Licensor. For purposes of this Public License, where the Licensed
|
||||
Material is a musical work, performance, or sound recording,
|
||||
Adapted Material is always produced where the Licensed Material is
|
||||
synched in timed relation with a moving image.
|
||||
|
||||
b. Adapter's License means the license You apply to Your Copyright
|
||||
and Similar Rights in Your contributions to Adapted Material in
|
||||
accordance with the terms and conditions of this Public License.
|
||||
|
||||
c. Copyright and Similar Rights means copyright and/or similar rights
|
||||
closely related to copyright including, without limitation,
|
||||
performance, broadcast, sound recording, and Sui Generis Database
|
||||
Rights, without regard to how the rights are labeled or
|
||||
categorized. For purposes of this Public License, the rights
|
||||
specified in Section 2(b)(1)-(2) are not Copyright and Similar
|
||||
Rights.
|
||||
|
||||
d. Effective Technological Measures means those measures that, in the
|
||||
absence of proper authority, may not be circumvented under laws
|
||||
fulfilling obligations under Article 11 of the WIPO Copyright
|
||||
Treaty adopted on December 20, 1996, and/or similar international
|
||||
agreements.
|
||||
|
||||
e. Exceptions and Limitations means fair use, fair dealing, and/or
|
||||
any other exception or limitation to Copyright and Similar Rights
|
||||
that applies to Your use of the Licensed Material.
|
||||
|
||||
f. Licensed Material means the artistic or literary work, database,
|
||||
or other material to which the Licensor applied this Public
|
||||
License.
|
||||
|
||||
g. Licensed Rights means the rights granted to You subject to the
|
||||
terms and conditions of this Public License, which are limited to
|
||||
all Copyright and Similar Rights that apply to Your use of the
|
||||
Licensed Material and that the Licensor has authority to license.
|
||||
|
||||
h. Licensor means the individual(s) or entity(ies) granting rights
|
||||
under this Public License.
|
||||
|
||||
i. Share means to provide material to the public by any means or
|
||||
process that requires permission under the Licensed Rights, such
|
||||
as reproduction, public display, public performance, distribution,
|
||||
dissemination, communication, or importation, and to make material
|
||||
available to the public including in ways that members of the
|
||||
public may access the material from a place and at a time
|
||||
individually chosen by them.
|
||||
|
||||
j. Sui Generis Database Rights means rights other than copyright
|
||||
resulting from Directive 96/9/EC of the European Parliament and of
|
||||
the Council of 11 March 1996 on the legal protection of databases,
|
||||
as amended and/or succeeded, as well as other essentially
|
||||
equivalent rights anywhere in the world.
|
||||
|
||||
k. You means the individual or entity exercising the Licensed Rights
|
||||
under this Public License. Your has a corresponding meaning.
|
||||
|
||||
|
||||
Section 2 -- Scope.
|
||||
|
||||
a. License grant.
|
||||
|
||||
1. Subject to the terms and conditions of this Public License,
|
||||
the Licensor hereby grants You a worldwide, royalty-free,
|
||||
non-sublicensable, non-exclusive, irrevocable license to
|
||||
exercise the Licensed Rights in the Licensed Material to:
|
||||
|
||||
a. reproduce and Share the Licensed Material, in whole or
|
||||
in part; and
|
||||
|
||||
b. produce, reproduce, and Share Adapted Material.
|
||||
|
||||
2. Exceptions and Limitations. For the avoidance of doubt, where
|
||||
Exceptions and Limitations apply to Your use, this Public
|
||||
License does not apply, and You do not need to comply with
|
||||
its terms and conditions.
|
||||
|
||||
3. Term. The term of this Public License is specified in Section
|
||||
6(a).
|
||||
|
||||
4. Media and formats; technical modifications allowed. The
|
||||
Licensor authorizes You to exercise the Licensed Rights in
|
||||
all media and formats whether now known or hereafter created,
|
||||
and to make technical modifications necessary to do so. The
|
||||
Licensor waives and/or agrees not to assert any right or
|
||||
authority to forbid You from making technical modifications
|
||||
necessary to exercise the Licensed Rights, including
|
||||
technical modifications necessary to circumvent Effective
|
||||
Technological Measures. For purposes of this Public License,
|
||||
simply making modifications authorized by this Section 2(a)
|
||||
(4) never produces Adapted Material.
|
||||
|
||||
5. Downstream recipients.
|
||||
|
||||
a. Offer from the Licensor -- Licensed Material. Every
|
||||
recipient of the Licensed Material automatically
|
||||
receives an offer from the Licensor to exercise the
|
||||
Licensed Rights under the terms and conditions of this
|
||||
Public License.
|
||||
|
||||
b. No downstream restrictions. You may not offer or impose
|
||||
any additional or different terms or conditions on, or
|
||||
apply any Effective Technological Measures to, the
|
||||
Licensed Material if doing so restricts exercise of the
|
||||
Licensed Rights by any recipient of the Licensed
|
||||
Material.
|
||||
|
||||
6. No endorsement. Nothing in this Public License constitutes or
|
||||
may be construed as permission to assert or imply that You
|
||||
are, or that Your use of the Licensed Material is, connected
|
||||
with, or sponsored, endorsed, or granted official status by,
|
||||
the Licensor or others designated to receive attribution as
|
||||
provided in Section 3(a)(1)(A)(i).
|
||||
|
||||
b. Other rights.
|
||||
|
||||
1. Moral rights, such as the right of integrity, are not
|
||||
licensed under this Public License, nor are publicity,
|
||||
privacy, and/or other similar personality rights; however, to
|
||||
the extent possible, the Licensor waives and/or agrees not to
|
||||
assert any such rights held by the Licensor to the limited
|
||||
extent necessary to allow You to exercise the Licensed
|
||||
Rights, but not otherwise.
|
||||
|
||||
2. Patent and trademark rights are not licensed under this
|
||||
Public License.
|
||||
|
||||
3. To the extent possible, the Licensor waives any right to
|
||||
collect royalties from You for the exercise of the Licensed
|
||||
Rights, whether directly or through a collecting society
|
||||
under any voluntary or waivable statutory or compulsory
|
||||
licensing scheme. In all other cases the Licensor expressly
|
||||
reserves any right to collect such royalties.
|
||||
|
||||
|
||||
Section 3 -- License Conditions.
|
||||
|
||||
Your exercise of the Licensed Rights is expressly made subject to the
|
||||
following conditions.
|
||||
|
||||
a. Attribution.
|
||||
|
||||
1. If You Share the Licensed Material (including in modified
|
||||
form), You must:
|
||||
|
||||
a. retain the following if it is supplied by the Licensor
|
||||
with the Licensed Material:
|
||||
|
||||
i. identification of the creator(s) of the Licensed
|
||||
Material and any others designated to receive
|
||||
attribution, in any reasonable manner requested by
|
||||
the Licensor (including by pseudonym if
|
||||
designated);
|
||||
|
||||
ii. a copyright notice;
|
||||
|
||||
iii. a notice that refers to this Public License;
|
||||
|
||||
iv. a notice that refers to the disclaimer of
|
||||
warranties;
|
||||
|
||||
v. a URI or hyperlink to the Licensed Material to the
|
||||
extent reasonably practicable;
|
||||
|
||||
b. indicate if You modified the Licensed Material and
|
||||
retain an indication of any previous modifications; and
|
||||
|
||||
c. indicate the Licensed Material is licensed under this
|
||||
Public License, and include the text of, or the URI or
|
||||
hyperlink to, this Public License.
|
||||
|
||||
2. You may satisfy the conditions in Section 3(a)(1) in any
|
||||
reasonable manner based on the medium, means, and context in
|
||||
which You Share the Licensed Material. For example, it may be
|
||||
reasonable to satisfy the conditions by providing a URI or
|
||||
hyperlink to a resource that includes the required
|
||||
information.
|
||||
|
||||
3. If requested by the Licensor, You must remove any of the
|
||||
information required by Section 3(a)(1)(A) to the extent
|
||||
reasonably practicable.
|
||||
|
||||
4. If You Share Adapted Material You produce, the Adapter's
|
||||
License You apply must not prevent recipients of the Adapted
|
||||
Material from complying with this Public License.
|
||||
|
||||
|
||||
Section 4 -- Sui Generis Database Rights.
|
||||
|
||||
Where the Licensed Rights include Sui Generis Database Rights that
|
||||
apply to Your use of the Licensed Material:
|
||||
|
||||
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
|
||||
to extract, reuse, reproduce, and Share all or a substantial
|
||||
portion of the contents of the database;
|
||||
|
||||
b. if You include all or a substantial portion of the database
|
||||
contents in a database in which You have Sui Generis Database
|
||||
Rights, then the database in which You have Sui Generis Database
|
||||
Rights (but not its individual contents) is Adapted Material; and
|
||||
|
||||
c. You must comply with the conditions in Section 3(a) if You Share
|
||||
all or a substantial portion of the contents of the database.
|
||||
|
||||
For the avoidance of doubt, this Section 4 supplements and does not
|
||||
replace Your obligations under this Public License where the Licensed
|
||||
Rights include other Copyright and Similar Rights.
|
||||
|
||||
|
||||
Section 5 -- Disclaimer of Warranties and Limitation of Liability.
|
||||
|
||||
a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
|
||||
EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
|
||||
AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
|
||||
ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
|
||||
IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
|
||||
WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
|
||||
ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
|
||||
KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
|
||||
ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
|
||||
|
||||
b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
|
||||
TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
|
||||
NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
|
||||
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
|
||||
COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
|
||||
USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
|
||||
ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
|
||||
DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
|
||||
IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
|
||||
|
||||
c. The disclaimer of warranties and limitation of liability provided
|
||||
above shall be interpreted in a manner that, to the extent
|
||||
possible, most closely approximates an absolute disclaimer and
|
||||
waiver of all liability.
|
||||
|
||||
|
||||
Section 6 -- Term and Termination.
|
||||
|
||||
a. This Public License applies for the term of the Copyright and
|
||||
Similar Rights licensed here. However, if You fail to comply with
|
||||
this Public License, then Your rights under this Public License
|
||||
terminate automatically.
|
||||
|
||||
b. Where Your right to use the Licensed Material has terminated under
|
||||
Section 6(a), it reinstates:
|
||||
|
||||
1. automatically as of the date the violation is cured, provided
|
||||
it is cured within 30 days of Your discovery of the
|
||||
violation; or
|
||||
|
||||
2. upon express reinstatement by the Licensor.
|
||||
|
||||
For the avoidance of doubt, this Section 6(b) does not affect any
|
||||
right the Licensor may have to seek remedies for Your violations
|
||||
of this Public License.
|
||||
|
||||
c. For the avoidance of doubt, the Licensor may also offer the
|
||||
Licensed Material under separate terms or conditions or stop
|
||||
distributing the Licensed Material at any time; however, doing so
|
||||
will not terminate this Public License.
|
||||
|
||||
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
|
||||
License.
|
||||
|
||||
|
||||
Section 7 -- Other Terms and Conditions.
|
||||
|
||||
a. The Licensor shall not be bound by any additional or different
|
||||
terms or conditions communicated by You unless expressly agreed.
|
||||
|
||||
b. Any arrangements, understandings, or agreements regarding the
|
||||
Licensed Material not stated herein are separate from and
|
||||
independent of the terms and conditions of this Public License.
|
||||
|
||||
|
||||
Section 8 -- Interpretation.
|
||||
|
||||
a. For the avoidance of doubt, this Public License does not, and
|
||||
shall not be interpreted to, reduce, limit, restrict, or impose
|
||||
conditions on any use of the Licensed Material that could lawfully
|
||||
be made without permission under this Public License.
|
||||
|
||||
b. To the extent possible, if any provision of this Public License is
|
||||
deemed unenforceable, it shall be automatically reformed to the
|
||||
minimum extent necessary to make it enforceable. If the provision
|
||||
cannot be reformed, it shall be severed from this Public License
|
||||
without affecting the enforceability of the remaining terms and
|
||||
conditions.
|
||||
|
||||
c. No term or condition of this Public License will be waived and no
|
||||
failure to comply consented to unless expressly agreed to by the
|
||||
Licensor.
|
||||
|
||||
d. Nothing in this Public License constitutes or may be interpreted
|
||||
as a limitation upon, or waiver of, any privileges and immunities
|
||||
that apply to the Licensor or You, including from the legal
|
||||
processes of any jurisdiction or authority.
|
||||
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons is not a party to its public
|
||||
licenses. Notwithstanding, Creative Commons may elect to apply one of
|
||||
its public licenses to material it publishes and in those instances
|
||||
will be considered the “Licensor.” The text of the Creative Commons
|
||||
public licenses is dedicated to the public domain under the CC0 Public
|
||||
Domain Dedication. Except for the limited purpose of indicating that
|
||||
material is shared under a Creative Commons public license or as
|
||||
otherwise permitted by the Creative Commons policies published at
|
||||
creativecommons.org/policies, Creative Commons does not authorize the
|
||||
use of the trademark "Creative Commons" or any other trademark or logo
|
||||
of Creative Commons without its prior written consent including,
|
||||
without limitation, in connection with any unauthorized modifications
|
||||
to any of its public licenses or any other arrangements,
|
||||
understandings, or agreements concerning use of licensed material. For
|
||||
the avoidance of doubt, this paragraph does not form part of the
|
||||
public licenses.
|
||||
|
||||
Creative Commons may be contacted at creativecommons.org.
|
||||
|
||||
226
third_party/spirv_headers/README.md
vendored
Normal file
226
third_party/spirv_headers/README.md
vendored
Normal file
@@ -0,0 +1,226 @@
|
||||
# SPIR-V Headers
|
||||
|
||||
This repository contains machine-readable files for the
|
||||
[SPIR-V Registry](https://www.khronos.org/registry/spir-v/).
|
||||
This includes:
|
||||
|
||||
* Header files for various languages.
|
||||
* JSON files describing the grammar for the SPIR-V core instruction set
|
||||
and the extended instruction sets.
|
||||
* The XML registry file.
|
||||
* A tool to build the headers from the JSON grammar.
|
||||
|
||||
Headers are provided in the [include](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.
|
||||
|
||||
## How is this repository updated?
|
||||
|
||||
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](include).
|
||||
|
||||
[The SPIR-V XML registry file](include/spirv/spir-v.xml)
|
||||
is updated by Khronos whenever a new enum range is allocated.
|
||||
|
||||
Pull requests can be made to
|
||||
- request allocation of new enum ranges in the XML registry file
|
||||
- register a new magic number for a SPIR-V generator
|
||||
- reserve specific tokens in the JSON grammar
|
||||
|
||||
### Registering a SPIR-V Generator Magic Number
|
||||
|
||||
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:
|
||||
- keeping generator numbers in numeric order
|
||||
- filling out all the existing fields
|
||||
|
||||
### Reserving tokens in the JSON grammar
|
||||
|
||||
Care should be taken to follow existing precedent in populating the details of reserved tokens.
|
||||
This includes:
|
||||
- pointing to what extension has more information, when possible
|
||||
- keeping enumerants in numeric order
|
||||
- when there are aliases, listing the preferred spelling first
|
||||
- adding the statement `"version" : "None"`
|
||||
|
||||
## How to install the headers
|
||||
|
||||
```
|
||||
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.
|
||||
|
||||
## Using the headers without installing
|
||||
|
||||
### Using CMake
|
||||
A CMake-based project can use the headers without installing, as follows:
|
||||
|
||||
1. Add an `add_subdirectory` directive to include this source tree.
|
||||
2. Use `${SPIRV-Headers_SOURCE_DIR}/include}` in a `target_include_directories`
|
||||
directive.
|
||||
3. In your C or C++ source code use `#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](example/) subdirectory. But since that example is
|
||||
*inside* this repostory, it doesn't use and `add_subdirectory` directive.
|
||||
|
||||
### Using Bazel
|
||||
A Bazel-based project can use the headers without installing, as follows:
|
||||
|
||||
1. Add SPIRV-Headers as a submodule of your project, and add a
|
||||
`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",
|
||||
)
|
||||
```
|
||||
|
||||
2. Add one of the following to the `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,
|
||||
],
|
||||
)
|
||||
```
|
||||
|
||||
3. In your C or C++ source code use `#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"
|
||||
```
|
||||
|
||||
## Generating headers from the JSON grammar for the SPIR-V core instruction set
|
||||
|
||||
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:
|
||||
- this generator is used in a broader context within Khronos to generate the specification,
|
||||
and that influences the languages used, for legacy reasons
|
||||
- the C++ structures built may similarly include more than strictly necessary, for the same reason
|
||||
|
||||
## Generating C headers for extended instruction sets
|
||||
|
||||
The [GLSL.std.450.h](include/spirv/unified1/GLSL.std.450.h)
|
||||
and [OpenCL.std.h](include/spirv/unified1/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](include/spirv/unified1/OpenCLDebugInfo100.h) header
|
||||
is generated from the
|
||||
[extinst.opencl.debuginfo.100.grammar.json](include/spirv/unified1/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
|
||||
```
|
||||
|
||||
## FAQ
|
||||
|
||||
* *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.
|
||||
|
||||
## License
|
||||
<a name="license"></a>
|
||||
```
|
||||
Copyright (c) 2015-2024 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.
|
||||
```
|
||||
18272
third_party/spirv_headers/include/spirv/unified1/spirv.core.grammar.json
vendored
Normal file
18272
third_party/spirv_headers/include/spirv/unified1/spirv.core.grammar.json
vendored
Normal file
File diff suppressed because it is too large
Load Diff
5287
third_party/spirv_headers/include/spirv/unified1/spirv.hpp
vendored
Normal file
5287
third_party/spirv_headers/include/spirv/unified1/spirv.hpp
vendored
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user