Update to latest version of SPIRV-Cross.

Add additional SPIRV-Cross header files to ExternalDependencies.xcodeproj
to allow browsing these files in Xcode.
This commit is contained in:
Bill Hollings 2021-09-30 13:45:54 -04:00
parent f78ab20b79
commit ba9623cad5
6 changed files with 65 additions and 8 deletions

View File

@ -21,7 +21,15 @@ Released TBD
- Support maximum point primitive size of 511.
- Improved checks for timestamp GPU counter support on older devices.
- Update to latest SPIRV-Cross version:
- Add support for `OpSpecConstantOp` ops `OpQuantizeToF16` and `OpSRem`.
- MSL: Add support for `OpSpecConstantOp` ops `OpQuantizeToF16` and `OpSRem`.
- MSL: Return fragment function value even when last SPIR-V Op is discard (`OpKill`).
- MSL: Fix location and component variable matching between shader stages.
- MSL: Track location component to match vecsize between shader stages.
- MSL: Selectively enable `fast-math` in MSL code to match Vulkan CTS results.
- MSL: Honor `DecorationNoContraction` when compiling using `fast-math`.
- MSL: Honor infinities in `OpQuantizeToF16` when compiling using `fast-math`.
- MSL: Support synthetic functions in function constants.
- MSL: Improve handling of `INT_MIN/INT64_MIN` literals.

View File

