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:
Hans-Kristian Arntzen 2019-03-29 11:21:19 +01:00
parent 9536538035
commit 38edfdb3de
8 changed files with 64 additions and 49 deletions

View File

@ -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;
}; };

View File

@ -1 +1 @@
62dce70c2e2cffe3cf00c80b255750d9701ce481 5c239b857b1a6504384710e175ce5c1d3d206649

View File

@ -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;

View File

@ -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;

View File

@ -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;
} }

View File

@ -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;

View File

@ -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;

View File

@ -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;