Override namespace for SPIRV-Cross.
Some projects also link against SPIRV-Cross statically, and in order to avoid ABI conflicts, we should use a private namespace for the SPIRV-Cross dependency to avoid bugs. See SPIRV-Cross issue #902 for more information. The new namespace is MVK_spirv_cross, and the code now makes use of the SPIRV_CROSS_NAMESPACE macro rather than spirv_cross.
This commit is contained in:
parent
9536538035
commit
38edfdb3de
@ -3488,6 +3488,7 @@
|
|||||||
BITCODE_GENERATION_MODE = bitcode;
|
BITCODE_GENERATION_MODE = bitcode;
|
||||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
|
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = "SPIRV_CROSS_NAMESPACE_OVERRIDE=MVK_spirv_cross";
|
||||||
PRODUCT_NAME = SPIRVCross;
|
PRODUCT_NAME = SPIRVCross;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
VALID_ARCHS = arm64;
|
VALID_ARCHS = arm64;
|
||||||
@ -3501,6 +3502,7 @@
|
|||||||
BITCODE_GENERATION_MODE = bitcode;
|
BITCODE_GENERATION_MODE = bitcode;
|
||||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
|
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = "SPIRV_CROSS_NAMESPACE_OVERRIDE=MVK_spirv_cross";
|
||||||
PRODUCT_NAME = SPIRVCross;
|
PRODUCT_NAME = SPIRVCross;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
VALID_ARCHS = arm64;
|
VALID_ARCHS = arm64;
|
||||||
@ -3510,6 +3512,7 @@
|
|||||||
A90FD9E221CC4EB900B92BB2 /* Debug */ = {
|
A90FD9E221CC4EB900B92BB2 /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = "SPIRV_CROSS_NAMESPACE_OVERRIDE=MVK_spirv_cross";
|
||||||
PRODUCT_NAME = SPIRVCross;
|
PRODUCT_NAME = SPIRVCross;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
};
|
};
|
||||||
@ -3518,6 +3521,7 @@
|
|||||||
A90FD9E321CC4EB900B92BB2 /* Release */ = {
|
A90FD9E321CC4EB900B92BB2 /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = "SPIRV_CROSS_NAMESPACE_OVERRIDE=MVK_spirv_cross";
|
||||||
PRODUCT_NAME = SPIRVCross;
|
PRODUCT_NAME = SPIRVCross;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
};
|
};
|
||||||
|
@ -1 +1 @@
|
|||||||
62dce70c2e2cffe3cf00c80b255750d9701ce481
|
5c239b857b1a6504384710e175ce5c1d3d206649
|
@ -1054,6 +1054,7 @@
|
|||||||
buildSettings = {
|
buildSettings = {
|
||||||
ARCHS = arm64;
|
ARCHS = arm64;
|
||||||
BITCODE_GENERATION_MODE = bitcode;
|
BITCODE_GENERATION_MODE = bitcode;
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = "SPIRV_CROSS_NAMESPACE_OVERRIDE=MVK_spirv_cross";
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
@ -1066,6 +1067,7 @@
|
|||||||
buildSettings = {
|
buildSettings = {
|
||||||
ARCHS = arm64;
|
ARCHS = arm64;
|
||||||
BITCODE_GENERATION_MODE = bitcode;
|
BITCODE_GENERATION_MODE = bitcode;
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = "SPIRV_CROSS_NAMESPACE_OVERRIDE=MVK_spirv_cross";
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
@ -1076,6 +1078,7 @@
|
|||||||
A9CBEDFF1B6299D800E45FDC /* Debug */ = {
|
A9CBEDFF1B6299D800E45FDC /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = "SPIRV_CROSS_NAMESPACE_OVERRIDE=MVK_spirv_cross";
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.11;
|
MACOSX_DEPLOYMENT_TARGET = 10.11;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
VALID_ARCHS = x86_64;
|
VALID_ARCHS = x86_64;
|
||||||
@ -1085,6 +1088,7 @@
|
|||||||
A9CBEE001B6299D800E45FDC /* Release */ = {
|
A9CBEE001B6299D800E45FDC /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = "SPIRV_CROSS_NAMESPACE_OVERRIDE=MVK_spirv_cross";
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.11;
|
MACOSX_DEPLOYMENT_TARGET = 10.11;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
VALID_ARCHS = x86_64;
|
VALID_ARCHS = x86_64;
|
||||||
|
@ -456,16 +456,16 @@ static uint32_t sizeOfOutput(const SPIRVShaderOutput& output) {
|
|||||||
// Round up to 4 elements for 3-vectors, since that reflects how Metal lays them out.
|
// Round up to 4 elements for 3-vectors, since that reflects how Metal lays them out.
|
||||||
if (vecWidth == 3) { vecWidth = 4; }
|
if (vecWidth == 3) { vecWidth = 4; }
|
||||||
switch (output.baseType) {
|
switch (output.baseType) {
|
||||||
case spirv_cross::SPIRType::SByte:
|
case SPIRV_CROSS_NAMESPACE::SPIRType::SByte:
|
||||||
case spirv_cross::SPIRType::UByte:
|
case SPIRV_CROSS_NAMESPACE::SPIRType::UByte:
|
||||||
return 1 * vecWidth;
|
return 1 * vecWidth;
|
||||||
case spirv_cross::SPIRType::Short:
|
case SPIRV_CROSS_NAMESPACE::SPIRType::Short:
|
||||||
case spirv_cross::SPIRType::UShort:
|
case SPIRV_CROSS_NAMESPACE::SPIRType::UShort:
|
||||||
case spirv_cross::SPIRType::Half:
|
case SPIRV_CROSS_NAMESPACE::SPIRType::Half:
|
||||||
return 2 * vecWidth;
|
return 2 * vecWidth;
|
||||||
case spirv_cross::SPIRType::Int:
|
case SPIRV_CROSS_NAMESPACE::SPIRType::Int:
|
||||||
case spirv_cross::SPIRType::UInt:
|
case SPIRV_CROSS_NAMESPACE::SPIRType::UInt:
|
||||||
case spirv_cross::SPIRType::Float:
|
case SPIRV_CROSS_NAMESPACE::SPIRType::Float:
|
||||||
default:
|
default:
|
||||||
return 4 * vecWidth;
|
return 4 * vecWidth;
|
||||||
}
|
}
|
||||||
@ -473,7 +473,7 @@ static uint32_t sizeOfOutput(const SPIRVShaderOutput& output) {
|
|||||||
|
|
||||||
static VkFormat mvkFormatFromOutput(const SPIRVShaderOutput& output) {
|
static VkFormat mvkFormatFromOutput(const SPIRVShaderOutput& output) {
|
||||||
switch (output.baseType) {
|
switch (output.baseType) {
|
||||||
case spirv_cross::SPIRType::SByte:
|
case SPIRV_CROSS_NAMESPACE::SPIRType::SByte:
|
||||||
switch (output.vecWidth) {
|
switch (output.vecWidth) {
|
||||||
case 1: return VK_FORMAT_R8_SINT;
|
case 1: return VK_FORMAT_R8_SINT;
|
||||||
case 2: return VK_FORMAT_R8G8_SINT;
|
case 2: return VK_FORMAT_R8G8_SINT;
|
||||||
@ -481,7 +481,7 @@ static VkFormat mvkFormatFromOutput(const SPIRVShaderOutput& output) {
|
|||||||
case 4: return VK_FORMAT_R8G8B8A8_SINT;
|
case 4: return VK_FORMAT_R8G8B8A8_SINT;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case spirv_cross::SPIRType::UByte:
|
case SPIRV_CROSS_NAMESPACE::SPIRType::UByte:
|
||||||
switch (output.vecWidth) {
|
switch (output.vecWidth) {
|
||||||
case 1: return VK_FORMAT_R8_UINT;
|
case 1: return VK_FORMAT_R8_UINT;
|
||||||
case 2: return VK_FORMAT_R8G8_UINT;
|
case 2: return VK_FORMAT_R8G8_UINT;
|
||||||
@ -489,7 +489,7 @@ static VkFormat mvkFormatFromOutput(const SPIRVShaderOutput& output) {
|
|||||||
case 4: return VK_FORMAT_R8G8B8A8_UINT;
|
case 4: return VK_FORMAT_R8G8B8A8_UINT;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case spirv_cross::SPIRType::Short:
|
case SPIRV_CROSS_NAMESPACE::SPIRType::Short:
|
||||||
switch (output.vecWidth) {
|
switch (output.vecWidth) {
|
||||||
case 1: return VK_FORMAT_R16_SINT;
|
case 1: return VK_FORMAT_R16_SINT;
|
||||||
case 2: return VK_FORMAT_R16G16_SINT;
|
case 2: return VK_FORMAT_R16G16_SINT;
|
||||||
@ -497,7 +497,7 @@ static VkFormat mvkFormatFromOutput(const SPIRVShaderOutput& output) {
|
|||||||
case 4: return VK_FORMAT_R16G16B16A16_SINT;
|
case 4: return VK_FORMAT_R16G16B16A16_SINT;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case spirv_cross::SPIRType::UShort:
|
case SPIRV_CROSS_NAMESPACE::SPIRType::UShort:
|
||||||
switch (output.vecWidth) {
|
switch (output.vecWidth) {
|
||||||
case 1: return VK_FORMAT_R16_UINT;
|
case 1: return VK_FORMAT_R16_UINT;
|
||||||
case 2: return VK_FORMAT_R16G16_UINT;
|
case 2: return VK_FORMAT_R16G16_UINT;
|
||||||
@ -505,7 +505,7 @@ static VkFormat mvkFormatFromOutput(const SPIRVShaderOutput& output) {
|
|||||||
case 4: return VK_FORMAT_R16G16B16A16_UINT;
|
case 4: return VK_FORMAT_R16G16B16A16_UINT;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case spirv_cross::SPIRType::Half:
|
case SPIRV_CROSS_NAMESPACE::SPIRType::Half:
|
||||||
switch (output.vecWidth) {
|
switch (output.vecWidth) {
|
||||||
case 1: return VK_FORMAT_R16_SFLOAT;
|
case 1: return VK_FORMAT_R16_SFLOAT;
|
||||||
case 2: return VK_FORMAT_R16G16_SFLOAT;
|
case 2: return VK_FORMAT_R16G16_SFLOAT;
|
||||||
@ -513,7 +513,7 @@ static VkFormat mvkFormatFromOutput(const SPIRVShaderOutput& output) {
|
|||||||
case 4: return VK_FORMAT_R16G16B16A16_SFLOAT;
|
case 4: return VK_FORMAT_R16G16B16A16_SFLOAT;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case spirv_cross::SPIRType::Int:
|
case SPIRV_CROSS_NAMESPACE::SPIRType::Int:
|
||||||
switch (output.vecWidth) {
|
switch (output.vecWidth) {
|
||||||
case 1: return VK_FORMAT_R32_SINT;
|
case 1: return VK_FORMAT_R32_SINT;
|
||||||
case 2: return VK_FORMAT_R32G32_SINT;
|
case 2: return VK_FORMAT_R32G32_SINT;
|
||||||
@ -521,7 +521,7 @@ static VkFormat mvkFormatFromOutput(const SPIRVShaderOutput& output) {
|
|||||||
case 4: return VK_FORMAT_R32G32B32A32_SINT;
|
case 4: return VK_FORMAT_R32G32B32A32_SINT;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case spirv_cross::SPIRType::UInt:
|
case SPIRV_CROSS_NAMESPACE::SPIRType::UInt:
|
||||||
switch (output.vecWidth) {
|
switch (output.vecWidth) {
|
||||||
case 1: return VK_FORMAT_R32_UINT;
|
case 1: return VK_FORMAT_R32_UINT;
|
||||||
case 2: return VK_FORMAT_R32G32_UINT;
|
case 2: return VK_FORMAT_R32G32_UINT;
|
||||||
@ -529,7 +529,7 @@ static VkFormat mvkFormatFromOutput(const SPIRVShaderOutput& output) {
|
|||||||
case 4: return VK_FORMAT_R32G32B32A32_UINT;
|
case 4: return VK_FORMAT_R32G32B32A32_UINT;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case spirv_cross::SPIRType::Float:
|
case SPIRV_CROSS_NAMESPACE::SPIRType::Float:
|
||||||
switch (output.vecWidth) {
|
switch (output.vecWidth) {
|
||||||
case 1: return VK_FORMAT_R32_SFLOAT;
|
case 1: return VK_FORMAT_R32_SFLOAT;
|
||||||
case 2: return VK_FORMAT_R32G32_SFLOAT;
|
case 2: return VK_FORMAT_R32G32_SFLOAT;
|
||||||
|
@ -32,8 +32,8 @@ bool getTessReflectionData(const std::vector<uint32_t>& tesc, const std::string&
|
|||||||
#ifndef SPIRV_CROSS_EXCEPTIONS_TO_ASSERTIONS
|
#ifndef SPIRV_CROSS_EXCEPTIONS_TO_ASSERTIONS
|
||||||
try {
|
try {
|
||||||
#endif
|
#endif
|
||||||
spirv_cross::CompilerReflection tescReflect(tesc);
|
SPIRV_CROSS_NAMESPACE::CompilerReflection tescReflect(tesc);
|
||||||
spirv_cross::CompilerReflection teseReflect(tese);
|
SPIRV_CROSS_NAMESPACE::CompilerReflection teseReflect(tese);
|
||||||
|
|
||||||
if (!tescEntryName.empty()) {
|
if (!tescEntryName.empty()) {
|
||||||
tescReflect.set_entry_point(tescEntryName, spv::ExecutionModelTessellationControl);
|
tescReflect.set_entry_point(tescEntryName, spv::ExecutionModelTessellationControl);
|
||||||
@ -45,8 +45,8 @@ bool getTessReflectionData(const std::vector<uint32_t>& tesc, const std::string&
|
|||||||
tescReflect.compile();
|
tescReflect.compile();
|
||||||
teseReflect.compile();
|
teseReflect.compile();
|
||||||
|
|
||||||
const spirv_cross::Bitset& tescModes = tescReflect.get_execution_mode_bitset();
|
const SPIRV_CROSS_NAMESPACE::Bitset& tescModes = tescReflect.get_execution_mode_bitset();
|
||||||
const spirv_cross::Bitset& teseModes = teseReflect.get_execution_mode_bitset();
|
const SPIRV_CROSS_NAMESPACE::Bitset& teseModes = teseReflect.get_execution_mode_bitset();
|
||||||
|
|
||||||
// Extract the parameters from the shaders.
|
// Extract the parameters from the shaders.
|
||||||
if (tescModes.get(spv::ExecutionModeTriangles)) {
|
if (tescModes.get(spv::ExecutionModeTriangles)) {
|
||||||
@ -110,7 +110,7 @@ bool getTessReflectionData(const std::vector<uint32_t>& tesc, const std::string&
|
|||||||
return true;
|
return true;
|
||||||
|
|
||||||
#ifndef SPIRV_CROSS_EXCEPTIONS_TO_ASSERTIONS
|
#ifndef SPIRV_CROSS_EXCEPTIONS_TO_ASSERTIONS
|
||||||
} catch (spirv_cross::CompilerError& ex) {
|
} catch (SPIRV_CROSS_NAMESPACE::CompilerError& ex) {
|
||||||
errorLog = ex.what();
|
errorLog = ex.what();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -122,9 +122,9 @@ bool getShaderOutputs(const std::vector<uint32_t>& spirv, spv::ExecutionModel mo
|
|||||||
#ifndef SPIRV_CROSS_EXCEPTIONS_TO_ASSERTIONS
|
#ifndef SPIRV_CROSS_EXCEPTIONS_TO_ASSERTIONS
|
||||||
try {
|
try {
|
||||||
#endif
|
#endif
|
||||||
spirv_cross::Parser parser(spirv);
|
SPIRV_CROSS_NAMESPACE::Parser parser(spirv);
|
||||||
parser.parse();
|
parser.parse();
|
||||||
spirv_cross::CompilerReflection reflect(parser.get_parsed_ir());
|
SPIRV_CROSS_NAMESPACE::CompilerReflection reflect(parser.get_parsed_ir());
|
||||||
if (!entryName.empty()) {
|
if (!entryName.empty()) {
|
||||||
reflect.set_entry_point(entryName, model);
|
reflect.set_entry_point(entryName, model);
|
||||||
}
|
}
|
||||||
@ -133,7 +133,7 @@ bool getShaderOutputs(const std::vector<uint32_t>& spirv, spv::ExecutionModel mo
|
|||||||
outputs.clear();
|
outputs.clear();
|
||||||
|
|
||||||
auto addSat = [](uint32_t a, uint32_t b) { return a == uint32_t(-1) ? a : a + b; };
|
auto addSat = [](uint32_t a, uint32_t b) { return a == uint32_t(-1) ? a : a + b; };
|
||||||
parser.get_parsed_ir().for_each_typed_id<spirv_cross::SPIRVariable>([&reflect, &outputs, model, addSat](uint32_t varID, const spirv_cross::SPIRVariable& var) {
|
parser.get_parsed_ir().for_each_typed_id<SPIRV_CROSS_NAMESPACE::SPIRVariable>([&reflect, &outputs, model, addSat](uint32_t varID, const SPIRV_CROSS_NAMESPACE::SPIRVariable& var) {
|
||||||
if (var.storage != spv::StorageClassOutput) { return; }
|
if (var.storage != spv::StorageClassOutput) { return; }
|
||||||
|
|
||||||
const auto* type = &reflect.get_type(reflect.get_type_from_variable(varID).parent_type);
|
const auto* type = &reflect.get_type(reflect.get_type_from_variable(varID).parent_type);
|
||||||
@ -149,7 +149,7 @@ bool getShaderOutputs(const std::vector<uint32_t>& spirv, spv::ExecutionModel mo
|
|||||||
if (model == spv::ExecutionModelTessellationControl && !patch)
|
if (model == spv::ExecutionModelTessellationControl && !patch)
|
||||||
type = &reflect.get_type(type->parent_type);
|
type = &reflect.get_type(type->parent_type);
|
||||||
|
|
||||||
if (type->basetype == spirv_cross::SPIRType::Struct) {
|
if (type->basetype == SPIRV_CROSS_NAMESPACE::SPIRType::Struct) {
|
||||||
for (uint32_t i = 0; i < type->member_types.size(); i++) {
|
for (uint32_t i = 0; i < type->member_types.size(); i++) {
|
||||||
// Each member may have a location decoration. If not, each member
|
// Each member may have a location decoration. If not, each member
|
||||||
// gets an incrementing location.
|
// gets an incrementing location.
|
||||||
@ -161,7 +161,7 @@ bool getShaderOutputs(const std::vector<uint32_t>& spirv, spv::ExecutionModel mo
|
|||||||
if (reflect.has_member_decoration(type->self, i, spv::DecorationBuiltIn)) {
|
if (reflect.has_member_decoration(type->self, i, spv::DecorationBuiltIn)) {
|
||||||
biType = (spv::BuiltIn)reflect.get_member_decoration(type->self, i, spv::DecorationBuiltIn);
|
biType = (spv::BuiltIn)reflect.get_member_decoration(type->self, i, spv::DecorationBuiltIn);
|
||||||
}
|
}
|
||||||
const spirv_cross::SPIRType& memberType = reflect.get_type(type->member_types[i]);
|
const SPIRV_CROSS_NAMESPACE::SPIRType& memberType = reflect.get_type(type->member_types[i]);
|
||||||
if (memberType.columns > 1) {
|
if (memberType.columns > 1) {
|
||||||
for (uint32_t i = 0; i < memberType.columns; i++) {
|
for (uint32_t i = 0; i < memberType.columns; i++) {
|
||||||
outputs.push_back({memberType.basetype, memberType.vecsize, addSat(memberLoc, i), patch, biType});
|
outputs.push_back({memberType.basetype, memberType.vecsize, addSat(memberLoc, i), patch, biType});
|
||||||
@ -198,7 +198,7 @@ bool getShaderOutputs(const std::vector<uint32_t>& spirv, spv::ExecutionModel mo
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
#ifndef SPIRV_CROSS_EXCEPTIONS_TO_ASSERTIONS
|
#ifndef SPIRV_CROSS_EXCEPTIONS_TO_ASSERTIONS
|
||||||
} catch (spirv_cross::CompilerError& ex) {
|
} catch (SPIRV_CROSS_NAMESPACE::CompilerError& ex) {
|
||||||
errorLog = ex.what();
|
errorLog = ex.what();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -53,7 +53,7 @@ namespace mvk {
|
|||||||
/** Reflection data on a single output of a shader. This contains the information needed to construct a stage-input descriptor for the next stage of a pipeline. */
|
/** Reflection data on a single output of a shader. This contains the information needed to construct a stage-input descriptor for the next stage of a pipeline. */
|
||||||
struct SPIRVShaderOutput {
|
struct SPIRVShaderOutput {
|
||||||
/** The type of the output. */
|
/** The type of the output. */
|
||||||
spirv_cross::SPIRType::BaseType baseType;
|
SPIRV_CROSS_NAMESPACE::SPIRType::BaseType baseType;
|
||||||
|
|
||||||
/** The vector size, if a vector. */
|
/** The vector size, if a vector. */
|
||||||
uint32_t vecWidth;
|
uint32_t vecWidth;
|
||||||
|
@ -182,7 +182,7 @@ MVK_PUBLIC_SYMBOL void SPIRVToMSLConverterContext::alignWith(const SPIRVToMSLCon
|
|||||||
#pragma mark SPIRVToMSLConverter
|
#pragma mark SPIRVToMSLConverter
|
||||||
|
|
||||||
// Populates the entry point with info extracted from the SPRI-V compiler.
|
// Populates the entry point with info extracted from the SPRI-V compiler.
|
||||||
void populateEntryPoint(SPIRVEntryPoint& entryPoint, spirv_cross::Compiler* pCompiler, SPIRVToMSLConverterOptions& options);
|
void populateEntryPoint(SPIRVEntryPoint& entryPoint, SPIRV_CROSS_NAMESPACE::Compiler* pCompiler, SPIRVToMSLConverterOptions& options);
|
||||||
|
|
||||||
MVK_PUBLIC_SYMBOL void SPIRVToMSLConverter::setSPIRV(const vector<uint32_t>& spirv) { _spirv = spirv; }
|
MVK_PUBLIC_SYMBOL void SPIRVToMSLConverter::setSPIRV(const vector<uint32_t>& spirv) { _spirv = spirv; }
|
||||||
|
|
||||||
@ -206,12 +206,12 @@ MVK_PUBLIC_SYMBOL bool SPIRVToMSLConverter::convert(SPIRVToMSLConverterContext&
|
|||||||
|
|
||||||
if (shouldLogSPIRV) { logSPIRV("Converting"); }
|
if (shouldLogSPIRV) { logSPIRV("Converting"); }
|
||||||
|
|
||||||
spirv_cross::CompilerMSL* pMSLCompiler = nullptr;
|
SPIRV_CROSS_NAMESPACE::CompilerMSL* pMSLCompiler = nullptr;
|
||||||
|
|
||||||
#ifndef SPIRV_CROSS_EXCEPTIONS_TO_ASSERTIONS
|
#ifndef SPIRV_CROSS_EXCEPTIONS_TO_ASSERTIONS
|
||||||
try {
|
try {
|
||||||
#endif
|
#endif
|
||||||
pMSLCompiler = new spirv_cross::CompilerMSL(_spirv);
|
pMSLCompiler = new SPIRV_CROSS_NAMESPACE::CompilerMSL(_spirv);
|
||||||
|
|
||||||
if (context.options.hasEntryPoint()) {
|
if (context.options.hasEntryPoint()) {
|
||||||
pMSLCompiler->set_entry_point(context.options.entryPointName, context.options.entryPointStage);
|
pMSLCompiler->set_entry_point(context.options.entryPointName, context.options.entryPointStage);
|
||||||
@ -233,10 +233,10 @@ MVK_PUBLIC_SYMBOL bool SPIRVToMSLConverter::convert(SPIRVToMSLConverterContext&
|
|||||||
auto mslOpts = pMSLCompiler->get_msl_options();
|
auto mslOpts = pMSLCompiler->get_msl_options();
|
||||||
|
|
||||||
#if MVK_MACOS
|
#if MVK_MACOS
|
||||||
mslOpts.platform = spirv_cross::CompilerMSL::Options::macOS;
|
mslOpts.platform = SPIRV_CROSS_NAMESPACE::CompilerMSL::Options::macOS;
|
||||||
#endif
|
#endif
|
||||||
#if MVK_IOS
|
#if MVK_IOS
|
||||||
mslOpts.platform = spirv_cross::CompilerMSL::Options::iOS;
|
mslOpts.platform = SPIRV_CROSS_NAMESPACE::CompilerMSL::Options::iOS;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
mslOpts.msl_version = context.options.mslVersion;
|
mslOpts.msl_version = context.options.mslVersion;
|
||||||
@ -261,7 +261,7 @@ MVK_PUBLIC_SYMBOL bool SPIRVToMSLConverter::convert(SPIRVToMSLConverterContext&
|
|||||||
|
|
||||||
// Add vertex attributes
|
// Add vertex attributes
|
||||||
if (context.stageSupportsVertexAttributes()) {
|
if (context.stageSupportsVertexAttributes()) {
|
||||||
spirv_cross::MSLVertexAttr va;
|
SPIRV_CROSS_NAMESPACE::MSLVertexAttr va;
|
||||||
for (auto& ctxVA : context.vertexAttributes) {
|
for (auto& ctxVA : context.vertexAttributes) {
|
||||||
va.location = ctxVA.location;
|
va.location = ctxVA.location;
|
||||||
va.msl_buffer = ctxVA.mslBuffer;
|
va.msl_buffer = ctxVA.mslBuffer;
|
||||||
@ -270,13 +270,13 @@ MVK_PUBLIC_SYMBOL bool SPIRVToMSLConverter::convert(SPIRVToMSLConverterContext&
|
|||||||
va.per_instance = ctxVA.isPerInstance;
|
va.per_instance = ctxVA.isPerInstance;
|
||||||
switch (ctxVA.format) {
|
switch (ctxVA.format) {
|
||||||
case MSLVertexFormat::Other:
|
case MSLVertexFormat::Other:
|
||||||
va.format = spirv_cross::MSL_VERTEX_FORMAT_OTHER;
|
va.format = SPIRV_CROSS_NAMESPACE::MSL_VERTEX_FORMAT_OTHER;
|
||||||
break;
|
break;
|
||||||
case MSLVertexFormat::UInt8:
|
case MSLVertexFormat::UInt8:
|
||||||
va.format = spirv_cross::MSL_VERTEX_FORMAT_UINT8;
|
va.format = SPIRV_CROSS_NAMESPACE::MSL_VERTEX_FORMAT_UINT8;
|
||||||
break;
|
break;
|
||||||
case MSLVertexFormat::UInt16:
|
case MSLVertexFormat::UInt16:
|
||||||
va.format = spirv_cross::MSL_VERTEX_FORMAT_UINT16;
|
va.format = SPIRV_CROSS_NAMESPACE::MSL_VERTEX_FORMAT_UINT16;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
pMSLCompiler->add_msl_vertex_attribute(va);
|
pMSLCompiler->add_msl_vertex_attribute(va);
|
||||||
@ -284,7 +284,7 @@ MVK_PUBLIC_SYMBOL bool SPIRVToMSLConverter::convert(SPIRVToMSLConverterContext&
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Add resource bindings
|
// Add resource bindings
|
||||||
spirv_cross::MSLResourceBinding rb;
|
SPIRV_CROSS_NAMESPACE::MSLResourceBinding rb;
|
||||||
for (auto& ctxRB : context.resourceBindings) {
|
for (auto& ctxRB : context.resourceBindings) {
|
||||||
rb.desc_set = ctxRB.descriptorSet;
|
rb.desc_set = ctxRB.descriptorSet;
|
||||||
rb.binding = ctxRB.binding;
|
rb.binding = ctxRB.binding;
|
||||||
@ -300,7 +300,7 @@ MVK_PUBLIC_SYMBOL bool SPIRVToMSLConverter::convert(SPIRVToMSLConverterContext&
|
|||||||
if (shouldLogMSL) { logSource(_msl, "MSL", "Converted"); }
|
if (shouldLogMSL) { logSource(_msl, "MSL", "Converted"); }
|
||||||
|
|
||||||
#ifndef SPIRV_CROSS_EXCEPTIONS_TO_ASSERTIONS
|
#ifndef SPIRV_CROSS_EXCEPTIONS_TO_ASSERTIONS
|
||||||
} catch (spirv_cross::CompilerError& ex) {
|
} catch (SPIRV_CROSS_NAMESPACE::CompilerError& ex) {
|
||||||
string errMsg("MSL conversion error: ");
|
string errMsg("MSL conversion error: ");
|
||||||
errMsg += ex.what();
|
errMsg += ex.what();
|
||||||
logError(errMsg.data());
|
logError(errMsg.data());
|
||||||
@ -333,12 +333,12 @@ MVK_PUBLIC_SYMBOL bool SPIRVToMSLConverter::convert(SPIRVToMSLConverterContext&
|
|||||||
|
|
||||||
// To check GLSL conversion
|
// To check GLSL conversion
|
||||||
if (shouldLogGLSL) {
|
if (shouldLogGLSL) {
|
||||||
spirv_cross::CompilerGLSL* pGLSLCompiler = nullptr;
|
SPIRV_CROSS_NAMESPACE::CompilerGLSL* pGLSLCompiler = nullptr;
|
||||||
|
|
||||||
#ifndef SPIRV_CROSS_EXCEPTIONS_TO_ASSERTIONS
|
#ifndef SPIRV_CROSS_EXCEPTIONS_TO_ASSERTIONS
|
||||||
try {
|
try {
|
||||||
#endif
|
#endif
|
||||||
pGLSLCompiler = new spirv_cross::CompilerGLSL(_spirv);
|
pGLSLCompiler = new SPIRV_CROSS_NAMESPACE::CompilerGLSL(_spirv);
|
||||||
auto options = pGLSLCompiler->get_common_options();
|
auto options = pGLSLCompiler->get_common_options();
|
||||||
options.vulkan_semantics = true;
|
options.vulkan_semantics = true;
|
||||||
options.separate_shader_objects = true;
|
options.separate_shader_objects = true;
|
||||||
@ -346,7 +346,7 @@ MVK_PUBLIC_SYMBOL bool SPIRVToMSLConverter::convert(SPIRVToMSLConverterContext&
|
|||||||
string glsl = pGLSLCompiler->compile();
|
string glsl = pGLSLCompiler->compile();
|
||||||
logSource(glsl, "GLSL", "Estimated original");
|
logSource(glsl, "GLSL", "Estimated original");
|
||||||
#ifndef SPIRV_CROSS_EXCEPTIONS_TO_ASSERTIONS
|
#ifndef SPIRV_CROSS_EXCEPTIONS_TO_ASSERTIONS
|
||||||
} catch (spirv_cross::CompilerError& ex) {
|
} catch (SPIRV_CROSS_NAMESPACE::CompilerError& ex) {
|
||||||
string errMsg("Original GLSL extraction error: ");
|
string errMsg("Original GLSL extraction error: ");
|
||||||
errMsg += ex.what();
|
errMsg += ex.what();
|
||||||
logMsg(errMsg.data());
|
logMsg(errMsg.data());
|
||||||
@ -435,17 +435,17 @@ void SPIRVToMSLConverter::logSource(string& src, const char* srcLang, const char
|
|||||||
#pragma mark Support functions
|
#pragma mark Support functions
|
||||||
|
|
||||||
// Populate a workgroup size dimension.
|
// Populate a workgroup size dimension.
|
||||||
void populateWorkgroupDimension(SPIRVWorkgroupSizeDimension& wgDim, uint32_t size, spirv_cross::SpecializationConstant& spvSpecConst) {
|
void populateWorkgroupDimension(SPIRVWorkgroupSizeDimension& wgDim, uint32_t size, SPIRV_CROSS_NAMESPACE::SpecializationConstant& spvSpecConst) {
|
||||||
wgDim.size = max(size, 1u);
|
wgDim.size = max(size, 1u);
|
||||||
wgDim.isSpecialized = (spvSpecConst.id != 0);
|
wgDim.isSpecialized = (spvSpecConst.id != 0);
|
||||||
wgDim.specializationID = spvSpecConst.constant_id;
|
wgDim.specializationID = spvSpecConst.constant_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
void populateEntryPoint(SPIRVEntryPoint& entryPoint, spirv_cross::Compiler* pCompiler, SPIRVToMSLConverterOptions& options) {
|
void populateEntryPoint(SPIRVEntryPoint& entryPoint, SPIRV_CROSS_NAMESPACE::Compiler* pCompiler, SPIRVToMSLConverterOptions& options) {
|
||||||
|
|
||||||
if ( !pCompiler ) { return; }
|
if ( !pCompiler ) { return; }
|
||||||
|
|
||||||
spirv_cross::SPIREntryPoint spvEP;
|
SPIRV_CROSS_NAMESPACE::SPIREntryPoint spvEP;
|
||||||
if (options.hasEntryPoint()) {
|
if (options.hasEntryPoint()) {
|
||||||
spvEP = pCompiler->get_entry_point(options.entryPointName, options.entryPointStage);
|
spvEP = pCompiler->get_entry_point(options.entryPointName, options.entryPointStage);
|
||||||
} else {
|
} else {
|
||||||
@ -456,7 +456,7 @@ void populateEntryPoint(SPIRVEntryPoint& entryPoint, spirv_cross::Compiler* pCom
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
spirv_cross::SpecializationConstant widthSC, heightSC, depthSC;
|
SPIRV_CROSS_NAMESPACE::SpecializationConstant widthSC, heightSC, depthSC;
|
||||||
pCompiler->get_work_group_size_specialization_constants(widthSC, heightSC, depthSC);
|
pCompiler->get_work_group_size_specialization_constants(widthSC, heightSC, depthSC);
|
||||||
|
|
||||||
entryPoint.mtlFunctionName = spvEP.name;
|
entryPoint.mtlFunctionName = spvEP.name;
|
||||||
|
@ -717,6 +717,7 @@
|
|||||||
BITCODE_GENERATION_MODE = bitcode;
|
BITCODE_GENERATION_MODE = bitcode;
|
||||||
CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = NO;
|
CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = NO;
|
||||||
CLANG_WARN_UNREACHABLE_CODE = NO;
|
CLANG_WARN_UNREACHABLE_CODE = NO;
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = "SPIRV_CROSS_NAMESPACE_OVERRIDE=MVK_spirv_cross";
|
||||||
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO;
|
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO;
|
||||||
GCC_WARN_CHECK_SWITCH_STATEMENTS = NO;
|
GCC_WARN_CHECK_SWITCH_STATEMENTS = NO;
|
||||||
GCC_WARN_UNUSED_PARAMETER = NO;
|
GCC_WARN_UNUSED_PARAMETER = NO;
|
||||||
@ -735,6 +736,7 @@
|
|||||||
BITCODE_GENERATION_MODE = bitcode;
|
BITCODE_GENERATION_MODE = bitcode;
|
||||||
CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = NO;
|
CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = NO;
|
||||||
CLANG_WARN_UNREACHABLE_CODE = NO;
|
CLANG_WARN_UNREACHABLE_CODE = NO;
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = "SPIRV_CROSS_NAMESPACE_OVERRIDE=MVK_spirv_cross";
|
||||||
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO;
|
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO;
|
||||||
GCC_WARN_CHECK_SWITCH_STATEMENTS = NO;
|
GCC_WARN_CHECK_SWITCH_STATEMENTS = NO;
|
||||||
GCC_WARN_UNUSED_PARAMETER = NO;
|
GCC_WARN_UNUSED_PARAMETER = NO;
|
||||||
@ -751,6 +753,7 @@
|
|||||||
buildSettings = {
|
buildSettings = {
|
||||||
CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = NO;
|
CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = NO;
|
||||||
CLANG_WARN_UNREACHABLE_CODE = NO;
|
CLANG_WARN_UNREACHABLE_CODE = NO;
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = "SPIRV_CROSS_NAMESPACE_OVERRIDE=MVK_spirv_cross";
|
||||||
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO;
|
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO;
|
||||||
GCC_WARN_CHECK_SWITCH_STATEMENTS = NO;
|
GCC_WARN_CHECK_SWITCH_STATEMENTS = NO;
|
||||||
GCC_WARN_UNUSED_PARAMETER = NO;
|
GCC_WARN_UNUSED_PARAMETER = NO;
|
||||||
@ -769,6 +772,7 @@
|
|||||||
buildSettings = {
|
buildSettings = {
|
||||||
CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = NO;
|
CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = NO;
|
||||||
CLANG_WARN_UNREACHABLE_CODE = NO;
|
CLANG_WARN_UNREACHABLE_CODE = NO;
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = "SPIRV_CROSS_NAMESPACE_OVERRIDE=MVK_spirv_cross";
|
||||||
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO;
|
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO;
|
||||||
GCC_WARN_CHECK_SWITCH_STATEMENTS = NO;
|
GCC_WARN_CHECK_SWITCH_STATEMENTS = NO;
|
||||||
GCC_WARN_UNUSED_PARAMETER = NO;
|
GCC_WARN_UNUSED_PARAMETER = NO;
|
||||||
@ -787,6 +791,7 @@
|
|||||||
buildSettings = {
|
buildSettings = {
|
||||||
ARCHS = arm64;
|
ARCHS = arm64;
|
||||||
BITCODE_GENERATION_MODE = bitcode;
|
BITCODE_GENERATION_MODE = bitcode;
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = "SPIRV_CROSS_NAMESPACE_OVERRIDE=MVK_spirv_cross";
|
||||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
|
GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
|
||||||
HEADER_SEARCH_PATHS = (
|
HEADER_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
@ -807,6 +812,7 @@
|
|||||||
buildSettings = {
|
buildSettings = {
|
||||||
ARCHS = arm64;
|
ARCHS = arm64;
|
||||||
BITCODE_GENERATION_MODE = bitcode;
|
BITCODE_GENERATION_MODE = bitcode;
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = "SPIRV_CROSS_NAMESPACE_OVERRIDE=MVK_spirv_cross";
|
||||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
|
GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
|
||||||
HEADER_SEARCH_PATHS = (
|
HEADER_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
@ -825,6 +831,7 @@
|
|||||||
A93903C51C57E9ED00FE90DC /* Debug */ = {
|
A93903C51C57E9ED00FE90DC /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = "SPIRV_CROSS_NAMESPACE_OVERRIDE=MVK_spirv_cross";
|
||||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
|
GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
|
||||||
HEADER_SEARCH_PATHS = (
|
HEADER_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
@ -841,6 +848,7 @@
|
|||||||
A93903C61C57E9ED00FE90DC /* Release */ = {
|
A93903C61C57E9ED00FE90DC /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = "SPIRV_CROSS_NAMESPACE_OVERRIDE=MVK_spirv_cross";
|
||||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
|
GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
|
||||||
HEADER_SEARCH_PATHS = (
|
HEADER_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
@ -884,7 +892,6 @@
|
|||||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||||
"DEBUG=1",
|
"DEBUG=1",
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"SPIRV_CROSS_FLT_FMT=\\\"%.6g\\\"",
|
|
||||||
);
|
);
|
||||||
GCC_SYMBOLS_PRIVATE_EXTERN = YES;
|
GCC_SYMBOLS_PRIVATE_EXTERN = YES;
|
||||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
@ -939,7 +946,7 @@
|
|||||||
GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
|
GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
|
||||||
GCC_NO_COMMON_BLOCKS = YES;
|
GCC_NO_COMMON_BLOCKS = YES;
|
||||||
GCC_OPTIMIZATION_LEVEL = fast;
|
GCC_OPTIMIZATION_LEVEL = fast;
|
||||||
GCC_PREPROCESSOR_DEFINITIONS = "SPIRV_CROSS_FLT_FMT=\\\"%.6g\\\"";
|
GCC_PREPROCESSOR_DEFINITIONS = "";
|
||||||
GCC_SYMBOLS_PRIVATE_EXTERN = YES;
|
GCC_SYMBOLS_PRIVATE_EXTERN = YES;
|
||||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
|
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user