@ -1226,6 +1226,18 @@
A9560DDC25E46D1F008BC84F /* decoration.h in Headers */ = {isa = PBXBuildFile; fileRef = A95604FC25E46D1D008BC84F /* decoration.h */; };
A9560DDD25E46D1F008BC84F /* decoration.h in Headers */ = {isa = PBXBuildFile; fileRef = A95604FC25E46D1D008BC84F /* decoration.h */; };
A9560DDE25E46D1F008BC84F /* decoration.h in Headers */ = {isa = PBXBuildFile; fileRef = A95604FC25E46D1D008BC84F /* decoration.h */; };
A9717C0526EE8C570041AE82 /* spirv_cross_containers.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A9717C0326EE8C570041AE82 /* spirv_cross_containers.hpp */; };
A9717C0626EE8C570041AE82 /* spirv_cross_containers.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A9717C0326EE8C570041AE82 /* spirv_cross_containers.hpp */; };
A9717C0726EE8C570041AE82 /* spirv_cross_containers.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A9717C0326EE8C570041AE82 /* spirv_cross_containers.hpp */; };
A9717C0826EE8C570041AE82 /* spirv_cross_error_handling.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A9717C0426EE8C570041AE82 /* spirv_cross_error_handling.hpp */; };
A9717C0926EE8C570041AE82 /* spirv_cross_error_handling.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A9717C0426EE8C570041AE82 /* spirv_cross_error_handling.hpp */; };
A9717C0A26EE8C570041AE82 /* spirv_cross_error_handling.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A9717C0426EE8C570041AE82 /* spirv_cross_error_handling.hpp */; };
A9717C0C26EE8C730041AE82 /* spirv_cross_util.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A9717C0B26EE8C730041AE82 /* spirv_cross_util.hpp */; };
A9717C0D26EE8C730041AE82 /* spirv_cross_util.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A9717C0B26EE8C730041AE82 /* spirv_cross_util.hpp */; };
A9717C0E26EE8C730041AE82 /* spirv_cross_util.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A9717C0B26EE8C730041AE82 /* spirv_cross_util.hpp */; };
A9717C1026EE8C9D0041AE82 /* spirv.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A9717C0F26EE8C9D0041AE82 /* spirv.hpp */; };
A9717C1126EE8C9D0041AE82 /* spirv.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A9717C0F26EE8C9D0041AE82 /* spirv.hpp */; };
A9717C1226EE8C9D0041AE82 /* spirv.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A9717C0F26EE8C9D0041AE82 /* spirv.hpp */; };
A976290F21CC60BC00B52A68 /* spirv_msl.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A976290221CC60BC00B52A68 /* spirv_msl.hpp */; };
A976291021CC60BC00B52A68 /* spirv_msl.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A976290221CC60BC00B52A68 /* spirv_msl.hpp */; };
A976291121CC60BC00B52A68 /* spirv_cross.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A976290321CC60BC00B52A68 /* spirv_cross.hpp */; };
@ -2025,6 +2037,10 @@
A95604FA25E46D1D008BC84F /* validation_state.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validation_state.cpp; sourceTree = "<group>"; };
A95604FB25E46D1D008BC84F /* validate_primitives.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_primitives.cpp; sourceTree = "<group>"; };
A95604FC25E46D1D008BC84F /* decoration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = decoration.h; sourceTree = "<group>"; };
A9717C0326EE8C570041AE82 /* spirv_cross_containers.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = spirv_cross_containers.hpp; path = spirv_cross_containers.hpp; sourceTree = "<group>"; };
A9717C0426EE8C570041AE82 /* spirv_cross_error_handling.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = spirv_cross_error_handling.hpp; path = spirv_cross_error_handling.hpp; sourceTree = "<group>"; };
A9717C0B26EE8C730041AE82 /* spirv_cross_util.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = spirv_cross_util.hpp; path = spirv_cross_util.hpp; sourceTree = "<group>"; };
A9717C0F26EE8C9D0041AE82 /* spirv.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = spirv.hpp; path = spirv.hpp; sourceTree = "<group>"; };
A972A80F21CECBBF0013AB25 /* libSPIRVTools.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libSPIRVTools.a; sourceTree = BUILT_PRODUCTS_DIR; };
A972A82321CECBE90013AB25 /* libSPIRVTools.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libSPIRVTools.a; sourceTree = BUILT_PRODUCTS_DIR; };
A972ABDC21CED7BC0013AB25 /* libglslang.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libglslang.a; sourceTree = BUILT_PRODUCTS_DIR; };
@ -2648,8 +2664,11 @@
A976290B21CC60BC00B52A68 /* spirv_cfg.cpp */,
A976290921CC60BC00B52A68 /* spirv_cfg.hpp */,
A976290721CC60BC00B52A68 /* spirv_common.hpp */,
A9717C0326EE8C570041AE82 /* spirv_cross_containers.hpp */,
A9717C0426EE8C570041AE82 /* spirv_cross_error_handling.hpp */,
A976290E21CC60BC00B52A68 /* spirv_cross_parsed_ir.cpp */,
A976290821CC60BC00B52A68 /* spirv_cross_parsed_ir.hpp */,
A9717C0B26EE8C730041AE82 /* spirv_cross_util.hpp */,
A976290521CC60BC00B52A68 /* spirv_cross.cpp */,
A976290321CC60BC00B52A68 /* spirv_cross.hpp */,
A976290621CC60BC00B52A68 /* spirv_glsl.cpp */,
@ -2660,6 +2679,7 @@
A976290C21CC60BC00B52A68 /* spirv_parser.hpp */,
450A4F64221C5A95007203D7 /* spirv_reflect.cpp */,
450A4F63221C5A95007203D7 /* spirv_reflect.hpp */,
A9717C0F26EE8C9D0041AE82 /* spirv.hpp */,
);
path = "SPIRV-Cross";
sourceTree = "<group>";
@ -3133,6 +3153,10 @@
2FEA0CDD2490322B00EEF3AD /* spirv_common.hpp in Headers */,
2FEA0CDE2490322B00EEF3AD /* spirv_glsl.hpp in Headers */,
2FEA0CDF2490322B00EEF3AD /* spirv_parser.hpp in Headers */,
A9717C0D26EE8C730041AE82 /* spirv_cross_util.hpp in Headers */,
A9717C0626EE8C570041AE82 /* spirv_cross_containers.hpp in Headers */,
A9717C1126EE8C9D0041AE82 /* spirv.hpp in Headers */,
A9717C0926EE8C570041AE82 /* spirv_cross_error_handling.hpp in Headers */,
2FEA0CE02490322B00EEF3AD /* spirv_cross.hpp in Headers */,
2FEA0CE12490322B00EEF3AD /* spirv_msl.hpp in Headers */,
2FEA0CE22490322B00EEF3AD /* spirv_reflect.hpp in Headers */,
@ -3650,6 +3674,10 @@
A976291A21CC60BC00B52A68 /* spirv_common.hpp in Headers */,
A976292021CC60BC00B52A68 /* spirv_glsl.hpp in Headers */,
A976292421CC60BC00B52A68 /* spirv_parser.hpp in Headers */,
A9717C0E26EE8C730041AE82 /* spirv_cross_util.hpp in Headers */,
A9717C0726EE8C570041AE82 /* spirv_cross_containers.hpp in Headers */,
A9717C1226EE8C9D0041AE82 /* spirv.hpp in Headers */,
A9717C0A26EE8C570041AE82 /* spirv_cross_error_handling.hpp in Headers */,
A976291221CC60BC00B52A68 /* spirv_cross.hpp in Headers */,
A976291021CC60BC00B52A68 /* spirv_msl.hpp in Headers */,
450A4F66221C5A95007203D7 /* spirv_reflect.hpp in Headers */,
@ -3665,6 +3693,10 @@
A976291921CC60BC00B52A68 /* spirv_common.hpp in Headers */,
A976291F21CC60BC00B52A68 /* spirv_glsl.hpp in Headers */,
A976292321CC60BC00B52A68 /* spirv_parser.hpp in Headers */,
A9717C0C26EE8C730041AE82 /* spirv_cross_util.hpp in Headers */,
A9717C0526EE8C570041AE82 /* spirv_cross_containers.hpp in Headers */,
A9717C1026EE8C9D0041AE82 /* spirv.hpp in Headers */,
A9717C0826EE8C570041AE82 /* spirv_cross_error_handling.hpp in Headers */,
A976291121CC60BC00B52A68 /* spirv_cross.hpp in Headers */,
A976290F21CC60BC00B52A68 /* spirv_msl.hpp in Headers */,
450A4F65221C5A95007203D7 /* spirv_reflect.hpp in Headers */,

View File

@ -124,8 +124,11 @@ if you encounter any building errors, you may need to re-add the *SPIRV-Cross* l
spirv_cfg.cpp
spirv_cfg.hpp
spirv_common.hpp
spirv_cross_containers.hpp
spirv_cross_error_handling.hpp
spirv_cross_parsed_ir.cpp
spirv_cross_parsed_ir.hpp
spirv_cross_util.hpp
spirv_cross.cpp
spirv_cross.hpp
spirv_glsl.cpp
@ -134,6 +137,9 @@ if you encounter any building errors, you may need to re-add the *SPIRV-Cross* l
spirv_msl.hpp
spirv_parser.cpp
spirv_parser.hpp
spirv_reflect.cpp
spirv_reflect.hpp
spirv.hpp
In the ***Choose options for adding these files*** dialog that opens, select the ***Create groups*** option,
add the files to *all* of the `SPIRV-Cross-macOS`, `SPIRV-Cross-iOS`, and `SPIRV-Cross-tvOS` targets,

View File

@ -1655,6 +1655,7 @@ void MVKGraphicsPipeline::addPrevStageOutputToShaderConversionConfig(SPIRVToMSLC
mvk::MSLShaderInput si;
si.shaderInput.location = shaderOutputs[siIdx].location;
si.shaderInput.component = shaderOutputs[siIdx].component;
si.shaderInput.builtin = shaderOutputs[siIdx].builtin;
si.shaderInput.vecsize = shaderOutputs[siIdx].vecWidth;
@ -2129,6 +2130,7 @@ namespace SPIRV_CROSS_NAMESPACE {
template<class Archive>
void serialize(Archive & archive, MSLShaderInput& si) {
archive(si.location,
si.component,
si.format,
si.builtin,
si.vecsize);

View File

@ -64,6 +64,9 @@ namespace mvk {
/** The location number of the output. */
uint32_t location;
/** The component index of the output. */
uint32_t component;
/** If this is a builtin, the kind of builtin this is. */
spv::BuiltIn builtin;
@ -202,9 +205,13 @@ namespace mvk {
isUsed = reflect.has_active_builtin(biType, storage);
}
uint32_t loc = -1;
uint32_t cmp = 0;
if (reflect.has_decoration(varID, spv::DecorationLocation)) {
loc = reflect.get_decoration(varID, spv::DecorationLocation);
}
if (reflect.has_decoration(varID, spv::DecorationComponent)) {
cmp = reflect.get_decoration(varID, spv::DecorationComponent);
}
if (model == spv::ExecutionModelTessellationControl && !patch)
type = &reflect.get_type(type->parent_type);
@ -213,8 +220,10 @@ namespace mvk {
// Each member may have a location decoration. If not, each member
// gets an incrementing location.
uint32_t memberLoc = addSat(loc, idx);
uint32_t memberCmp = 0;
if (reflect.has_member_decoration(type->self, idx, spv::DecorationLocation)) {
memberLoc = reflect.get_member_decoration(type->self, idx, spv::DecorationLocation);
memberCmp = reflect.get_member_decoration(type->self, idx, spv::DecorationComponent);
}
patch = patch || reflect.has_member_decoration(type->self, idx, spv::DecorationPatch);
if (reflect.has_member_decoration(type->self, idx, spv::DecorationBuiltIn)) {
@ -224,26 +233,26 @@ namespace mvk {
const SPIRV_CROSS_NAMESPACE::SPIRType& memberType = reflect.get_type(type->member_types[idx]);
if (memberType.columns > 1) {
for (uint32_t i = 0; i < memberType.columns; i++) {
outputs.push_back({memberType.basetype, memberType.vecsize, addSat(memberLoc, i), biType, patch, isUsed});
outputs.push_back({memberType.basetype, memberType.vecsize, addSat(memberLoc, i), memberCmp, biType, patch, isUsed});
}
} else if (!memberType.array.empty()) {
for (uint32_t i = 0; i < memberType.array[0]; i++) {
outputs.push_back({memberType.basetype, memberType.vecsize, addSat(memberLoc, i), biType, patch, isUsed});
outputs.push_back({memberType.basetype, memberType.vecsize, addSat(memberLoc, i), memberCmp, biType, patch, isUsed});
}
} else {
outputs.push_back({memberType.basetype, memberType.vecsize, memberLoc, biType, patch, isUsed});
outputs.push_back({memberType.basetype, memberType.vecsize, memberLoc, memberCmp, biType, patch, isUsed});
}
}
} else if (type->columns > 1) {
for (uint32_t i = 0; i < type->columns; i++) {
outputs.push_back({type->basetype, type->vecsize, addSat(loc, i), biType, patch, isUsed});
outputs.push_back({type->basetype, type->vecsize, addSat(loc, i), cmp, biType, patch, isUsed});
}
} else if (!type->array.empty()) {
for (uint32_t i = 0; i < type->array[0]; i++) {
outputs.push_back({type->basetype, type->vecsize, addSat(loc, i), biType, patch, isUsed});
outputs.push_back({type->basetype, type->vecsize, addSat(loc, i), cmp, biType, patch, isUsed});
}
} else {
outputs.push_back({type->basetype, type->vecsize, loc, biType, patch, isUsed});
outputs.push_back({type->basetype, type->vecsize, loc, cmp, biType, patch, isUsed});
}
}
// Sort outputs by ascending location.