Merge pull request #219 from billhollings/master

MoltenVK 1.0.18
diff --git a/Docs/Whats_New.md b/Docs/Whats_New.md
index e1c3e0c..88816d4 100644
--- a/Docs/Whats_New.md
+++ b/Docs/Whats_New.md
@@ -13,6 +13,19 @@
 
 
 
+MoltenVK 1.0.18
+---------------
+
+Released 2018/08/15
+
+- vkCmdFullBuffer() fills buffer using compute shader.
+- Fix API for updating MVKDeviceConfiguration::synchronousQueueSubmits.
+- vkGetPhysicalDeviceFormatProperties() return VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT 
+  if supported, even if other format properties are not.
+- Support Metal GPU capture scopes.
+- Update to latest SPIRV-Cross, glslang & SPIRV-Tools.
+
+
 MoltenVK 1.0.17
 ---------------
 
diff --git a/ExternalRevisions/SPIRV-Cross_repo_revision b/ExternalRevisions/SPIRV-Cross_repo_revision
index 7ae4c70..0236f54 100644
--- a/ExternalRevisions/SPIRV-Cross_repo_revision
+++ b/ExternalRevisions/SPIRV-Cross_repo_revision
@@ -1 +1 @@
-162eee632599cd077972ee1d88b341eedbcfdf27
+973e2e6e42f0414a304c84a19353cc4719a2bf9f
diff --git a/ExternalRevisions/glslang_repo_revision b/ExternalRevisions/glslang_repo_revision
index 348bd94..a4e2ff1 100644
--- a/ExternalRevisions/glslang_repo_revision
+++ b/ExternalRevisions/glslang_repo_revision
@@ -1 +1 @@
-e99a26810f65314183163c07664a40e05647c15f
+ec5c11931bcfc1f438ae4aec46e1783a42cec7e6
diff --git a/MoltenVK/MoltenVK.xcodeproj/project.pbxproj b/MoltenVK/MoltenVK.xcodeproj/project.pbxproj
index 034fcd1..6664b45 100644
--- a/MoltenVK/MoltenVK.xcodeproj/project.pbxproj
+++ b/MoltenVK/MoltenVK.xcodeproj/project.pbxproj
@@ -13,6 +13,10 @@
 		A90C8DEB1F45354D009CB32C /* MVKCommandEncodingPool.h in Headers */ = {isa = PBXBuildFile; fileRef = A90C8DE81F45354D009CB32C /* MVKCommandEncodingPool.h */; };
 		A90C8DEC1F45354D009CB32C /* MVKCommandEncodingPool.mm in Sources */ = {isa = PBXBuildFile; fileRef = A90C8DE91F45354D009CB32C /* MVKCommandEncodingPool.mm */; };
 		A90C8DED1F45354D009CB32C /* MVKCommandEncodingPool.mm in Sources */ = {isa = PBXBuildFile; fileRef = A90C8DE91F45354D009CB32C /* MVKCommandEncodingPool.mm */; };
+		A93E832F2121C5D4001FEBD4 /* MVKGPUCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E832E2121C5D3001FEBD4 /* MVKGPUCapture.h */; };
+		A93E83302121C5D4001FEBD4 /* MVKGPUCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E832E2121C5D3001FEBD4 /* MVKGPUCapture.h */; };
+		A93E83352121F0C8001FEBD4 /* MVKGPUCapture.mm in Sources */ = {isa = PBXBuildFile; fileRef = A93E83342121F0C8001FEBD4 /* MVKGPUCapture.mm */; };
+		A93E83362121F0C8001FEBD4 /* MVKGPUCapture.mm in Sources */ = {isa = PBXBuildFile; fileRef = A93E83342121F0C8001FEBD4 /* MVKGPUCapture.mm */; };
 		A948BB7F1E51642700DE59F2 /* mvk_vulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = A948BB7E1E51642700DE59F2 /* mvk_vulkan.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		A948BB801E51642700DE59F2 /* mvk_vulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = A948BB7E1E51642700DE59F2 /* mvk_vulkan.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		A94FB7B01C7DFB4800632CA3 /* mvk_datatypes.h in Headers */ = {isa = PBXBuildFile; fileRef = A94FB7671C7DFB4800632CA3 /* mvk_datatypes.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -256,6 +260,8 @@
 		A9096E5D1F81E16300DFBEA6 /* MVKCmdDispatch.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MVKCmdDispatch.mm; sourceTree = "<group>"; };
 		A90C8DE81F45354D009CB32C /* MVKCommandEncodingPool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MVKCommandEncodingPool.h; sourceTree = "<group>"; };
 		A90C8DE91F45354D009CB32C /* MVKCommandEncodingPool.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MVKCommandEncodingPool.mm; sourceTree = "<group>"; };
+		A93E832E2121C5D3001FEBD4 /* MVKGPUCapture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MVKGPUCapture.h; sourceTree = "<group>"; };
+		A93E83342121F0C8001FEBD4 /* MVKGPUCapture.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MVKGPUCapture.mm; sourceTree = "<group>"; };
 		A948BB7E1E51642700DE59F2 /* mvk_vulkan.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mvk_vulkan.h; sourceTree = "<group>"; };
 		A94FB7671C7DFB4800632CA3 /* mvk_datatypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mvk_datatypes.h; sourceTree = "<group>"; };
 		A94FB7691C7DFB4800632CA3 /* vk_mvk_moltenvk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vk_mvk_moltenvk.h; sourceTree = "<group>"; };
@@ -541,6 +547,8 @@
 				A9E53DCD2100B197002781DD /* MTLSamplerDescriptor+MoltenVK.m */,
 				A9E53DD02100B197002781DD /* MTLTextureDescriptor+MoltenVK.h */,
 				A9E53DD52100B197002781DD /* MTLTextureDescriptor+MoltenVK.m */,
+				A93E832E2121C5D3001FEBD4 /* MVKGPUCapture.h */,
+				A93E83342121F0C8001FEBD4 /* MVKGPUCapture.mm */,
 				A9E53DCE2100B197002781DD /* MVKOSExtensions.h */,
 				A9E53DCF2100B197002781DD /* MVKOSExtensions.mm */,
 				A9E53DD22100B197002781DD /* NSString+MoltenVK.h */,
@@ -619,6 +627,7 @@
 				A9C96DD01DDC20C20053187F /* MVKMTLBufferAllocation.h in Headers */,
 				A98149571FB6A3F7005F00B4 /* MVKObjectPool.h in Headers */,
 				A94FB8141C7DFB4800632CA3 /* MVKSwapchain.h in Headers */,
+				A93E832F2121C5D4001FEBD4 /* MVKGPUCapture.h in Headers */,
 				A94FB7DC1C7DFB4800632CA3 /* MVKBuffer.h in Headers */,
 				A9F042A41FB4CF83009FCCB8 /* MVKCommonEnvironment.h in Headers */,
 				A981495D1FB6A3F7005F00B4 /* MVKWatermark.h in Headers */,
@@ -677,6 +686,7 @@
 				A9C96DD11DDC20C20053187F /* MVKMTLBufferAllocation.h in Headers */,
 				A98149581FB6A3F7005F00B4 /* MVKObjectPool.h in Headers */,
 				A94FB8151C7DFB4800632CA3 /* MVKSwapchain.h in Headers */,
+				A93E83302121C5D4001FEBD4 /* MVKGPUCapture.h in Headers */,
 				A94FB7DD1C7DFB4800632CA3 /* MVKBuffer.h in Headers */,
 				A9F042A51FB4CF83009FCCB8 /* MVKCommonEnvironment.h in Headers */,
 				A981495E1FB6A3F7005F00B4 /* MVKWatermark.h in Headers */,
@@ -891,6 +901,7 @@
 				A94FB8301C7DFB4800632CA3 /* vk_mvk_moltenvk.mm in Sources */,
 				A94FB8161C7DFB4800632CA3 /* MVKSwapchain.mm in Sources */,
 				A95B7D6B1D3EE486003183D3 /* MVKCommandEncoderState.mm in Sources */,
+				A93E83352121F0C8001FEBD4 /* MVKGPUCapture.mm in Sources */,
 				A94FB7CE1C7DFB4800632CA3 /* MVKCommand.mm in Sources */,
 				A94FB80E1C7DFB4800632CA3 /* MVKShaderModule.mm in Sources */,
 				A94FB81A1C7DFB4800632CA3 /* MVKSync.mm in Sources */,
@@ -941,6 +952,7 @@
 				A94FB8311C7DFB4800632CA3 /* vk_mvk_moltenvk.mm in Sources */,
 				A94FB8171C7DFB4800632CA3 /* MVKSwapchain.mm in Sources */,
 				A95B7D6C1D3EE486003183D3 /* MVKCommandEncoderState.mm in Sources */,
+				A93E83362121F0C8001FEBD4 /* MVKGPUCapture.mm in Sources */,
 				A94FB7CF1C7DFB4800632CA3 /* MVKCommand.mm in Sources */,
 				A94FB80F1C7DFB4800632CA3 /* MVKShaderModule.mm in Sources */,
 				A94FB81B1C7DFB4800632CA3 /* MVKSync.mm in Sources */,
diff --git a/MoltenVK/MoltenVK/API/mvk_datatypes.h b/MoltenVK/MoltenVK/API/mvk_datatypes.h
index 0be95ce..c02676b 100644
--- a/MoltenVK/MoltenVK/API/mvk_datatypes.h
+++ b/MoltenVK/MoltenVK/API/mvk_datatypes.h
@@ -165,17 +165,18 @@
 /** 
  * Returns the default properties for the specified Vulkan format.
  *
- * Not all MTLPixelFormats returned by this function are supported by all GPU's,
- * and, as a result, MoltenVK may return a different value from the 
- * vkGetPhysicalDeviceFormatProperties() function than is returned here.
+ * Not all MTLPixelFormats returned by this function are supported by all GPU's, and, as a
+ * result, MoltenVK may return a different value from the vkGetPhysicalDeviceFormatProperties()
+ * function than is returned here. Use the vkGetPhysicalDeviceFormatProperties() function to
+ * return the properties for a particular GPU.
  *
- * Not all macOS GPU's support the MTLPixelFormatDepth24Unorm_Stencil8 
- * (VK_FORMAT_D24_UNORM_S8_UINT) pixel format. On an macOS device that has more 
- * than one GPU, one of the GPU's may support that format, while another may not.
- * Use the vkGetPhysicalDeviceFormatProperties() function to return the properties
- * for a particular GPU.
+ * Setting assumeGPUSupportsDefault to true allows the default format properties to be returned.
+ * The assumeGPUSupportsDefault flag can be set to false if it is already known that the format
+ * is not supported by a particular GPU for images, in which case all of the returned properties
+ * will be disabled, except possibly VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT, which may be supported
+ * for the format even without image support.
  */
-VkFormatProperties mvkVkFormatProperties(VkFormat vkFormat);
+VkFormatProperties mvkVkFormatProperties(VkFormat vkFormat, bool assumeGPUSupportsDefault = true);
 
 /** Returns the name of the specified Vulkan format. */
 const char* mvkVkFormatName(VkFormat vkFormat);
diff --git a/MoltenVK/MoltenVK/API/vk_mvk_moltenvk.h b/MoltenVK/MoltenVK/API/vk_mvk_moltenvk.h
index 7bc9d7d..0cd28d0 100644
--- a/MoltenVK/MoltenVK/API/vk_mvk_moltenvk.h
+++ b/MoltenVK/MoltenVK/API/vk_mvk_moltenvk.h
@@ -48,7 +48,7 @@
  */
 #define MVK_VERSION_MAJOR   1
 #define MVK_VERSION_MINOR   0
-#define MVK_VERSION_PATCH   17
+#define MVK_VERSION_PATCH   18
 
 #define MVK_MAKE_VERSION(major, minor, patch)    (((major) * 10000) + ((minor) * 100) + (patch))
 #define MVK_VERSION     MVK_MAKE_VERSION(MVK_VERSION_MAJOR, MVK_VERSION_MINOR, MVK_VERSION_PATCH)
diff --git a/MoltenVK/MoltenVK/Commands/MVKCmdTransfer.mm b/MoltenVK/MoltenVK/Commands/MVKCmdTransfer.mm
index 444cace..b28c2cd 100644
--- a/MoltenVK/MoltenVK/Commands/MVKCmdTransfer.mm
+++ b/MoltenVK/MoltenVK/Commands/MVKCmdTransfer.mm
@@ -541,6 +541,13 @@
 #pragma mark -
 #pragma mark MVKCmdCopyBuffer
 
+// Matches shader struct.
+typedef struct {
+	uint32_t srcOffset;
+	uint32_t dstOffset;
+	uint32_t size;
+} MVKCmdCopyBufferInfo;
+
 void MVKCmdCopyBuffer::setContent(VkBuffer srcBuffer,
 								  VkBuffer destBuffer,
 								  uint32_t regionCount,
@@ -570,17 +577,20 @@
 													  cpyRgn.dstOffset % buffAlign != 0 ||
 													  cpyRgn.size      % buffAlign != 0);
 		if (useComputeCopy) {
-			MVKAssert(cpyRgn.srcOffset <= UINT32_MAX || cpyRgn.dstOffset <= UINT32_MAX || cpyRgn.size <= UINT32_MAX,
-					  "Compute buffer copy region offsets and size must fit into a 32-bit unsigned integer.");
+			MVKAssert(mvkFits<uint32_t>(cpyRgn.srcOffset) && mvkFits<uint32_t>(cpyRgn.dstOffset) && mvkFits<uint32_t>(cpyRgn.size),
+					  "Byte-aligned buffer copy region offsets and size must each fit into a 32-bit unsigned integer.");
+
+			MVKCmdCopyBufferInfo copyInfo;
+			copyInfo.srcOffset = (uint32_t)cpyRgn.srcOffset;
+			copyInfo.dstOffset = (uint32_t)cpyRgn.dstOffset;
+			copyInfo.size = (uint32_t)cpyRgn.size;
 
 			id<MTLComputeCommandEncoder> mtlComputeEnc = cmdEncoder->getMTLComputeEncoder(kMVKCommandUseCopyBuffer);
 			[mtlComputeEnc pushDebugGroup: @"vkCmdCopyBuffer"];
-			id<MTLComputePipelineState> pipelineState = cmdEncoder->getCommandEncodingPool()->getCopyBufferBytesComputePipelineState();
-			[mtlComputeEnc setComputePipelineState:pipelineState];
-			[mtlComputeEnc setBuffer:srcMTLBuff offset:srcMTLBuffOffset atIndex:0];
-			[mtlComputeEnc setBuffer:dstMTLBuff offset:dstMTLBuffOffset atIndex:1];
-			uint32_t copyInfo[3] = { (uint32_t)cpyRgn.srcOffset,  (uint32_t)cpyRgn.dstOffset, (uint32_t)cpyRgn.size };
-			[mtlComputeEnc setBytes:copyInfo length:sizeof(copyInfo) atIndex:2];
+			[mtlComputeEnc setComputePipelineState: cmdEncoder->getCommandEncodingPool()->getCmdCopyBufferBytesMTLComputePipelineState()];
+			[mtlComputeEnc setBuffer:srcMTLBuff offset: srcMTLBuffOffset atIndex: 0];
+			[mtlComputeEnc setBuffer:dstMTLBuff offset: dstMTLBuffOffset atIndex: 1];
+			[mtlComputeEnc setBytes: &copyInfo length: sizeof(copyInfo) atIndex: 2];
 			[mtlComputeEnc dispatchThreads: MTLSizeMake(1, 1, 1) threadsPerThreadgroup: MTLSizeMake(1, 1, 1)];
 			[mtlComputeEnc popDebugGroup];
 		} else {
@@ -939,7 +949,7 @@
                              ? _image->getLayerCount()
                              : (layerStart + layerCnt));
 
-        // Iterate across mipmap levels and layers, and render to clear each
+        // Iterate across mipmap levels and layers, and perform and empty render to clear each
         for (uint32_t mipLvl = mipLvlStart; mipLvl < mipLvlEnd; mipLvl++) {
 			mtlRPCADesc.level = mipLvl;
 			mtlRPDADesc.level = mipLvl;
@@ -963,6 +973,13 @@
 #pragma mark -
 #pragma mark MVKCmdFillBuffer
 
+// Matches shader struct
+typedef struct {
+	uint32_t dstOffset;
+	uint32_t size;
+	uint32_t data;
+} MVKCmdFillBufferInfo;
+
 void MVKCmdFillBuffer::setContent(VkBuffer dstBuffer,
                                   VkDeviceSize dstOffset,
                                   VkDeviceSize size,
@@ -974,18 +991,26 @@
 }
 
 void MVKCmdFillBuffer::encode(MVKCommandEncoder* cmdEncoder) {
-
-    id<MTLBlitCommandEncoder> mtlBlitEnc = cmdEncoder->getMTLBlitEncoder(kMVKCommandUseFillBuffer);
-
     id<MTLBuffer> dstMTLBuff = _dstBuffer->getMTLBuffer();
-    NSUInteger dstMTLBuffOffset = _dstBuffer->getMTLBufferOffset() + _dstOffset;
-    VkDeviceSize byteCnt = (_size == VK_WHOLE_SIZE) ? (_dstBuffer->getByteCount() - _dstOffset) : _size;
+    VkDeviceSize dstMTLBuffOffset = _dstBuffer->getMTLBufferOffset();
+    VkDeviceSize byteCnt = (_size == VK_WHOLE_SIZE) ? (_dstBuffer->getByteCount() - (dstMTLBuffOffset + _dstOffset)) : _size;
+	VkDeviceSize wordCnt = byteCnt >> 2;
 
-    // Metal only supports filling with a single byte value, so each byte in the
-    // buffer will be filled with the lower 8 bits of the Vulkan 32-bit data value.
-    [mtlBlitEnc fillBuffer: dstMTLBuff
-                     range: NSMakeRange(dstMTLBuffOffset, byteCnt)
-                     value: (uint8_t)_dataValue];
+	MVKAssert(mvkFits<uint32_t>(_dstOffset) && mvkFits<uint32_t>(wordCnt),
+			  "Buffer fill offset and size must each fit into a 32-bit unsigned integer.");
+
+	MVKCmdFillBufferInfo fillInfo;
+	fillInfo.dstOffset = (uint32_t)_dstOffset;
+	fillInfo.size = (uint32_t)wordCnt;
+	fillInfo.data = _dataValue;
+
+	id<MTLComputeCommandEncoder> mtlComputeEnc = cmdEncoder->getMTLComputeEncoder(kMVKCommandUseCopyBuffer);
+	[mtlComputeEnc pushDebugGroup: @"vkCmdFillBuffer"];
+	[mtlComputeEnc setComputePipelineState: cmdEncoder->getCommandEncodingPool()->getCmdFillBufferMTLComputePipelineState()];
+	[mtlComputeEnc setBuffer: dstMTLBuff offset: dstMTLBuffOffset atIndex: 0];
+	[mtlComputeEnc setBytes: &fillInfo length: sizeof(fillInfo) atIndex: 1];
+	[mtlComputeEnc dispatchThreads: MTLSizeMake(1, 1, 1) threadsPerThreadgroup: MTLSizeMake(1, 1, 1)];
+	[mtlComputeEnc popDebugGroup];
 }
 
 
diff --git a/MoltenVK/MoltenVK/Commands/MVKCommandEncodingPool.h b/MoltenVK/MoltenVK/Commands/MVKCommandEncodingPool.h
index 705e961..be8e237 100644
--- a/MoltenVK/MoltenVK/Commands/MVKCommandEncodingPool.h
+++ b/MoltenVK/MoltenVK/Commands/MVKCommandEncodingPool.h
@@ -91,11 +91,11 @@
      */
     MVKImage* getTransferMVKImage(MVKImageDescriptorData& imgData);
     
-    /**
-     * Returns an MTLComputePipelineState dedicated to copying bytes between two buffers
-     * with unaligned copy regions.
-     */
-    id<MTLComputePipelineState> getCopyBufferBytesComputePipelineState();
+	/** Returns a MTLComputePipelineState for copying between two buffers with byte-aligned copy regions. */
+    id<MTLComputePipelineState> getCmdCopyBufferBytesMTLComputePipelineState();
+
+	/** Returns a MTLComputePipelineState for filling a buffer. */
+	id<MTLComputePipelineState> getCmdFillBufferMTLComputePipelineState();
 
 #pragma mark Construction
 
@@ -113,12 +113,13 @@
     std::unordered_map<MVKImageDescriptorData, MVKImage*> _transferImages;
     MVKDeviceMemory* _transferImageMemory;
     MVKMTLBufferAllocator _mtlBufferAllocator;
-    id<MTLSamplerState> _cmdBlitImageLinearMTLSamplerState;
-    id<MTLSamplerState> _cmdBlitImageNearestMTLSamplerState;
-    id<MTLDepthStencilState> _cmdClearDepthOnlyDepthStencilState;
-    id<MTLDepthStencilState> _cmdClearStencilOnlyDepthStencilState;
-    id<MTLDepthStencilState> _cmdClearDepthAndStencilDepthStencilState;
-    id<MTLDepthStencilState> _cmdClearDefaultDepthStencilState;
-    id<MTLComputePipelineState> _mtlCopyBufferBytesComputePipelineState;
+    id<MTLSamplerState> _cmdBlitImageLinearMTLSamplerState = nil;
+    id<MTLSamplerState> _cmdBlitImageNearestMTLSamplerState = nil;
+    id<MTLDepthStencilState> _cmdClearDepthOnlyDepthStencilState = nil;
+    id<MTLDepthStencilState> _cmdClearStencilOnlyDepthStencilState = nil;
+    id<MTLDepthStencilState> _cmdClearDepthAndStencilDepthStencilState = nil;
+    id<MTLDepthStencilState> _cmdClearDefaultDepthStencilState = nil;
+    id<MTLComputePipelineState> _mtlCopyBufferBytesComputePipelineState = nil;
+	id<MTLComputePipelineState> _mtlFillBufferComputePipelineState = nil;
 };
 
diff --git a/MoltenVK/MoltenVK/Commands/MVKCommandEncodingPool.mm b/MoltenVK/MoltenVK/Commands/MVKCommandEncodingPool.mm
index bfe070a..fb7a601 100644
--- a/MoltenVK/MoltenVK/Commands/MVKCommandEncodingPool.mm
+++ b/MoltenVK/MoltenVK/Commands/MVKCommandEncodingPool.mm
@@ -111,26 +111,25 @@
     return mvkImg;
 }
 
-id<MTLComputePipelineState> MVKCommandEncodingPool::getCopyBufferBytesComputePipelineState() {
+id<MTLComputePipelineState> MVKCommandEncodingPool::getCmdCopyBufferBytesMTLComputePipelineState() {
     if (_mtlCopyBufferBytesComputePipelineState == nil) {
-        _mtlCopyBufferBytesComputePipelineState = _device->getCommandResourceFactory()->newCopyBytesMTLComputePipelineState();
+        _mtlCopyBufferBytesComputePipelineState = _device->getCommandResourceFactory()->newCmdCopyBufferBytesMTLComputePipelineState();
     }
     return _mtlCopyBufferBytesComputePipelineState;
 }
 
+id<MTLComputePipelineState> MVKCommandEncodingPool::getCmdFillBufferMTLComputePipelineState() {
+	if (_mtlFillBufferComputePipelineState == nil) {
+		_mtlFillBufferComputePipelineState = _device->getCommandResourceFactory()->newCmdFillBufferMTLComputePipelineState();
+	}
+	return _mtlFillBufferComputePipelineState;
+}
+
 #pragma mark Construction
 
 MVKCommandEncodingPool::MVKCommandEncodingPool(MVKDevice* device) : MVKBaseDeviceObject(device),
     _mtlBufferAllocator(device, device->_pMetalFeatures->maxMTLBufferSize) {
 
-    _cmdBlitImageLinearMTLSamplerState = nil;
-    _cmdBlitImageNearestMTLSamplerState = nil;
-    _cmdClearDepthAndStencilDepthStencilState = nil;
-    _cmdClearDepthOnlyDepthStencilState = nil;
-    _cmdClearStencilOnlyDepthStencilState = nil;
-    _cmdClearDefaultDepthStencilState = nil;
-    _mtlCopyBufferBytesComputePipelineState = nil;
-
     initTextureDeviceMemory();
 }
 
diff --git a/MoltenVK/MoltenVK/Commands/MVKCommandPipelineStateFactoryShaderSource.h b/MoltenVK/MoltenVK/Commands/MVKCommandPipelineStateFactoryShaderSource.h
index 161fb6f..bda4594 100644
--- a/MoltenVK/MoltenVK/Commands/MVKCommandPipelineStateFactoryShaderSource.h
+++ b/MoltenVK/MoltenVK/Commands/MVKCommandPipelineStateFactoryShaderSource.h
@@ -68,16 +68,30 @@
 typedef struct {                                                                                                \n\
     uint32_t srcOffset;                                                                                         \n\
     uint32_t dstOffset;                                                                                         \n\
-    uint32_t copySize;                                                                                          \n\
+    uint32_t size;                                                                                              \n\
 } CopyInfo;                                                                                                     \n\
                                                                                                                 \n\
-kernel void compCopyBufferBytes(device uint8_t* src [[ buffer(0) ]],                                            \n\
-                                device uint8_t* dst [[ buffer(1) ]],                                            \n\
-                                constant CopyInfo& info [[ buffer(2) ]]) {                                      \n\
-    for (size_t i = 0; i < info.copySize; i++) {                                                                \n\
+kernel void cmdCopyBufferBytes(device uint8_t* src [[ buffer(0) ]],                                             \n\
+                               device uint8_t* dst [[ buffer(1) ]],                                             \n\
+                               constant CopyInfo& info [[ buffer(2) ]]) {                                       \n\
+    for (size_t i = 0; i < info.size; i++) {                                                                    \n\
         dst[i + info.dstOffset] = src[i + info.srcOffset];                                                      \n\
     }                                                                                                           \n\
 };                                                                                                              \n\
+                                                                                                                \n\
+typedef struct {                                                                                                \n\
+    uint32_t dstOffset;                                                                                         \n\
+    uint32_t size;                                                                                              \n\
+    uint32_t data;                                                                                              \n\
+} FillInfo;                                                                                                     \n\
+                                                                                                                \n\
+kernel void cmdFillBuffer(device uint32_t* dst [[ buffer(0) ]],                                                 \n\
+                          constant FillInfo& info [[ buffer(1) ]]) {                                            \n\
+    for (uint32_t i = 0; i < info.size; i++) {                                                                  \n\
+        dst[i + info.dstOffset] = info.data;                                                                    \n\
+    }                                                                                                           \n\
+};                                                                                                              \n\
+                                                                                                                \n\
 ";
 
 /** Returns MSL shader source code containing static functions to be used for various Vulkan commands. */
diff --git a/MoltenVK/MoltenVK/Commands/MVKCommandResourceFactory.h b/MoltenVK/MoltenVK/Commands/MVKCommandResourceFactory.h
index fc81e18..2821319 100644
--- a/MoltenVK/MoltenVK/Commands/MVKCommandResourceFactory.h
+++ b/MoltenVK/MoltenVK/Commands/MVKCommandResourceFactory.h
@@ -308,12 +308,11 @@
      */
     MVKImage* newMVKImage(MVKImageDescriptorData& imgData);
     
-    /**
-     * Returns a new MTLComputePipelineState dedicated to copying bytes between two buffers
-     * with unaligned copy regions.
-     */
-    id<MTLComputePipelineState> newCopyBytesMTLComputePipelineState();
+    /** Returns a new MTLComputePipelineState for copying between two buffers with byte-aligned copy regions. */
+    id<MTLComputePipelineState> newCmdCopyBufferBytesMTLComputePipelineState();
 
+	/** Returns a new MTLComputePipelineState for filling a buffer. */
+	id<MTLComputePipelineState> newCmdFillBufferMTLComputePipelineState();
 
 #pragma mark Construction
 
@@ -329,6 +328,7 @@
     id<MTLFunction> getFunctionNamed(const char* funcName);
 	id<MTLFunction> newMTLFunction(NSString* mslSrcCode, NSString* funcName);
     id<MTLRenderPipelineState> newMTLRenderPipelineState(MTLRenderPipelineDescriptor* plDesc);
+	id<MTLComputePipelineState> newMTLComputePipelineState(id<MTLFunction> mtlFunction);
 
 	id<MTLLibrary> _mtlLibrary;
 };
diff --git a/MoltenVK/MoltenVK/Commands/MVKCommandResourceFactory.mm b/MoltenVK/MoltenVK/Commands/MVKCommandResourceFactory.mm
index 5cce343..9916f29 100644
--- a/MoltenVK/MoltenVK/Commands/MVKCommandResourceFactory.mm
+++ b/MoltenVK/MoltenVK/Commands/MVKCommandResourceFactory.mm
@@ -303,6 +303,17 @@
     return _device->createImage(&createInfo, nullptr);
 }
 
+id<MTLComputePipelineState> MVKCommandResourceFactory::newCmdCopyBufferBytesMTLComputePipelineState() {
+	return newMTLComputePipelineState(getFunctionNamed("cmdCopyBufferBytes"));
+}
+
+id<MTLComputePipelineState> MVKCommandResourceFactory::newCmdFillBufferMTLComputePipelineState() {
+	return newMTLComputePipelineState(getFunctionNamed("cmdFillBuffer"));
+}
+
+
+#pragma mark Support methods
+
 id<MTLFunction> MVKCommandResourceFactory::getFunctionNamed(const char* funcName) {
     uint64_t startTime = _device->getPerformanceTimestamp();
     id<MTLFunction> mtlFunc = [[_mtlLibrary newFunctionWithName: @(funcName)] autorelease];
@@ -335,17 +346,14 @@
     return rps;
 }
 
-id<MTLComputePipelineState> MVKCommandResourceFactory::newCopyBytesMTLComputePipelineState() {
-    MTLComputePipelineDescriptor* plDesc = [[[MTLComputePipelineDescriptor alloc] init] autorelease];
-    plDesc.computeFunction = getFunctionNamed("compCopyBufferBytes");
-    plDesc.buffers[0].mutability = MTLMutabilityMutable;
-    plDesc.buffers[1].mutability = MTLMutabilityMutable;
-    NSError* err = nil;
-    id<MTLComputePipelineState> computePipelineState = [getMTLDevice() newComputePipelineStateWithDescriptor:plDesc options:MTLPipelineOptionNone reflection:nil error:&err];
-    MVKAssert( !err, "Could not create %s pipeline state: %s (code %li) %s", plDesc.label.UTF8String, err.localizedDescription.UTF8String, (long)err.code, err.localizedFailureReason.UTF8String);
-    return computePipelineState;
+id<MTLComputePipelineState> MVKCommandResourceFactory::newMTLComputePipelineState(id<MTLFunction> mtlFunction) {
+	MVKComputePipelineCompiler* plc = new MVKComputePipelineCompiler(_device);
+	id<MTLComputePipelineState> cps = plc->newMTLComputePipelineState(mtlFunction);		// retained
+	plc->destroy();
+    return cps;
 }
 
+
 #pragma mark Construction
 
 MVKCommandResourceFactory::MVKCommandResourceFactory(MVKDevice* device) : MVKBaseDeviceObject(device) {
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.h b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.h
index 24ac020..7f5a893 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.h
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.h
@@ -81,7 +81,7 @@
 	/** Populates the specified structure with the properties of this device. */
 	void getProperties(VkPhysicalDeviceProperties* properties);
 
-	/** Returns whether the specified format is supported. */
+	/** Returns whether the specified format is supported on this device. */
 	bool getFormatIsSupported(VkFormat format);
 
 	/** Populates the specified structure with the format properties of this device. */
@@ -266,6 +266,12 @@
 	/** Block the current thread until all queues in this device are idle. */
 	VkResult waitIdle();
 
+	/** Returns a pointer to the MoltenVK configuration info for this device. */
+	const MVKDeviceConfiguration* getMoltenVKConfiguration();
+
+	/** Sets the MoltenVK configuration info for this device. */
+	void setMoltenVKConfiguration(const MVKDeviceConfiguration* pConfiguration);
+
 
 #pragma mark Object lifecycle
 
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm
index 94ff4d8..66da700 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm
@@ -85,11 +85,9 @@
 	return true;
 }
 
-void MVKPhysicalDevice::getFormatProperties(VkFormat format,
-                                            VkFormatProperties* pFormatProperties) {
-	static VkFormatProperties noFmtFeats = { 0, 0, 0 };
+void MVKPhysicalDevice::getFormatProperties(VkFormat format, VkFormatProperties* pFormatProperties) {
     if (pFormatProperties) {
-		*pFormatProperties = getFormatIsSupported(format) ? mvkVkFormatProperties(format) : noFmtFeats;
+		*pFormatProperties = mvkVkFormatProperties(format, getFormatIsSupported(format));
 	}
 }
 
@@ -1022,6 +1020,21 @@
 	return VK_SUCCESS;
 }
 
+const MVKDeviceConfiguration* MVKDevice::getMoltenVKConfiguration() { return &_mvkConfig; }
+
+void MVKDevice::setMoltenVKConfiguration(const MVKDeviceConfiguration* pConfiguration) {
+	if ( !pConfiguration) { return; }
+
+	*(MVKDeviceConfiguration*)&_mvkConfig = *pConfiguration;
+
+	// Reconfigure the queues from the updated info
+	for (auto& queues : _queuesByQueueFamilyIndex) {
+		for (MVKQueue* q : queues) {
+			q->updateDeviceConfiguration();
+		}
+	}
+}
+
 
 #pragma mark Object lifecycle
 
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKQueue.h b/MoltenVK/MoltenVK/GPUObjects/MVKQueue.h
index a2a28fc..c561fae 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKQueue.h
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKQueue.h
@@ -31,6 +31,7 @@
 class MVKQueue;
 class MVKQueueSubmission;
 class MVKPhysicalDevice;
+class MVKGPUCaptureScope;
 
 
 #pragma mark -
@@ -112,6 +113,9 @@
     /** Returns the command encoding pool. */
     inline MVKCommandEncodingPool* getCommandEncodingPool() { return &_commandEncodingPool; }
 
+	/** Return the name of this queue. */
+	inline const std::string& getName() { return _name; }
+
 
 #pragma mark Metal
 
@@ -123,6 +127,13 @@
 	/** Constructs an instance for the device and queue family. */
 	MVKQueue(MVKDevice* device, MVKQueueFamily* queueFamily, uint32_t index, float priority);
 
+	/**
+	 * Called from MVKDevice when MVKDeviceConfiguration is updated.
+	 *
+	 * Updates the use of a dispatch queue based on the value of MVKDeviceConfiguration::synchronousQueueSubmits.
+	 */
+	void updateDeviceConfiguration();
+
 	~MVKQueue() override;
 
     /**
@@ -141,9 +152,12 @@
 
 protected:
 	friend class MVKQueueSubmission;
+	friend class MVKQueueCommandBufferSubmission;
+	friend class MVKQueuePresentSurfaceSubmission;
 
-	void initExecQueue();
+	void initName();
 	void initMTLCommandQueue();
+	void initGPUCaptureScopes();
 	void destroyExecQueue();
 	VkResult submit(MVKQueueSubmission* qSubmit);
 
@@ -152,11 +166,14 @@
 	float _priority;
 	dispatch_queue_t _execQueue;
 	id<MTLCommandQueue> _mtlQueue;
+	std::string _name;
 	std::vector<MVKMTLCommandBufferCountdown*> _completionCountdowns;
 	std::mutex _completionLock;
 	uint32_t _activeMTLCommandBufferCount;
 	MVKMTLCommandBufferID _nextMTLCmdBuffID;
     MVKCommandEncodingPool _commandEncodingPool;
+	MVKGPUCaptureScope* _submissionCaptureScope;
+	MVKGPUCaptureScope* _presentationCaptureScope;
 };
 
 
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKQueue.mm b/MoltenVK/MoltenVK/GPUObjects/MVKQueue.mm
index 82612d1..4f6d929 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKQueue.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKQueue.mm
@@ -21,6 +21,7 @@
 #include "MVKSync.h"
 #include "MVKFoundation.h"
 #include "MVKOSExtensions.h"
+#include "MVKGPUCapture.h"
 #include "MVKLogging.h"
 
 using namespace std;
@@ -124,7 +125,7 @@
 }
 
 // This function is guarded against conflict with the mtlCommandBufferHasCompleted()
-// function, but is not theadsafe against calls to this function itself, or to the
+// function, but is not threadsafe against calls to this function itself, or to the
 // registerMTLCommandBufferCountdown() function from multiple threads. It is assumed
 // that this function and the registerMTLCommandBufferCountdown() function are called
 // from a single thread.
@@ -190,39 +191,55 @@
 	_queueFamily = queueFamily;
 	_index = index;
 	_priority = priority;
-	initExecQueue();
-	initMTLCommandQueue();
 	_activeMTLCommandBufferCount = 0;
 	_nextMTLCmdBuffID = 1;
+	_execQueue = nullptr;	// Before updateDeviceConfiguration()
+
+	initName();
+	initMTLCommandQueue();
+	initGPUCaptureScopes();
+
+	updateDeviceConfiguration();
 }
 
-// Unless synchronous submission processing was configured,
-// creates and initializes the prioritized execution dispatch queue.
-void MVKQueue::initExecQueue() {
-	if (_device->_mvkConfig.synchronousQueueSubmits) {
-		_execQueue = nullptr;
-	} else {
-		// Create a name for the dispatch queue
-		const char* dqNameFmt = "MoltenVKDispatchQueue-%d-%d-%.1f";
-		char dqName[strlen(dqNameFmt) + 32];
-		sprintf(dqName, dqNameFmt, _queueFamily->getIndex(), _index, _priority);
+void MVKQueue::initName() {
+	const char* fmt = "MoltenVKQueue-%d-%d-%.1f";
+	char name[256];
+	sprintf(name, fmt, _queueFamily->getIndex(), _index, _priority);
+	_name = name;
+}
 
+// If synchronous submission processing is not configured in the device,
+// creates and initializes the prioritized execution dispatch queue.
+// If synchronous submission processing is configured in the device,
+// destroys the internal execution dispatch queue if it exists.
+void MVKQueue::updateDeviceConfiguration() {
+	if (_device->_mvkConfig.synchronousQueueSubmits) {
+		destroyExecQueue();
+	} else if ( !_execQueue ) {
 		// Determine the dispatch queue priority
 		dispatch_qos_class_t dqQOS = MVK_DISPATCH_QUEUE_QOS_CLASS;
 		int dqPriority = (1.0 - _priority) * QOS_MIN_RELATIVE_PRIORITY;
 		dispatch_queue_attr_t dqAttr = dispatch_queue_attr_make_with_qos_class(DISPATCH_QUEUE_SERIAL, dqQOS, dqPriority);
 
 		// Create the dispatch queue
-		_execQueue = dispatch_queue_create(dqName, dqAttr);		// retained
+		_execQueue = dispatch_queue_create((getName() + "-Dispatch").c_str(), dqAttr);		// retained
 	}
 }
 
-/** Creates and initializes the Metal queue. */
+// Creates and initializes the Metal queue.
 void MVKQueue::initMTLCommandQueue() {
 	uint64_t startTime = _device->getPerformanceTimestamp();
 	_mtlQueue = _queueFamily->getMTLCommandQueue(_index);	// not retained (cached in queue family)
 	_device->addActivityPerformance(_device->_performanceStatistics.queue.mtlQueueAccess, startTime);
-    [_mtlQueue insertDebugCaptureBoundary];                 // Allow Xcode to capture the first frame if desired.
+}
+
+// Initializes Xcode GPU capture scopes
+void MVKQueue::initGPUCaptureScopes() {
+	_submissionCaptureScope = new MVKGPUCaptureScope(this, "CommandBuffer-Submission");
+	_presentationCaptureScope = new MVKGPUCaptureScope(this, "Surface-Presentation");
+	_presentationCaptureScope->makeDefault();
+	_presentationCaptureScope->beginScope();	// Allow Xcode to capture the first frame if desired.
 }
 
 MVKQueue::~MVKQueue() {
@@ -236,11 +253,16 @@
     // in the destructor of the lock created in registerMTLCommandBufferCountdown().
     lock_guard<mutex> lock(_completionLock);
 	destroyExecQueue();
+	_submissionCaptureScope->destroy();
+	_presentationCaptureScope->destroy();
 }
 
 // Destroys the execution dispatch queue.
 void MVKQueue::destroyExecQueue() {
-	if (_execQueue) { dispatch_release(_execQueue); }
+	if (_execQueue) {
+		dispatch_release(_execQueue);
+		_execQueue = nullptr;
+	}
 }
 
 
@@ -287,6 +309,9 @@
 
 //	MVKLogDebug("Executing submission %p.", this);
 
+	auto cs = _queue->_submissionCaptureScope;
+	cs->beginScope();
+
     // Execute each command buffer, or if no command buffers, but a fence or semaphores,
     // create an empty MTLCommandBuffer to trigger the semaphores and fence.
     if ( !_cmdBuffers.empty() ) {
@@ -303,6 +328,8 @@
 
 	commitActiveMTLCommandBuffer();
 
+	cs->endScope();
+
     // Register for callback when MTLCommandBuffers have completed
     _queue->registerMTLCommandBufferCountdown(&_cmdBuffCountdown);
 }
@@ -412,8 +439,10 @@
 		for (auto& si : _surfaceImages) { si->presentCAMetalDrawable(nil); }
 	}
 
-    // Let Xcode know the frame is done, in case command buffer is not used
-    if (_device->_mvkConfig.debugMode) { [mtlQ insertDebugCaptureBoundary]; }
+    // Let Xcode know the current frame is done, then start a new frame
+	auto cs = _queue->_presentationCaptureScope;
+	cs->endScope();
+	cs->beginScope();
 
     this->destroy();
 }
diff --git a/MoltenVK/MoltenVK/OS/MVKGPUCapture.h b/MoltenVK/MoltenVK/OS/MVKGPUCapture.h
new file mode 100644
index 0000000..b20887c
--- /dev/null
+++ b/MoltenVK/MoltenVK/OS/MVKGPUCapture.h
@@ -0,0 +1,70 @@
+/*
+ * MVKGPUCapture.h
+ *
+ * Copyright (c) 2014-2018 The Brenwill Workshop Ltd. (http://www.brenwill.com)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include "MVKDevice.h"
+
+#import <Metal/Metal.h>
+
+class MVKQueue;
+
+
+#pragma mark -
+#pragma mark MVKGPUCaptureScope
+
+/**
+ * Represents a capture scope for capturing GPU activity within Xcode.
+ *
+ * If the OS supports the MTLCaptureScope protocol, this class creates and wraps an MTLCaptureScope
+ * instance for a MTLQueue, otherwise it interacts directly with the MTLQueue to define capture boundaries.
+ */
+class MVKGPUCaptureScope : public MVKBaseDeviceObject {
+
+public:
+
+	/** Marks the beginning boundary of a capture scope. */
+	void beginScope();
+
+	/** Marks the end boundary of a capture scope. */
+	void endScope();
+
+	/** Makes this instance the default capture scope within Xcode. */
+	void makeDefault();
+
+	/**
+	 * Constructs an instance for the specified queue and purpose.
+	 *
+	 * The purpose is combined with the name of the queue to create a unique identification name
+	 * for this instance, which will be displayed in Xcode when selecting a capture scope to use.
+	 */
+	MVKGPUCaptureScope(MVKQueue* mvkQueue, const char* purpose);
+
+	~MVKGPUCaptureScope() override;
+
+protected:
+	id<MTLCaptureScope> _mtlCaptureScope = nil;
+	id<MTLCommandQueue> _mtlQueue = nil;
+	bool _isFirstBoundary = true;
+	bool _isDefault = false;
+};
+
+
+
+
+
diff --git a/MoltenVK/MoltenVK/OS/MVKGPUCapture.mm b/MoltenVK/MoltenVK/OS/MVKGPUCapture.mm
new file mode 100644
index 0000000..c2b9631
--- /dev/null
+++ b/MoltenVK/MoltenVK/OS/MVKGPUCapture.mm
@@ -0,0 +1,69 @@
+/*
+ * MVKGPUCapture.mm
+ *
+ * Copyright (c) 2014-2018 The Brenwill Workshop Ltd. (http://www.brenwill.com)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "MVKGPUCapture.h"
+#include "MVKQueue.h"
+#include "MVKOSExtensions.h"
+
+
+#pragma mark -
+#pragma mark MVKGPUCaptureScope
+
+#if MVK_MACOS
+static MVKOSVersion kMinOSVersionMTLCaptureScope = 10.13;
+#endif
+#if MVK_IOS
+static MVKOSVersion kMinOSVersionMTLCaptureScope = 11.0;
+#endif
+
+void MVKGPUCaptureScope::beginScope() {
+	if (_mtlCaptureScope) {
+		[_mtlCaptureScope beginScope];
+	} else if (_isDefault && _isFirstBoundary) {
+		[_mtlQueue insertDebugCaptureBoundary];
+	}
+	_isFirstBoundary  = false;
+}
+
+void MVKGPUCaptureScope::endScope() {
+	if (_mtlCaptureScope) {
+		[_mtlCaptureScope endScope];
+	} else if (_isDefault) {
+		[_mtlQueue insertDebugCaptureBoundary];
+	}
+}
+
+void MVKGPUCaptureScope::makeDefault() {
+	_isDefault = true;
+	if (_mtlCaptureScope) {
+		[MTLCaptureManager sharedCaptureManager].defaultCaptureScope = _mtlCaptureScope;
+	}
+}
+
+MVKGPUCaptureScope::MVKGPUCaptureScope(MVKQueue* mvkQueue, const char* purpose) : MVKBaseDeviceObject(mvkQueue->getDevice()) {
+	_mtlQueue = [mvkQueue->getMTLCommandQueue() retain];	// retained
+	if (mvkOSVersion() >= kMinOSVersionMTLCaptureScope) {
+		_mtlCaptureScope = [[MTLCaptureManager sharedCaptureManager] newCaptureScopeWithCommandQueue: _mtlQueue];	// retained
+		_mtlCaptureScope.label = @((mvkQueue->getName() + "-" + purpose).c_str());
+	}
+}
+
+MVKGPUCaptureScope::~MVKGPUCaptureScope() {
+	[_mtlCaptureScope release];
+	[_mtlQueue release];
+}
diff --git a/MoltenVK/MoltenVK/Utility/MVKFoundation.h b/MoltenVK/MoltenVK/Utility/MVKFoundation.h
index 090377f..2e1ae3e 100644
--- a/MoltenVK/MoltenVK/Utility/MVKFoundation.h
+++ b/MoltenVK/MoltenVK/Utility/MVKFoundation.h
@@ -164,35 +164,44 @@
 }
 
 /**
- * Aligns the specified bytes reference to the specified alignment, and returns the
- * aligned value, which will be equal to or greater than the specified reference.
+ * Aligns the byte reference to the specified alignment, and returns the aligned value,
+ * which will be greater than or equal to the reference if alignDown is false, or less
+ * than or equal to the reference if alignDown is true.
  *
- * This is a low level utility method. Usually you will use the convenience methods
- * mvkAlignAddress and mvkAlignByteOffset to align addresses and offsets respectively.
+ * This is a low level utility method. Usually you will use the convenience functions
+ * mvkAlignAddress() and mvkAlignByteOffset() to align addresses and offsets respectively.
  */
-static inline uintptr_t mvkAlignByteRef(uintptr_t byteRef, uintptr_t byteAlignment) {
+static inline uintptr_t mvkAlignByteRef(uintptr_t byteRef, uintptr_t byteAlignment, bool alignDown = false) {
 	if (byteAlignment == 0) { return byteRef; }
 
 	MVKAssert(mvkIsPowerOfTwo(byteAlignment), "Byte alignment %lu is not a power-of-two value.", byteAlignment);
 
 	uintptr_t mask = byteAlignment - 1;
-	return (byteRef + mask) & ~mask;
+	uintptr_t alignedRef = (byteRef + mask) & ~mask;
+
+	if (alignDown && (alignedRef > byteRef)) {
+		alignedRef -= byteAlignment;
+	}
+
+	return alignedRef;
 }
 
 /**
- * Aligns the specified memory address to the specified byte alignment. The memory address
- * returned by this function will be equal to or greater than the specified address.
+ * Aligns the memory address to the specified byte alignment, and returns the aligned address,
+ * which will be greater than or equal to the original address if alignDown is false, or less
+ * than or equal to the original address if alignDown is true.
  */
-static inline void* mvkAlignAddress(void* address, uintptr_t byteAlignment) {
-	return (void*)mvkAlignByteRef((uintptr_t)address, byteAlignment);
+static inline void* mvkAlignAddress(void* address, uintptr_t byteAlignment, bool alignDown = false) {
+	return (void*)mvkAlignByteRef((uintptr_t)address, byteAlignment, alignDown);
 }
 
 /**
- * Aligns the specified byte offset to the specified byte alignment. The byte offset
- * returned by this function will be equal to or greater than the specified byte offset.
+ * Aligns the byte offset to the specified byte alignment, and returns the aligned offset,
+ * which will be greater than or equal to the original offset if alignDown is false, or less
+ * than or equal to the original offset if alignDown is true.
  */
-static inline uintptr_t mvkAlignByteOffset(uintptr_t byteOffset, uintptr_t byteAlignment) {
-	return mvkAlignByteRef(byteOffset, byteAlignment);
+static inline uintptr_t mvkAlignByteOffset(uintptr_t byteOffset, uintptr_t byteAlignment, bool alignDown = false) {
+	return mvkAlignByteRef(byteOffset, byteAlignment, alignDown);
 }
 
 /**
@@ -255,6 +264,12 @@
 #pragma mark -
 #pragma mark Template functions
 
+/** Returns whether the value will fit inside the numeric type. */
+template<typename T, typename Tval>
+const bool mvkFits(const Tval& val) {
+	return val <= std::numeric_limits<T>::max();
+}
+
 /** Clamps the value between the lower and upper bounds, inclusive. */
 template<typename T>
 const T& mvkClamp(const T& val, const T& lower, const T& upper) {
diff --git a/MoltenVK/MoltenVK/Vulkan/mvk_datatypes.mm b/MoltenVK/MoltenVK/Vulkan/mvk_datatypes.mm
index 7e4e878..3e67654 100644
--- a/MoltenVK/MoltenVK/Vulkan/mvk_datatypes.mm
+++ b/MoltenVK/MoltenVK/Vulkan/mvk_datatypes.mm
@@ -594,9 +594,9 @@
     return mvkCeilingDivide(texelRowsPerLayer, formatDescForMTLPixelFormat(mtlFormat).blockTexelSize.height) * bytesPerRow;
 }
 
-MVK_PUBLIC_SYMBOL VkFormatProperties mvkVkFormatProperties(VkFormat vkFormat) {
+MVK_PUBLIC_SYMBOL VkFormatProperties mvkVkFormatProperties(VkFormat vkFormat, bool assumeGPUSupportsDefault) {
 	const MVKFormatDesc& fmtDesc = formatDescForVkFormat(vkFormat);
-	if (fmtDesc.isSupported()) {
+	if (assumeGPUSupportsDefault && fmtDesc.isSupported()) {
 		return fmtDesc.properties;
 	} else {
 		// If texture format is unsupported, vertex buffer format may still be.
diff --git a/MoltenVK/MoltenVK/Vulkan/vk_mvk_moltenvk.mm b/MoltenVK/MoltenVK/Vulkan/vk_mvk_moltenvk.mm
index 611a280..02e2be7 100644
--- a/MoltenVK/MoltenVK/Vulkan/vk_mvk_moltenvk.mm
+++ b/MoltenVK/MoltenVK/Vulkan/vk_mvk_moltenvk.mm
@@ -31,7 +31,7 @@
     MVKDeviceConfiguration*                     pConfiguration) {
 
     MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
-    if (pConfiguration) { *pConfiguration = mvkDev->_mvkConfig; }
+    if (pConfiguration) { *pConfiguration = *mvkDev->getMoltenVKConfiguration(); }
 }
 
 MVK_PUBLIC_SYMBOL VkResult vkSetMoltenVKDeviceConfigurationMVK(
@@ -39,7 +39,7 @@
     MVKDeviceConfiguration*                     pConfiguration) {
 
     MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
-    if (pConfiguration) { *(MVKDeviceConfiguration*)&mvkDev->_mvkConfig = *pConfiguration; }
+    if (pConfiguration) { mvkDev->setMoltenVKConfiguration(pConfiguration); }
     return VK_SUCCESS;
 }
 
diff --git a/MoltenVKShaderConverter/MoltenVKShaderConverter.xcodeproj/project.pbxproj b/MoltenVKShaderConverter/MoltenVKShaderConverter.xcodeproj/project.pbxproj
index f382a24..8b9529e 100644
--- a/MoltenVKShaderConverter/MoltenVKShaderConverter.xcodeproj/project.pbxproj
+++ b/MoltenVKShaderConverter/MoltenVKShaderConverter.xcodeproj/project.pbxproj
@@ -25,6 +25,180 @@
 		A928C91A1D0488DC00071B88 /* SPIRVConversion.h in Headers */ = {isa = PBXBuildFile; fileRef = A928C9171D0488DC00071B88 /* SPIRVConversion.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		A928C91B1D0488DC00071B88 /* SPIRVConversion.mm in Sources */ = {isa = PBXBuildFile; fileRef = A928C9181D0488DC00071B88 /* SPIRVConversion.mm */; };
 		A928C91C1D0488DC00071B88 /* SPIRVConversion.mm in Sources */ = {isa = PBXBuildFile; fileRef = A928C9181D0488DC00071B88 /* SPIRVConversion.mm */; };
+		A93E826E211F76F6001FEBD4 /* SPVRemapper.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8203211F76F5001FEBD4 /* SPVRemapper.h */; };
+		A93E826F211F76F6001FEBD4 /* SPVRemapper.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8203211F76F5001FEBD4 /* SPVRemapper.h */; };
+		A93E8270211F76F6001FEBD4 /* SpvBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8204211F76F5001FEBD4 /* SpvBuilder.h */; };
+		A93E8271211F76F6001FEBD4 /* SpvBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8204211F76F5001FEBD4 /* SpvBuilder.h */; };
+		A93E8272211F76F6001FEBD4 /* SpvPostProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8206211F76F5001FEBD4 /* SpvPostProcess.cpp */; };
+		A93E8273211F76F6001FEBD4 /* SpvPostProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8206211F76F5001FEBD4 /* SpvPostProcess.cpp */; };
+		A93E8274211F76F6001FEBD4 /* InReadableOrder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8207211F76F5001FEBD4 /* InReadableOrder.cpp */; };
+		A93E8275211F76F6001FEBD4 /* InReadableOrder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8207211F76F5001FEBD4 /* InReadableOrder.cpp */; };
+		A93E8276211F76F6001FEBD4 /* GLSL.ext.AMD.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8208211F76F5001FEBD4 /* GLSL.ext.AMD.h */; };
+		A93E8277211F76F6001FEBD4 /* GLSL.ext.AMD.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8208211F76F5001FEBD4 /* GLSL.ext.AMD.h */; };
+		A93E8278211F76F6001FEBD4 /* doc.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8209211F76F5001FEBD4 /* doc.h */; };
+		A93E8279211F76F6001FEBD4 /* doc.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8209211F76F5001FEBD4 /* doc.h */; };
+		A93E827A211F76F6001FEBD4 /* spirv.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A93E820A211F76F5001FEBD4 /* spirv.hpp */; };
+		A93E827B211F76F6001FEBD4 /* spirv.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A93E820A211F76F5001FEBD4 /* spirv.hpp */; };
+		A93E827C211F76F6001FEBD4 /* SpvBuilder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E820B211F76F5001FEBD4 /* SpvBuilder.cpp */; };
+		A93E827D211F76F6001FEBD4 /* SpvBuilder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E820B211F76F5001FEBD4 /* SpvBuilder.cpp */; };
+		A93E827E211F76F6001FEBD4 /* GLSL.ext.EXT.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E820C211F76F6001FEBD4 /* GLSL.ext.EXT.h */; };
+		A93E827F211F76F6001FEBD4 /* GLSL.ext.EXT.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E820C211F76F6001FEBD4 /* GLSL.ext.EXT.h */; };
+		A93E8280211F76F6001FEBD4 /* GLSL.ext.KHR.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E820D211F76F6001FEBD4 /* GLSL.ext.KHR.h */; };
+		A93E8281211F76F6001FEBD4 /* GLSL.ext.KHR.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E820D211F76F6001FEBD4 /* GLSL.ext.KHR.h */; };
+		A93E8282211F76F6001FEBD4 /* GLSL.ext.NV.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E820E211F76F6001FEBD4 /* GLSL.ext.NV.h */; };
+		A93E8283211F76F6001FEBD4 /* GLSL.ext.NV.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E820E211F76F6001FEBD4 /* GLSL.ext.NV.h */; };
+		A93E8284211F76F6001FEBD4 /* GlslangToSpv.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E820F211F76F6001FEBD4 /* GlslangToSpv.cpp */; };
+		A93E8285211F76F6001FEBD4 /* GlslangToSpv.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E820F211F76F6001FEBD4 /* GlslangToSpv.cpp */; };
+		A93E8286211F76F6001FEBD4 /* spvIR.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8210211F76F6001FEBD4 /* spvIR.h */; };
+		A93E8287211F76F6001FEBD4 /* spvIR.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8210211F76F6001FEBD4 /* spvIR.h */; };
+		A93E8288211F76F6001FEBD4 /* bitutils.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8211211F76F6001FEBD4 /* bitutils.h */; };
+		A93E8289211F76F6001FEBD4 /* bitutils.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8211211F76F6001FEBD4 /* bitutils.h */; };
+		A93E828A211F76F6001FEBD4 /* disassemble.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8212211F76F6001FEBD4 /* disassemble.h */; };
+		A93E828B211F76F6001FEBD4 /* disassemble.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8212211F76F6001FEBD4 /* disassemble.h */; };
+		A93E828C211F76F6001FEBD4 /* GlslangToSpv.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8213211F76F6001FEBD4 /* GlslangToSpv.h */; };
+		A93E828D211F76F6001FEBD4 /* GlslangToSpv.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8213211F76F6001FEBD4 /* GlslangToSpv.h */; };
+		A93E828E211F76F6001FEBD4 /* GLSL.std.450.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8214211F76F6001FEBD4 /* GLSL.std.450.h */; };
+		A93E828F211F76F6001FEBD4 /* GLSL.std.450.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8214211F76F6001FEBD4 /* GLSL.std.450.h */; };
+		A93E8290211F76F6001FEBD4 /* SPVRemapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8215211F76F6001FEBD4 /* SPVRemapper.cpp */; };
+		A93E8291211F76F6001FEBD4 /* SPVRemapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8215211F76F6001FEBD4 /* SPVRemapper.cpp */; };
+		A93E8292211F76F6001FEBD4 /* Logger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8216211F76F6001FEBD4 /* Logger.cpp */; };
+		A93E8293211F76F6001FEBD4 /* Logger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8216211F76F6001FEBD4 /* Logger.cpp */; };
+		A93E8294211F76F6001FEBD4 /* hex_float.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8217211F76F6001FEBD4 /* hex_float.h */; };
+		A93E8295211F76F6001FEBD4 /* hex_float.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8217211F76F6001FEBD4 /* hex_float.h */; };
+		A93E8296211F76F6001FEBD4 /* Logger.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8218211F76F6001FEBD4 /* Logger.h */; };
+		A93E8297211F76F6001FEBD4 /* Logger.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8218211F76F6001FEBD4 /* Logger.h */; };
+		A93E8298211F76F6001FEBD4 /* doc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8219211F76F6001FEBD4 /* doc.cpp */; };
+		A93E8299211F76F6001FEBD4 /* doc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8219211F76F6001FEBD4 /* doc.cpp */; };
+		A93E829A211F76F6001FEBD4 /* disassemble.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E821A211F76F6001FEBD4 /* disassemble.cpp */; };
+		A93E829B211F76F6001FEBD4 /* disassemble.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E821A211F76F6001FEBD4 /* disassemble.cpp */; };
+		A93E829C211F76F6001FEBD4 /* ossource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E821F211F76F6001FEBD4 /* ossource.cpp */; };
+		A93E829D211F76F6001FEBD4 /* ossource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E821F211F76F6001FEBD4 /* ossource.cpp */; };
+		A93E829E211F76F6001FEBD4 /* osinclude.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8221211F76F6001FEBD4 /* osinclude.h */; };
+		A93E829F211F76F6001FEBD4 /* osinclude.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8221211F76F6001FEBD4 /* osinclude.h */; };
+		A93E82A4211F76F6001FEBD4 /* ResourceLimits.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8227211F76F6001FEBD4 /* ResourceLimits.h */; };
+		A93E82A5211F76F6001FEBD4 /* ResourceLimits.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8227211F76F6001FEBD4 /* ResourceLimits.h */; };
+		A93E82A6211F76F6001FEBD4 /* Types.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8228211F76F6001FEBD4 /* Types.h */; };
+		A93E82A7211F76F6001FEBD4 /* Types.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8228211F76F6001FEBD4 /* Types.h */; };
+		A93E82A8211F76F6001FEBD4 /* intermediate.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8229211F76F6001FEBD4 /* intermediate.h */; };
+		A93E82A9211F76F6001FEBD4 /* intermediate.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8229211F76F6001FEBD4 /* intermediate.h */; };
+		A93E82AA211F76F6001FEBD4 /* BaseTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E822A211F76F6001FEBD4 /* BaseTypes.h */; };
+		A93E82AB211F76F6001FEBD4 /* BaseTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E822A211F76F6001FEBD4 /* BaseTypes.h */; };
+		A93E82AC211F76F6001FEBD4 /* revision.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E822B211F76F6001FEBD4 /* revision.h */; };
+		A93E82AD211F76F6001FEBD4 /* revision.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E822B211F76F6001FEBD4 /* revision.h */; };
+		A93E82AE211F76F6001FEBD4 /* InitializeGlobals.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E822C211F76F6001FEBD4 /* InitializeGlobals.h */; };
+		A93E82AF211F76F6001FEBD4 /* InitializeGlobals.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E822C211F76F6001FEBD4 /* InitializeGlobals.h */; };
+		A93E82B0211F76F6001FEBD4 /* ShHandle.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E822D211F76F6001FEBD4 /* ShHandle.h */; };
+		A93E82B1211F76F6001FEBD4 /* ShHandle.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E822D211F76F6001FEBD4 /* ShHandle.h */; };
+		A93E82B2211F76F6001FEBD4 /* arrays.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E822E211F76F6001FEBD4 /* arrays.h */; };
+		A93E82B3211F76F6001FEBD4 /* arrays.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E822E211F76F6001FEBD4 /* arrays.h */; };
+		A93E82B4211F76F6001FEBD4 /* Common.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E822F211F76F6001FEBD4 /* Common.h */; };
+		A93E82B5211F76F6001FEBD4 /* Common.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E822F211F76F6001FEBD4 /* Common.h */; };
+		A93E82B6211F76F6001FEBD4 /* ConstantUnion.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8231211F76F6001FEBD4 /* ConstantUnion.h */; };
+		A93E82B7211F76F6001FEBD4 /* ConstantUnion.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8231211F76F6001FEBD4 /* ConstantUnion.h */; };
+		A93E82B8211F76F6001FEBD4 /* InfoSink.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8232211F76F6001FEBD4 /* InfoSink.h */; };
+		A93E82B9211F76F6001FEBD4 /* InfoSink.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8232211F76F6001FEBD4 /* InfoSink.h */; };
+		A93E82BA211F76F6001FEBD4 /* PoolAlloc.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8233211F76F6001FEBD4 /* PoolAlloc.h */; };
+		A93E82BB211F76F6001FEBD4 /* PoolAlloc.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8233211F76F6001FEBD4 /* PoolAlloc.h */; };
+		A93E82BC211F76F6001FEBD4 /* ParseHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8236211F76F6001FEBD4 /* ParseHelper.cpp */; };
+		A93E82BD211F76F6001FEBD4 /* ParseHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8236211F76F6001FEBD4 /* ParseHelper.cpp */; };
+		A93E82BE211F76F6001FEBD4 /* parseVersions.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8237211F76F6001FEBD4 /* parseVersions.h */; };
+		A93E82BF211F76F6001FEBD4 /* parseVersions.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8237211F76F6001FEBD4 /* parseVersions.h */; };
+		A93E82C0211F76F6001FEBD4 /* gl_types.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8238211F76F6001FEBD4 /* gl_types.h */; };
+		A93E82C1211F76F6001FEBD4 /* gl_types.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8238211F76F6001FEBD4 /* gl_types.h */; };
+		A93E82C2211F76F6001FEBD4 /* propagateNoContraction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8239211F76F6001FEBD4 /* propagateNoContraction.cpp */; };
+		A93E82C3211F76F6001FEBD4 /* propagateNoContraction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8239211F76F6001FEBD4 /* propagateNoContraction.cpp */; };
+		A93E82C4211F76F6001FEBD4 /* ScanContext.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E823A211F76F6001FEBD4 /* ScanContext.h */; };
+		A93E82C5211F76F6001FEBD4 /* ScanContext.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E823A211F76F6001FEBD4 /* ScanContext.h */; };
+		A93E82C6211F76F6001FEBD4 /* iomapper.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E823B211F76F6001FEBD4 /* iomapper.h */; };
+		A93E82C7211F76F6001FEBD4 /* iomapper.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E823B211F76F6001FEBD4 /* iomapper.h */; };
+		A93E82C8211F76F6001FEBD4 /* localintermediate.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E823C211F76F6001FEBD4 /* localintermediate.h */; };
+		A93E82C9211F76F6001FEBD4 /* localintermediate.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E823C211F76F6001FEBD4 /* localintermediate.h */; };
+		A93E82CA211F76F6001FEBD4 /* Scan.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E823D211F76F6001FEBD4 /* Scan.cpp */; };
+		A93E82CB211F76F6001FEBD4 /* Scan.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E823D211F76F6001FEBD4 /* Scan.cpp */; };
+		A93E82CE211F76F6001FEBD4 /* RemoveTree.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E823F211F76F6001FEBD4 /* RemoveTree.h */; };
+		A93E82CF211F76F6001FEBD4 /* RemoveTree.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E823F211F76F6001FEBD4 /* RemoveTree.h */; };
+		A93E82D0211F76F6001FEBD4 /* Initialize.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8240211F76F6001FEBD4 /* Initialize.cpp */; };
+		A93E82D1211F76F6001FEBD4 /* Initialize.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8240211F76F6001FEBD4 /* Initialize.cpp */; };
+		A93E82D2211F76F6001FEBD4 /* glslang_tab.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8241211F76F6001FEBD4 /* glslang_tab.cpp */; };
+		A93E82D3211F76F6001FEBD4 /* glslang_tab.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8241211F76F6001FEBD4 /* glslang_tab.cpp */; };
+		A93E82D4211F76F6001FEBD4 /* limits.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8242211F76F6001FEBD4 /* limits.cpp */; };
+		A93E82D5211F76F6001FEBD4 /* limits.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8242211F76F6001FEBD4 /* limits.cpp */; };
+		A93E82D6211F76F6001FEBD4 /* parseConst.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8243211F76F6001FEBD4 /* parseConst.cpp */; };
+		A93E82D7211F76F6001FEBD4 /* parseConst.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8243211F76F6001FEBD4 /* parseConst.cpp */; };
+		A93E82D8211F76F6001FEBD4 /* propagateNoContraction.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8244211F76F6001FEBD4 /* propagateNoContraction.h */; };
+		A93E82D9211F76F6001FEBD4 /* propagateNoContraction.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8244211F76F6001FEBD4 /* propagateNoContraction.h */; };
+		A93E82DA211F76F6001FEBD4 /* Versions.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8245211F76F6001FEBD4 /* Versions.h */; };
+		A93E82DB211F76F6001FEBD4 /* Versions.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8245211F76F6001FEBD4 /* Versions.h */; };
+		A93E82DC211F76F6001FEBD4 /* IntermTraverse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8246211F76F6001FEBD4 /* IntermTraverse.cpp */; };
+		A93E82DD211F76F6001FEBD4 /* IntermTraverse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8246211F76F6001FEBD4 /* IntermTraverse.cpp */; };
+		A93E82DE211F76F6001FEBD4 /* intermOut.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8247211F76F6001FEBD4 /* intermOut.cpp */; };
+		A93E82DF211F76F6001FEBD4 /* intermOut.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8247211F76F6001FEBD4 /* intermOut.cpp */; };
+		A93E82E0211F76F6001FEBD4 /* iomapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8248211F76F6001FEBD4 /* iomapper.cpp */; };
+		A93E82E1211F76F6001FEBD4 /* iomapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8248211F76F6001FEBD4 /* iomapper.cpp */; };
+		A93E82E2211F76F6001FEBD4 /* PoolAlloc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8249211F76F6001FEBD4 /* PoolAlloc.cpp */; };
+		A93E82E3211F76F6001FEBD4 /* PoolAlloc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8249211F76F6001FEBD4 /* PoolAlloc.cpp */; };
+		A93E82E4211F76F6001FEBD4 /* ShaderLang.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E824A211F76F6001FEBD4 /* ShaderLang.cpp */; };
+		A93E82E5211F76F6001FEBD4 /* ShaderLang.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E824A211F76F6001FEBD4 /* ShaderLang.cpp */; };
+		A93E82E6211F76F6001FEBD4 /* SymbolTable.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E824B211F76F6001FEBD4 /* SymbolTable.h */; };
+		A93E82E7211F76F6001FEBD4 /* SymbolTable.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E824B211F76F6001FEBD4 /* SymbolTable.h */; };
+		A93E82E8211F76F6001FEBD4 /* InfoSink.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E824C211F76F6001FEBD4 /* InfoSink.cpp */; };
+		A93E82E9211F76F6001FEBD4 /* InfoSink.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E824C211F76F6001FEBD4 /* InfoSink.cpp */; };
+		A93E82EA211F76F6001FEBD4 /* Intermediate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E824D211F76F6001FEBD4 /* Intermediate.cpp */; };
+		A93E82EB211F76F6001FEBD4 /* Intermediate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E824D211F76F6001FEBD4 /* Intermediate.cpp */; };
+		A93E82EC211F76F6001FEBD4 /* SymbolTable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E824E211F76F6001FEBD4 /* SymbolTable.cpp */; };
+		A93E82ED211F76F6001FEBD4 /* SymbolTable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E824E211F76F6001FEBD4 /* SymbolTable.cpp */; };
+		A93E82EE211F76F6001FEBD4 /* glslang_tab.cpp.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E824F211F76F6001FEBD4 /* glslang_tab.cpp.h */; };
+		A93E82EF211F76F6001FEBD4 /* glslang_tab.cpp.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E824F211F76F6001FEBD4 /* glslang_tab.cpp.h */; };
+		A93E82F0211F76F6001FEBD4 /* LiveTraverser.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8250211F76F6001FEBD4 /* LiveTraverser.h */; };
+		A93E82F1211F76F6001FEBD4 /* LiveTraverser.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8250211F76F6001FEBD4 /* LiveTraverser.h */; };
+		A93E82F2211F76F6001FEBD4 /* Initialize.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8251211F76F6001FEBD4 /* Initialize.h */; };
+		A93E82F3211F76F6001FEBD4 /* Initialize.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8251211F76F6001FEBD4 /* Initialize.h */; };
+		A93E82F4211F76F6001FEBD4 /* attribute.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8252211F76F6001FEBD4 /* attribute.cpp */; };
+		A93E82F5211F76F6001FEBD4 /* attribute.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8252211F76F6001FEBD4 /* attribute.cpp */; };
+		A93E82F6211F76F6001FEBD4 /* reflection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8253211F76F6001FEBD4 /* reflection.cpp */; };
+		A93E82F7211F76F6001FEBD4 /* reflection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8253211F76F6001FEBD4 /* reflection.cpp */; };
+		A93E82F8211F76F6001FEBD4 /* RemoveTree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8254211F76F6001FEBD4 /* RemoveTree.cpp */; };
+		A93E82F9211F76F6001FEBD4 /* RemoveTree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8254211F76F6001FEBD4 /* RemoveTree.cpp */; };
+		A93E82FA211F76F6001FEBD4 /* attribute.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8255211F76F6001FEBD4 /* attribute.h */; };
+		A93E82FB211F76F6001FEBD4 /* attribute.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8255211F76F6001FEBD4 /* attribute.h */; };
+		A93E82FC211F76F6001FEBD4 /* Versions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8256211F76F6001FEBD4 /* Versions.cpp */; };
+		A93E82FD211F76F6001FEBD4 /* Versions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8256211F76F6001FEBD4 /* Versions.cpp */; };
+		A93E82FE211F76F6001FEBD4 /* Constant.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8257211F76F6001FEBD4 /* Constant.cpp */; };
+		A93E82FF211F76F6001FEBD4 /* Constant.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8257211F76F6001FEBD4 /* Constant.cpp */; };
+		A93E8300211F76F6001FEBD4 /* linkValidate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8258211F76F6001FEBD4 /* linkValidate.cpp */; };
+		A93E8301211F76F6001FEBD4 /* linkValidate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8258211F76F6001FEBD4 /* linkValidate.cpp */; };
+		A93E8302211F76F6001FEBD4 /* ParseHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8259211F76F6001FEBD4 /* ParseHelper.h */; };
+		A93E8303211F76F6001FEBD4 /* ParseHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8259211F76F6001FEBD4 /* ParseHelper.h */; };
+		A93E8304211F76F6001FEBD4 /* PpAtom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E825B211F76F6001FEBD4 /* PpAtom.cpp */; };
+		A93E8305211F76F6001FEBD4 /* PpAtom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E825B211F76F6001FEBD4 /* PpAtom.cpp */; };
+		A93E8306211F76F6001FEBD4 /* PpTokens.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E825C211F76F6001FEBD4 /* PpTokens.h */; };
+		A93E8307211F76F6001FEBD4 /* PpTokens.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E825C211F76F6001FEBD4 /* PpTokens.h */; };
+		A93E8308211F76F6001FEBD4 /* Pp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E825D211F76F6001FEBD4 /* Pp.cpp */; };
+		A93E8309211F76F6001FEBD4 /* Pp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E825D211F76F6001FEBD4 /* Pp.cpp */; };
+		A93E830A211F76F6001FEBD4 /* PpContext.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E825E211F76F6001FEBD4 /* PpContext.h */; };
+		A93E830B211F76F6001FEBD4 /* PpContext.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E825E211F76F6001FEBD4 /* PpContext.h */; };
+		A93E830C211F76F6001FEBD4 /* PpTokens.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E825F211F76F6001FEBD4 /* PpTokens.cpp */; };
+		A93E830D211F76F6001FEBD4 /* PpTokens.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E825F211F76F6001FEBD4 /* PpTokens.cpp */; };
+		A93E830E211F76F6001FEBD4 /* PpContext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8260211F76F6001FEBD4 /* PpContext.cpp */; };
+		A93E830F211F76F6001FEBD4 /* PpContext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8260211F76F6001FEBD4 /* PpContext.cpp */; };
+		A93E8310211F76F6001FEBD4 /* PpScanner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8261211F76F6001FEBD4 /* PpScanner.cpp */; };
+		A93E8311211F76F6001FEBD4 /* PpScanner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8261211F76F6001FEBD4 /* PpScanner.cpp */; };
+		A93E8312211F76F6001FEBD4 /* ParseContextBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8262211F76F6001FEBD4 /* ParseContextBase.cpp */; };
+		A93E8313211F76F6001FEBD4 /* ParseContextBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8262211F76F6001FEBD4 /* ParseContextBase.cpp */; };
+		A93E8314211F76F6001FEBD4 /* reflection.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8263211F76F6001FEBD4 /* reflection.h */; };
+		A93E8315211F76F6001FEBD4 /* reflection.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8263211F76F6001FEBD4 /* reflection.h */; };
+		A93E8316211F76F6001FEBD4 /* Scan.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8264211F76F6001FEBD4 /* Scan.h */; };
+		A93E8317211F76F6001FEBD4 /* Scan.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8264211F76F6001FEBD4 /* Scan.h */; };
+		A93E8318211F76F6001FEBD4 /* ShaderLang.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8266211F76F6001FEBD4 /* ShaderLang.h */; };
+		A93E8319211F76F6001FEBD4 /* ShaderLang.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E8266211F76F6001FEBD4 /* ShaderLang.h */; };
+		A93E831A211F76F6001FEBD4 /* CodeGen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8268211F76F6001FEBD4 /* CodeGen.cpp */; };
+		A93E831B211F76F6001FEBD4 /* CodeGen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8268211F76F6001FEBD4 /* CodeGen.cpp */; };
+		A93E831C211F76F6001FEBD4 /* Link.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8269211F76F6001FEBD4 /* Link.cpp */; };
+		A93E831D211F76F6001FEBD4 /* Link.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E8269211F76F6001FEBD4 /* Link.cpp */; };
+		A93E831E211F76F6001FEBD4 /* InitializeDll.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E826C211F76F6001FEBD4 /* InitializeDll.h */; };
+		A93E831F211F76F6001FEBD4 /* InitializeDll.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E826C211F76F6001FEBD4 /* InitializeDll.h */; };
+		A93E8320211F76F6001FEBD4 /* InitializeDll.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E826D211F76F6001FEBD4 /* InitializeDll.cpp */; };
+		A93E8321211F76F6001FEBD4 /* InitializeDll.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E826D211F76F6001FEBD4 /* InitializeDll.cpp */; };
 		A95096BB2003D00300F10950 /* FileSupport.mm in Sources */ = {isa = PBXBuildFile; fileRef = A925B70A1C7754B2006E7ECD /* FileSupport.mm */; };
 		A95096BC2003D00300F10950 /* FileSupport.mm in Sources */ = {isa = PBXBuildFile; fileRef = A925B70A1C7754B2006E7ECD /* FileSupport.mm */; };
 		A95096BF2003D32400F10950 /* DirectorySupport.mm in Sources */ = {isa = PBXBuildFile; fileRef = A95096BD2003D32400F10950 /* DirectorySupport.mm */; };
@@ -596,178 +770,6 @@
 		A99E10F8210E5F0B00D9968F /* validation_state.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A99E0ECB210E5F0A00D9968F /* validation_state.cpp */; };
 		A99E10F9210E5F0B00D9968F /* decoration.h in Headers */ = {isa = PBXBuildFile; fileRef = A99E0ECC210E5F0A00D9968F /* decoration.h */; };
 		A99E10FA210E5F0B00D9968F /* decoration.h in Headers */ = {isa = PBXBuildFile; fileRef = A99E0ECC210E5F0A00D9968F /* decoration.h */; };
-		A9A5782B2054A0E20072F392 /* SPVRemapper.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577C12054A0E20072F392 /* SPVRemapper.h */; };
-		A9A5782C2054A0E20072F392 /* SPVRemapper.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577C12054A0E20072F392 /* SPVRemapper.h */; };
-		A9A5782D2054A0E20072F392 /* SpvBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577C22054A0E20072F392 /* SpvBuilder.h */; };
-		A9A5782E2054A0E20072F392 /* SpvBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577C22054A0E20072F392 /* SpvBuilder.h */; };
-		A9A5782F2054A0E20072F392 /* InReadableOrder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A577C42054A0E20072F392 /* InReadableOrder.cpp */; };
-		A9A578302054A0E20072F392 /* InReadableOrder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A577C42054A0E20072F392 /* InReadableOrder.cpp */; };
-		A9A578312054A0E20072F392 /* GLSL.ext.AMD.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577C52054A0E20072F392 /* GLSL.ext.AMD.h */; };
-		A9A578322054A0E20072F392 /* GLSL.ext.AMD.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577C52054A0E20072F392 /* GLSL.ext.AMD.h */; };
-		A9A578332054A0E20072F392 /* doc.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577C62054A0E20072F392 /* doc.h */; };
-		A9A578342054A0E20072F392 /* doc.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577C62054A0E20072F392 /* doc.h */; };
-		A9A578352054A0E20072F392 /* spirv.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A9A577C72054A0E20072F392 /* spirv.hpp */; };
-		A9A578362054A0E20072F392 /* spirv.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A9A577C72054A0E20072F392 /* spirv.hpp */; };
-		A9A578372054A0E20072F392 /* SpvBuilder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A577C82054A0E20072F392 /* SpvBuilder.cpp */; };
-		A9A578382054A0E20072F392 /* SpvBuilder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A577C82054A0E20072F392 /* SpvBuilder.cpp */; };
-		A9A578392054A0E20072F392 /* GLSL.ext.EXT.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577C92054A0E20072F392 /* GLSL.ext.EXT.h */; };
-		A9A5783A2054A0E20072F392 /* GLSL.ext.EXT.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577C92054A0E20072F392 /* GLSL.ext.EXT.h */; };
-		A9A5783B2054A0E20072F392 /* GLSL.ext.KHR.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577CA2054A0E20072F392 /* GLSL.ext.KHR.h */; };
-		A9A5783C2054A0E20072F392 /* GLSL.ext.KHR.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577CA2054A0E20072F392 /* GLSL.ext.KHR.h */; };
-		A9A5783D2054A0E20072F392 /* GLSL.ext.NV.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577CB2054A0E20072F392 /* GLSL.ext.NV.h */; };
-		A9A5783E2054A0E20072F392 /* GLSL.ext.NV.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577CB2054A0E20072F392 /* GLSL.ext.NV.h */; };
-		A9A5783F2054A0E20072F392 /* GlslangToSpv.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A577CC2054A0E20072F392 /* GlslangToSpv.cpp */; };
-		A9A578402054A0E20072F392 /* GlslangToSpv.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A577CC2054A0E20072F392 /* GlslangToSpv.cpp */; };
-		A9A578412054A0E20072F392 /* spvIR.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577CD2054A0E20072F392 /* spvIR.h */; };
-		A9A578422054A0E20072F392 /* spvIR.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577CD2054A0E20072F392 /* spvIR.h */; };
-		A9A578432054A0E20072F392 /* bitutils.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577CE2054A0E20072F392 /* bitutils.h */; };
-		A9A578442054A0E20072F392 /* bitutils.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577CE2054A0E20072F392 /* bitutils.h */; };
-		A9A578452054A0E20072F392 /* disassemble.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577CF2054A0E20072F392 /* disassemble.h */; };
-		A9A578462054A0E20072F392 /* disassemble.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577CF2054A0E20072F392 /* disassemble.h */; };
-		A9A578472054A0E20072F392 /* GlslangToSpv.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577D02054A0E20072F392 /* GlslangToSpv.h */; };
-		A9A578482054A0E20072F392 /* GlslangToSpv.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577D02054A0E20072F392 /* GlslangToSpv.h */; };
-		A9A578492054A0E20072F392 /* GLSL.std.450.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577D12054A0E20072F392 /* GLSL.std.450.h */; };
-		A9A5784A2054A0E20072F392 /* GLSL.std.450.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577D12054A0E20072F392 /* GLSL.std.450.h */; };
-		A9A5784B2054A0E20072F392 /* SPVRemapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A577D22054A0E20072F392 /* SPVRemapper.cpp */; };
-		A9A5784C2054A0E20072F392 /* SPVRemapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A577D22054A0E20072F392 /* SPVRemapper.cpp */; };
-		A9A5784D2054A0E20072F392 /* Logger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A577D32054A0E20072F392 /* Logger.cpp */; };
-		A9A5784E2054A0E20072F392 /* Logger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A577D32054A0E20072F392 /* Logger.cpp */; };
-		A9A5784F2054A0E20072F392 /* hex_float.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577D42054A0E20072F392 /* hex_float.h */; };
-		A9A578502054A0E20072F392 /* hex_float.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577D42054A0E20072F392 /* hex_float.h */; };
-		A9A578512054A0E20072F392 /* Logger.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577D52054A0E20072F392 /* Logger.h */; };
-		A9A578522054A0E20072F392 /* Logger.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577D52054A0E20072F392 /* Logger.h */; };
-		A9A578532054A0E20072F392 /* doc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A577D62054A0E20072F392 /* doc.cpp */; };
-		A9A578542054A0E20072F392 /* doc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A577D62054A0E20072F392 /* doc.cpp */; };
-		A9A578552054A0E20072F392 /* disassemble.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A577D72054A0E20072F392 /* disassemble.cpp */; };
-		A9A578562054A0E20072F392 /* disassemble.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A577D72054A0E20072F392 /* disassemble.cpp */; };
-		A9A578572054A0E20072F392 /* ossource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A577DC2054A0E20072F392 /* ossource.cpp */; };
-		A9A578582054A0E20072F392 /* ossource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A577DC2054A0E20072F392 /* ossource.cpp */; };
-		A9A578592054A0E20072F392 /* osinclude.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577DE2054A0E20072F392 /* osinclude.h */; };
-		A9A5785A2054A0E20072F392 /* osinclude.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577DE2054A0E20072F392 /* osinclude.h */; };
-		A9A5785F2054A0E20072F392 /* ResourceLimits.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577E42054A0E20072F392 /* ResourceLimits.h */; };
-		A9A578602054A0E20072F392 /* ResourceLimits.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577E42054A0E20072F392 /* ResourceLimits.h */; };
-		A9A578612054A0E20072F392 /* Types.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577E52054A0E20072F392 /* Types.h */; };
-		A9A578622054A0E20072F392 /* Types.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577E52054A0E20072F392 /* Types.h */; };
-		A9A578632054A0E20072F392 /* intermediate.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577E62054A0E20072F392 /* intermediate.h */; };
-		A9A578642054A0E20072F392 /* intermediate.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577E62054A0E20072F392 /* intermediate.h */; };
-		A9A578652054A0E20072F392 /* BaseTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577E72054A0E20072F392 /* BaseTypes.h */; };
-		A9A578662054A0E20072F392 /* BaseTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577E72054A0E20072F392 /* BaseTypes.h */; };
-		A9A578672054A0E20072F392 /* revision.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577E82054A0E20072F392 /* revision.h */; };
-		A9A578682054A0E20072F392 /* revision.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577E82054A0E20072F392 /* revision.h */; };
-		A9A578692054A0E20072F392 /* InitializeGlobals.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577E92054A0E20072F392 /* InitializeGlobals.h */; };
-		A9A5786A2054A0E20072F392 /* InitializeGlobals.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577E92054A0E20072F392 /* InitializeGlobals.h */; };
-		A9A5786B2054A0E20072F392 /* ShHandle.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577EA2054A0E20072F392 /* ShHandle.h */; };
-		A9A5786C2054A0E20072F392 /* ShHandle.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577EA2054A0E20072F392 /* ShHandle.h */; };
-		A9A5786D2054A0E20072F392 /* arrays.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577EB2054A0E20072F392 /* arrays.h */; };
-		A9A5786E2054A0E20072F392 /* arrays.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577EB2054A0E20072F392 /* arrays.h */; };
-		A9A5786F2054A0E20072F392 /* Common.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577EC2054A0E20072F392 /* Common.h */; };
-		A9A578702054A0E20072F392 /* Common.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577EC2054A0E20072F392 /* Common.h */; };
-		A9A578712054A0E20072F392 /* ConstantUnion.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577EE2054A0E20072F392 /* ConstantUnion.h */; };
-		A9A578722054A0E20072F392 /* ConstantUnion.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577EE2054A0E20072F392 /* ConstantUnion.h */; };
-		A9A578732054A0E20072F392 /* InfoSink.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577EF2054A0E20072F392 /* InfoSink.h */; };
-		A9A578742054A0E20072F392 /* InfoSink.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577EF2054A0E20072F392 /* InfoSink.h */; };
-		A9A578752054A0E20072F392 /* PoolAlloc.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577F02054A0E20072F392 /* PoolAlloc.h */; };
-		A9A578762054A0E20072F392 /* PoolAlloc.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577F02054A0E20072F392 /* PoolAlloc.h */; };
-		A9A578772054A0E20072F392 /* ParseHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A577F32054A0E20072F392 /* ParseHelper.cpp */; };
-		A9A578782054A0E20072F392 /* ParseHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A577F32054A0E20072F392 /* ParseHelper.cpp */; };
-		A9A578792054A0E20072F392 /* parseVersions.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577F42054A0E20072F392 /* parseVersions.h */; };
-		A9A5787A2054A0E20072F392 /* parseVersions.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577F42054A0E20072F392 /* parseVersions.h */; };
-		A9A5787B2054A0E20072F392 /* gl_types.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577F52054A0E20072F392 /* gl_types.h */; };
-		A9A5787C2054A0E20072F392 /* gl_types.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577F52054A0E20072F392 /* gl_types.h */; };
-		A9A5787D2054A0E20072F392 /* propagateNoContraction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A577F62054A0E20072F392 /* propagateNoContraction.cpp */; };
-		A9A5787E2054A0E20072F392 /* propagateNoContraction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A577F62054A0E20072F392 /* propagateNoContraction.cpp */; };
-		A9A5787F2054A0E20072F392 /* ScanContext.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577F72054A0E20072F392 /* ScanContext.h */; };
-		A9A578802054A0E20072F392 /* ScanContext.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577F72054A0E20072F392 /* ScanContext.h */; };
-		A9A578812054A0E20072F392 /* iomapper.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577F82054A0E20072F392 /* iomapper.h */; };
-		A9A578822054A0E20072F392 /* iomapper.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577F82054A0E20072F392 /* iomapper.h */; };
-		A9A578832054A0E20072F392 /* localintermediate.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577F92054A0E20072F392 /* localintermediate.h */; };
-		A9A578842054A0E20072F392 /* localintermediate.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577F92054A0E20072F392 /* localintermediate.h */; };
-		A9A578852054A0E20072F392 /* Scan.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A577FA2054A0E20072F392 /* Scan.cpp */; };
-		A9A578862054A0E20072F392 /* Scan.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A577FA2054A0E20072F392 /* Scan.cpp */; };
-		A9A578892054A0E20072F392 /* RemoveTree.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577FC2054A0E20072F392 /* RemoveTree.h */; };
-		A9A5788A2054A0E20072F392 /* RemoveTree.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A577FC2054A0E20072F392 /* RemoveTree.h */; };
-		A9A5788B2054A0E20072F392 /* Initialize.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A577FD2054A0E20072F392 /* Initialize.cpp */; };
-		A9A5788C2054A0E20072F392 /* Initialize.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A577FD2054A0E20072F392 /* Initialize.cpp */; };
-		A9A5788D2054A0E20072F392 /* glslang_tab.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A577FE2054A0E20072F392 /* glslang_tab.cpp */; };
-		A9A5788E2054A0E20072F392 /* glslang_tab.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A577FE2054A0E20072F392 /* glslang_tab.cpp */; };
-		A9A5788F2054A0E20072F392 /* limits.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A577FF2054A0E20072F392 /* limits.cpp */; };
-		A9A578902054A0E20072F392 /* limits.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A577FF2054A0E20072F392 /* limits.cpp */; };
-		A9A578912054A0E20072F392 /* parseConst.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A578002054A0E20072F392 /* parseConst.cpp */; };
-		A9A578922054A0E20072F392 /* parseConst.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A578002054A0E20072F392 /* parseConst.cpp */; };
-		A9A578932054A0E20072F392 /* propagateNoContraction.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A578012054A0E20072F392 /* propagateNoContraction.h */; };
-		A9A578942054A0E20072F392 /* propagateNoContraction.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A578012054A0E20072F392 /* propagateNoContraction.h */; };
-		A9A578952054A0E20072F392 /* Versions.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A578022054A0E20072F392 /* Versions.h */; };
-		A9A578962054A0E20072F392 /* Versions.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A578022054A0E20072F392 /* Versions.h */; };
-		A9A578972054A0E20072F392 /* IntermTraverse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A578032054A0E20072F392 /* IntermTraverse.cpp */; };
-		A9A578982054A0E20072F392 /* IntermTraverse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A578032054A0E20072F392 /* IntermTraverse.cpp */; };
-		A9A578992054A0E20072F392 /* intermOut.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A578042054A0E20072F392 /* intermOut.cpp */; };
-		A9A5789A2054A0E20072F392 /* intermOut.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A578042054A0E20072F392 /* intermOut.cpp */; };
-		A9A5789B2054A0E20072F392 /* iomapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A578052054A0E20072F392 /* iomapper.cpp */; };
-		A9A5789C2054A0E20072F392 /* iomapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A578052054A0E20072F392 /* iomapper.cpp */; };
-		A9A5789D2054A0E20072F392 /* PoolAlloc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A578062054A0E20072F392 /* PoolAlloc.cpp */; };
-		A9A5789E2054A0E20072F392 /* PoolAlloc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A578062054A0E20072F392 /* PoolAlloc.cpp */; };
-		A9A5789F2054A0E20072F392 /* ShaderLang.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A578072054A0E20072F392 /* ShaderLang.cpp */; };
-		A9A578A02054A0E20072F392 /* ShaderLang.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A578072054A0E20072F392 /* ShaderLang.cpp */; };
-		A9A578A12054A0E20072F392 /* SymbolTable.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A578082054A0E20072F392 /* SymbolTable.h */; };
-		A9A578A22054A0E20072F392 /* SymbolTable.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A578082054A0E20072F392 /* SymbolTable.h */; };
-		A9A578A32054A0E20072F392 /* InfoSink.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A578092054A0E20072F392 /* InfoSink.cpp */; };
-		A9A578A42054A0E20072F392 /* InfoSink.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A578092054A0E20072F392 /* InfoSink.cpp */; };
-		A9A578A52054A0E20072F392 /* Intermediate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A5780A2054A0E20072F392 /* Intermediate.cpp */; };
-		A9A578A62054A0E20072F392 /* Intermediate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A5780A2054A0E20072F392 /* Intermediate.cpp */; };
-		A9A578A72054A0E20072F392 /* SymbolTable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A5780B2054A0E20072F392 /* SymbolTable.cpp */; };
-		A9A578A82054A0E20072F392 /* SymbolTable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A5780B2054A0E20072F392 /* SymbolTable.cpp */; };
-		A9A578A92054A0E20072F392 /* glslang_tab.cpp.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A5780C2054A0E20072F392 /* glslang_tab.cpp.h */; };
-		A9A578AA2054A0E20072F392 /* glslang_tab.cpp.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A5780C2054A0E20072F392 /* glslang_tab.cpp.h */; };
-		A9A578AB2054A0E20072F392 /* LiveTraverser.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A5780D2054A0E20072F392 /* LiveTraverser.h */; };
-		A9A578AC2054A0E20072F392 /* LiveTraverser.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A5780D2054A0E20072F392 /* LiveTraverser.h */; };
-		A9A578AD2054A0E20072F392 /* Initialize.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A5780E2054A0E20072F392 /* Initialize.h */; };
-		A9A578AE2054A0E20072F392 /* Initialize.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A5780E2054A0E20072F392 /* Initialize.h */; };
-		A9A578AF2054A0E20072F392 /* attribute.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A5780F2054A0E20072F392 /* attribute.cpp */; };
-		A9A578B02054A0E20072F392 /* attribute.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A5780F2054A0E20072F392 /* attribute.cpp */; };
-		A9A578B12054A0E20072F392 /* reflection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A578102054A0E20072F392 /* reflection.cpp */; };
-		A9A578B22054A0E20072F392 /* reflection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A578102054A0E20072F392 /* reflection.cpp */; };
-		A9A578B32054A0E20072F392 /* RemoveTree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A578112054A0E20072F392 /* RemoveTree.cpp */; };
-		A9A578B42054A0E20072F392 /* RemoveTree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A578112054A0E20072F392 /* RemoveTree.cpp */; };
-		A9A578B52054A0E20072F392 /* attribute.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A578122054A0E20072F392 /* attribute.h */; };
-		A9A578B62054A0E20072F392 /* attribute.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A578122054A0E20072F392 /* attribute.h */; };
-		A9A578B72054A0E20072F392 /* Versions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A578132054A0E20072F392 /* Versions.cpp */; };
-		A9A578B82054A0E20072F392 /* Versions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A578132054A0E20072F392 /* Versions.cpp */; };
-		A9A578B92054A0E20072F392 /* Constant.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A578142054A0E20072F392 /* Constant.cpp */; };
-		A9A578BA2054A0E20072F392 /* Constant.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A578142054A0E20072F392 /* Constant.cpp */; };
-		A9A578BB2054A0E20072F392 /* linkValidate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A578152054A0E20072F392 /* linkValidate.cpp */; };
-		A9A578BC2054A0E20072F392 /* linkValidate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A578152054A0E20072F392 /* linkValidate.cpp */; };
-		A9A578BD2054A0E20072F392 /* ParseHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A578162054A0E20072F392 /* ParseHelper.h */; };
-		A9A578BE2054A0E20072F392 /* ParseHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A578162054A0E20072F392 /* ParseHelper.h */; };
-		A9A578BF2054A0E20072F392 /* PpAtom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A578182054A0E20072F392 /* PpAtom.cpp */; };
-		A9A578C02054A0E20072F392 /* PpAtom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A578182054A0E20072F392 /* PpAtom.cpp */; };
-		A9A578C12054A0E20072F392 /* PpTokens.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A578192054A0E20072F392 /* PpTokens.h */; };
-		A9A578C22054A0E20072F392 /* PpTokens.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A578192054A0E20072F392 /* PpTokens.h */; };
-		A9A578C32054A0E20072F392 /* Pp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A5781A2054A0E20072F392 /* Pp.cpp */; };
-		A9A578C42054A0E20072F392 /* Pp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A5781A2054A0E20072F392 /* Pp.cpp */; };
-		A9A578C52054A0E20072F392 /* PpContext.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A5781B2054A0E20072F392 /* PpContext.h */; };
-		A9A578C62054A0E20072F392 /* PpContext.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A5781B2054A0E20072F392 /* PpContext.h */; };
-		A9A578C72054A0E20072F392 /* PpTokens.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A5781C2054A0E20072F392 /* PpTokens.cpp */; };
-		A9A578C82054A0E20072F392 /* PpTokens.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A5781C2054A0E20072F392 /* PpTokens.cpp */; };
-		A9A578C92054A0E20072F392 /* PpContext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A5781D2054A0E20072F392 /* PpContext.cpp */; };
-		A9A578CA2054A0E20072F392 /* PpContext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A5781D2054A0E20072F392 /* PpContext.cpp */; };
-		A9A578CB2054A0E20072F392 /* PpScanner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A5781E2054A0E20072F392 /* PpScanner.cpp */; };
-		A9A578CC2054A0E20072F392 /* PpScanner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A5781E2054A0E20072F392 /* PpScanner.cpp */; };
-		A9A578CD2054A0E20072F392 /* ParseContextBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A5781F2054A0E20072F392 /* ParseContextBase.cpp */; };
-		A9A578CE2054A0E20072F392 /* ParseContextBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A5781F2054A0E20072F392 /* ParseContextBase.cpp */; };
-		A9A578CF2054A0E20072F392 /* reflection.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A578202054A0E20072F392 /* reflection.h */; };
-		A9A578D02054A0E20072F392 /* reflection.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A578202054A0E20072F392 /* reflection.h */; };
-		A9A578D12054A0E20072F392 /* Scan.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A578212054A0E20072F392 /* Scan.h */; };
-		A9A578D22054A0E20072F392 /* Scan.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A578212054A0E20072F392 /* Scan.h */; };
-		A9A578D32054A0E20072F392 /* ShaderLang.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A578232054A0E20072F392 /* ShaderLang.h */; };
-		A9A578D42054A0E20072F392 /* ShaderLang.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A578232054A0E20072F392 /* ShaderLang.h */; };
-		A9A578D52054A0E20072F392 /* CodeGen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A578252054A0E20072F392 /* CodeGen.cpp */; };
-		A9A578D62054A0E20072F392 /* CodeGen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A578252054A0E20072F392 /* CodeGen.cpp */; };
-		A9A578D72054A0E20072F392 /* Link.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A578262054A0E20072F392 /* Link.cpp */; };
-		A9A578D82054A0E20072F392 /* Link.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A578262054A0E20072F392 /* Link.cpp */; };
-		A9A578D92054A0E20072F392 /* InitializeDll.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A578292054A0E20072F392 /* InitializeDll.h */; };
-		A9A578DA2054A0E20072F392 /* InitializeDll.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A578292054A0E20072F392 /* InitializeDll.h */; };
-		A9A578DB2054A0E20072F392 /* InitializeDll.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A5782A2054A0E20072F392 /* InitializeDll.cpp */; };
-		A9A578DC2054A0E20072F392 /* InitializeDll.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A5782A2054A0E20072F392 /* InitializeDll.cpp */; };
 		A9AB19971CB5B5A80001E7F9 /* spirv_common.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A9AB19901CB5B5A80001E7F9 /* spirv_common.hpp */; };
 		A9AB19981CB5B5A80001E7F9 /* spirv_common.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A9AB19901CB5B5A80001E7F9 /* spirv_common.hpp */; };
 		A9AB19991CB5B5A80001E7F9 /* spirv_cross.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9AB19911CB5B5A80001E7F9 /* spirv_cross.cpp */; };
@@ -824,6 +826,99 @@
 		A928C9181D0488DC00071B88 /* SPIRVConversion.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = SPIRVConversion.mm; sourceTree = "<group>"; };
 		A93903BF1C57E9D700FE90DC /* MoltenVKSPIRVToMSLConverter.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MoltenVKSPIRVToMSLConverter.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		A93903C71C57E9ED00FE90DC /* MoltenVKSPIRVToMSLConverter.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MoltenVKSPIRVToMSLConverter.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		A93E8203211F76F5001FEBD4 /* SPVRemapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPVRemapper.h; sourceTree = "<group>"; };
+		A93E8204211F76F5001FEBD4 /* SpvBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpvBuilder.h; sourceTree = "<group>"; };
+		A93E8205211F76F5001FEBD4 /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; };
+		A93E8206211F76F5001FEBD4 /* SpvPostProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpvPostProcess.cpp; sourceTree = "<group>"; };
+		A93E8207211F76F5001FEBD4 /* InReadableOrder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InReadableOrder.cpp; sourceTree = "<group>"; };
+		A93E8208211F76F5001FEBD4 /* GLSL.ext.AMD.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLSL.ext.AMD.h; sourceTree = "<group>"; };
+		A93E8209211F76F5001FEBD4 /* doc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = doc.h; sourceTree = "<group>"; };
+		A93E820A211F76F5001FEBD4 /* spirv.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = spirv.hpp; sourceTree = "<group>"; };
+		A93E820B211F76F5001FEBD4 /* SpvBuilder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpvBuilder.cpp; sourceTree = "<group>"; };
+		A93E820C211F76F6001FEBD4 /* GLSL.ext.EXT.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLSL.ext.EXT.h; sourceTree = "<group>"; };
+		A93E820D211F76F6001FEBD4 /* GLSL.ext.KHR.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLSL.ext.KHR.h; sourceTree = "<group>"; };
+		A93E820E211F76F6001FEBD4 /* GLSL.ext.NV.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLSL.ext.NV.h; sourceTree = "<group>"; };
+		A93E820F211F76F6001FEBD4 /* GlslangToSpv.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GlslangToSpv.cpp; sourceTree = "<group>"; };
+		A93E8210211F76F6001FEBD4 /* spvIR.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spvIR.h; sourceTree = "<group>"; };
+		A93E8211211F76F6001FEBD4 /* bitutils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bitutils.h; sourceTree = "<group>"; };
+		A93E8212211F76F6001FEBD4 /* disassemble.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = disassemble.h; sourceTree = "<group>"; };
+		A93E8213211F76F6001FEBD4 /* GlslangToSpv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GlslangToSpv.h; sourceTree = "<group>"; };
+		A93E8214211F76F6001FEBD4 /* GLSL.std.450.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLSL.std.450.h; sourceTree = "<group>"; };
+		A93E8215211F76F6001FEBD4 /* SPVRemapper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SPVRemapper.cpp; sourceTree = "<group>"; };
+		A93E8216211F76F6001FEBD4 /* Logger.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Logger.cpp; sourceTree = "<group>"; };
+		A93E8217211F76F6001FEBD4 /* hex_float.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hex_float.h; sourceTree = "<group>"; };
+		A93E8218211F76F6001FEBD4 /* Logger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Logger.h; sourceTree = "<group>"; };
+		A93E8219211F76F6001FEBD4 /* doc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = doc.cpp; sourceTree = "<group>"; };
+		A93E821A211F76F6001FEBD4 /* disassemble.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = disassemble.cpp; sourceTree = "<group>"; };
+		A93E821C211F76F6001FEBD4 /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; };
+		A93E821F211F76F6001FEBD4 /* ossource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ossource.cpp; sourceTree = "<group>"; };
+		A93E8220211F76F6001FEBD4 /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; };
+		A93E8221211F76F6001FEBD4 /* osinclude.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = osinclude.h; sourceTree = "<group>"; };
+		A93E8227211F76F6001FEBD4 /* ResourceLimits.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ResourceLimits.h; sourceTree = "<group>"; };
+		A93E8228211F76F6001FEBD4 /* Types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Types.h; sourceTree = "<group>"; };
+		A93E8229211F76F6001FEBD4 /* intermediate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = intermediate.h; sourceTree = "<group>"; };
+		A93E822A211F76F6001FEBD4 /* BaseTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseTypes.h; sourceTree = "<group>"; };
+		A93E822B211F76F6001FEBD4 /* revision.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = revision.h; sourceTree = "<group>"; };
+		A93E822C211F76F6001FEBD4 /* InitializeGlobals.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InitializeGlobals.h; sourceTree = "<group>"; };
+		A93E822D211F76F6001FEBD4 /* ShHandle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShHandle.h; sourceTree = "<group>"; };
+		A93E822E211F76F6001FEBD4 /* arrays.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = arrays.h; sourceTree = "<group>"; };
+		A93E822F211F76F6001FEBD4 /* Common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Common.h; sourceTree = "<group>"; };
+		A93E8230211F76F6001FEBD4 /* revision.template */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = revision.template; sourceTree = "<group>"; };
+		A93E8231211F76F6001FEBD4 /* ConstantUnion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConstantUnion.h; sourceTree = "<group>"; };
+		A93E8232211F76F6001FEBD4 /* InfoSink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InfoSink.h; sourceTree = "<group>"; };
+		A93E8233211F76F6001FEBD4 /* PoolAlloc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PoolAlloc.h; sourceTree = "<group>"; };
+		A93E8234211F76F6001FEBD4 /* updateGrammar */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = updateGrammar; sourceTree = "<group>"; };
+		A93E8236211F76F6001FEBD4 /* ParseHelper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ParseHelper.cpp; sourceTree = "<group>"; };
+		A93E8237211F76F6001FEBD4 /* parseVersions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = parseVersions.h; sourceTree = "<group>"; };
+		A93E8238211F76F6001FEBD4 /* gl_types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gl_types.h; sourceTree = "<group>"; };
+		A93E8239211F76F6001FEBD4 /* propagateNoContraction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = propagateNoContraction.cpp; sourceTree = "<group>"; };
+		A93E823A211F76F6001FEBD4 /* ScanContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScanContext.h; sourceTree = "<group>"; };
+		A93E823B211F76F6001FEBD4 /* iomapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iomapper.h; sourceTree = "<group>"; };
+		A93E823C211F76F6001FEBD4 /* localintermediate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = localintermediate.h; sourceTree = "<group>"; };
+		A93E823D211F76F6001FEBD4 /* Scan.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Scan.cpp; sourceTree = "<group>"; };
+		A93E823F211F76F6001FEBD4 /* RemoveTree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RemoveTree.h; sourceTree = "<group>"; };
+		A93E8240211F76F6001FEBD4 /* Initialize.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Initialize.cpp; sourceTree = "<group>"; };
+		A93E8241211F76F6001FEBD4 /* glslang_tab.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = glslang_tab.cpp; sourceTree = "<group>"; };
+		A93E8242211F76F6001FEBD4 /* limits.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = limits.cpp; sourceTree = "<group>"; };
+		A93E8243211F76F6001FEBD4 /* parseConst.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = parseConst.cpp; sourceTree = "<group>"; };
+		A93E8244211F76F6001FEBD4 /* propagateNoContraction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = propagateNoContraction.h; sourceTree = "<group>"; };
+		A93E8245211F76F6001FEBD4 /* Versions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Versions.h; sourceTree = "<group>"; };
+		A93E8246211F76F6001FEBD4 /* IntermTraverse.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IntermTraverse.cpp; sourceTree = "<group>"; };
+		A93E8247211F76F6001FEBD4 /* intermOut.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = intermOut.cpp; sourceTree = "<group>"; };
+		A93E8248211F76F6001FEBD4 /* iomapper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = iomapper.cpp; sourceTree = "<group>"; };
+		A93E8249211F76F6001FEBD4 /* PoolAlloc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PoolAlloc.cpp; sourceTree = "<group>"; };
+		A93E824A211F76F6001FEBD4 /* ShaderLang.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ShaderLang.cpp; sourceTree = "<group>"; };
+		A93E824B211F76F6001FEBD4 /* SymbolTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SymbolTable.h; sourceTree = "<group>"; };
+		A93E824C211F76F6001FEBD4 /* InfoSink.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InfoSink.cpp; sourceTree = "<group>"; };
+		A93E824D211F76F6001FEBD4 /* Intermediate.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Intermediate.cpp; sourceTree = "<group>"; };
+		A93E824E211F76F6001FEBD4 /* SymbolTable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SymbolTable.cpp; sourceTree = "<group>"; };
+		A93E824F211F76F6001FEBD4 /* glslang_tab.cpp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = glslang_tab.cpp.h; sourceTree = "<group>"; };
+		A93E8250211F76F6001FEBD4 /* LiveTraverser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LiveTraverser.h; sourceTree = "<group>"; };
+		A93E8251211F76F6001FEBD4 /* Initialize.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Initialize.h; sourceTree = "<group>"; };
+		A93E8252211F76F6001FEBD4 /* attribute.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = attribute.cpp; sourceTree = "<group>"; };
+		A93E8253211F76F6001FEBD4 /* reflection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = reflection.cpp; sourceTree = "<group>"; };
+		A93E8254211F76F6001FEBD4 /* RemoveTree.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RemoveTree.cpp; sourceTree = "<group>"; };
+		A93E8255211F76F6001FEBD4 /* attribute.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = attribute.h; sourceTree = "<group>"; };
+		A93E8256211F76F6001FEBD4 /* Versions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Versions.cpp; sourceTree = "<group>"; };
+		A93E8257211F76F6001FEBD4 /* Constant.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Constant.cpp; sourceTree = "<group>"; };
+		A93E8258211F76F6001FEBD4 /* linkValidate.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = linkValidate.cpp; sourceTree = "<group>"; };
+		A93E8259211F76F6001FEBD4 /* ParseHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ParseHelper.h; sourceTree = "<group>"; };
+		A93E825B211F76F6001FEBD4 /* PpAtom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PpAtom.cpp; sourceTree = "<group>"; };
+		A93E825C211F76F6001FEBD4 /* PpTokens.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PpTokens.h; sourceTree = "<group>"; };
+		A93E825D211F76F6001FEBD4 /* Pp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Pp.cpp; sourceTree = "<group>"; };
+		A93E825E211F76F6001FEBD4 /* PpContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PpContext.h; sourceTree = "<group>"; };
+		A93E825F211F76F6001FEBD4 /* PpTokens.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PpTokens.cpp; sourceTree = "<group>"; };
+		A93E8260211F76F6001FEBD4 /* PpContext.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PpContext.cpp; sourceTree = "<group>"; };
+		A93E8261211F76F6001FEBD4 /* PpScanner.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PpScanner.cpp; sourceTree = "<group>"; };
+		A93E8262211F76F6001FEBD4 /* ParseContextBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ParseContextBase.cpp; sourceTree = "<group>"; };
+		A93E8263211F76F6001FEBD4 /* reflection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reflection.h; sourceTree = "<group>"; };
+		A93E8264211F76F6001FEBD4 /* Scan.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Scan.h; sourceTree = "<group>"; };
+		A93E8266211F76F6001FEBD4 /* ShaderLang.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShaderLang.h; sourceTree = "<group>"; };
+		A93E8268211F76F6001FEBD4 /* CodeGen.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CodeGen.cpp; sourceTree = "<group>"; };
+		A93E8269211F76F6001FEBD4 /* Link.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Link.cpp; sourceTree = "<group>"; };
+		A93E826B211F76F6001FEBD4 /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; };
+		A93E826C211F76F6001FEBD4 /* InitializeDll.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InitializeDll.h; sourceTree = "<group>"; };
+		A93E826D211F76F6001FEBD4 /* InitializeDll.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InitializeDll.cpp; sourceTree = "<group>"; };
 		A95096BD2003D32400F10950 /* DirectorySupport.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DirectorySupport.mm; sourceTree = "<group>"; };
 		A95096BE2003D32400F10950 /* DirectorySupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DirectorySupport.h; sourceTree = "<group>"; };
 		A95C5F3D1DEA9070000D17B6 /* spirv_cfg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_cfg.cpp; sourceTree = "<group>"; };
@@ -1123,98 +1218,6 @@
 		A99E0ECA210E5F0A00D9968F /* function.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = function.h; sourceTree = "<group>"; };
 		A99E0ECB210E5F0A00D9968F /* validation_state.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validation_state.cpp; sourceTree = "<group>"; };
 		A99E0ECC210E5F0A00D9968F /* decoration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = decoration.h; sourceTree = "<group>"; };
-		A9A577C12054A0E20072F392 /* SPVRemapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPVRemapper.h; sourceTree = "<group>"; };
-		A9A577C22054A0E20072F392 /* SpvBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpvBuilder.h; sourceTree = "<group>"; };
-		A9A577C32054A0E20072F392 /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; };
-		A9A577C42054A0E20072F392 /* InReadableOrder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InReadableOrder.cpp; sourceTree = "<group>"; };
-		A9A577C52054A0E20072F392 /* GLSL.ext.AMD.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLSL.ext.AMD.h; sourceTree = "<group>"; };
-		A9A577C62054A0E20072F392 /* doc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = doc.h; sourceTree = "<group>"; };
-		A9A577C72054A0E20072F392 /* spirv.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = spirv.hpp; sourceTree = "<group>"; };
-		A9A577C82054A0E20072F392 /* SpvBuilder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpvBuilder.cpp; sourceTree = "<group>"; };
-		A9A577C92054A0E20072F392 /* GLSL.ext.EXT.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLSL.ext.EXT.h; sourceTree = "<group>"; };
-		A9A577CA2054A0E20072F392 /* GLSL.ext.KHR.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLSL.ext.KHR.h; sourceTree = "<group>"; };
-		A9A577CB2054A0E20072F392 /* GLSL.ext.NV.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLSL.ext.NV.h; sourceTree = "<group>"; };
-		A9A577CC2054A0E20072F392 /* GlslangToSpv.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GlslangToSpv.cpp; sourceTree = "<group>"; };
-		A9A577CD2054A0E20072F392 /* spvIR.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spvIR.h; sourceTree = "<group>"; };
-		A9A577CE2054A0E20072F392 /* bitutils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bitutils.h; sourceTree = "<group>"; };
-		A9A577CF2054A0E20072F392 /* disassemble.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = disassemble.h; sourceTree = "<group>"; };
-		A9A577D02054A0E20072F392 /* GlslangToSpv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GlslangToSpv.h; sourceTree = "<group>"; };
-		A9A577D12054A0E20072F392 /* GLSL.std.450.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLSL.std.450.h; sourceTree = "<group>"; };
-		A9A577D22054A0E20072F392 /* SPVRemapper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SPVRemapper.cpp; sourceTree = "<group>"; };
-		A9A577D32054A0E20072F392 /* Logger.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Logger.cpp; sourceTree = "<group>"; };
-		A9A577D42054A0E20072F392 /* hex_float.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hex_float.h; sourceTree = "<group>"; };
-		A9A577D52054A0E20072F392 /* Logger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Logger.h; sourceTree = "<group>"; };
-		A9A577D62054A0E20072F392 /* doc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = doc.cpp; sourceTree = "<group>"; };
-		A9A577D72054A0E20072F392 /* disassemble.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = disassemble.cpp; sourceTree = "<group>"; };
-		A9A577D92054A0E20072F392 /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; };
-		A9A577DC2054A0E20072F392 /* ossource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ossource.cpp; sourceTree = "<group>"; };
-		A9A577DD2054A0E20072F392 /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; };
-		A9A577DE2054A0E20072F392 /* osinclude.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = osinclude.h; sourceTree = "<group>"; };
-		A9A577E42054A0E20072F392 /* ResourceLimits.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ResourceLimits.h; sourceTree = "<group>"; };
-		A9A577E52054A0E20072F392 /* Types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Types.h; sourceTree = "<group>"; };
-		A9A577E62054A0E20072F392 /* intermediate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = intermediate.h; sourceTree = "<group>"; };
-		A9A577E72054A0E20072F392 /* BaseTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseTypes.h; sourceTree = "<group>"; };
-		A9A577E82054A0E20072F392 /* revision.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = revision.h; sourceTree = "<group>"; };
-		A9A577E92054A0E20072F392 /* InitializeGlobals.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InitializeGlobals.h; sourceTree = "<group>"; };
-		A9A577EA2054A0E20072F392 /* ShHandle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShHandle.h; sourceTree = "<group>"; };
-		A9A577EB2054A0E20072F392 /* arrays.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = arrays.h; sourceTree = "<group>"; };
-		A9A577EC2054A0E20072F392 /* Common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Common.h; sourceTree = "<group>"; };
-		A9A577ED2054A0E20072F392 /* revision.template */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = revision.template; sourceTree = "<group>"; };
-		A9A577EE2054A0E20072F392 /* ConstantUnion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConstantUnion.h; sourceTree = "<group>"; };
-		A9A577EF2054A0E20072F392 /* InfoSink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InfoSink.h; sourceTree = "<group>"; };
-		A9A577F02054A0E20072F392 /* PoolAlloc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PoolAlloc.h; sourceTree = "<group>"; };
-		A9A577F12054A0E20072F392 /* updateGrammar */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = updateGrammar; sourceTree = "<group>"; };
-		A9A577F32054A0E20072F392 /* ParseHelper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ParseHelper.cpp; sourceTree = "<group>"; };
-		A9A577F42054A0E20072F392 /* parseVersions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = parseVersions.h; sourceTree = "<group>"; };
-		A9A577F52054A0E20072F392 /* gl_types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gl_types.h; sourceTree = "<group>"; };
-		A9A577F62054A0E20072F392 /* propagateNoContraction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = propagateNoContraction.cpp; sourceTree = "<group>"; };
-		A9A577F72054A0E20072F392 /* ScanContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScanContext.h; sourceTree = "<group>"; };
-		A9A577F82054A0E20072F392 /* iomapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iomapper.h; sourceTree = "<group>"; };
-		A9A577F92054A0E20072F392 /* localintermediate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = localintermediate.h; sourceTree = "<group>"; };
-		A9A577FA2054A0E20072F392 /* Scan.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Scan.cpp; sourceTree = "<group>"; };
-		A9A577FC2054A0E20072F392 /* RemoveTree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RemoveTree.h; sourceTree = "<group>"; };
-		A9A577FD2054A0E20072F392 /* Initialize.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Initialize.cpp; sourceTree = "<group>"; };
-		A9A577FE2054A0E20072F392 /* glslang_tab.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = glslang_tab.cpp; sourceTree = "<group>"; };
-		A9A577FF2054A0E20072F392 /* limits.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = limits.cpp; sourceTree = "<group>"; };
-		A9A578002054A0E20072F392 /* parseConst.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = parseConst.cpp; sourceTree = "<group>"; };
-		A9A578012054A0E20072F392 /* propagateNoContraction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = propagateNoContraction.h; sourceTree = "<group>"; };
-		A9A578022054A0E20072F392 /* Versions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Versions.h; sourceTree = "<group>"; };
-		A9A578032054A0E20072F392 /* IntermTraverse.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IntermTraverse.cpp; sourceTree = "<group>"; };
-		A9A578042054A0E20072F392 /* intermOut.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = intermOut.cpp; sourceTree = "<group>"; };
-		A9A578052054A0E20072F392 /* iomapper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = iomapper.cpp; sourceTree = "<group>"; };
-		A9A578062054A0E20072F392 /* PoolAlloc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PoolAlloc.cpp; sourceTree = "<group>"; };
-		A9A578072054A0E20072F392 /* ShaderLang.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ShaderLang.cpp; sourceTree = "<group>"; };
-		A9A578082054A0E20072F392 /* SymbolTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SymbolTable.h; sourceTree = "<group>"; };
-		A9A578092054A0E20072F392 /* InfoSink.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InfoSink.cpp; sourceTree = "<group>"; };
-		A9A5780A2054A0E20072F392 /* Intermediate.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Intermediate.cpp; sourceTree = "<group>"; };
-		A9A5780B2054A0E20072F392 /* SymbolTable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SymbolTable.cpp; sourceTree = "<group>"; };
-		A9A5780C2054A0E20072F392 /* glslang_tab.cpp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = glslang_tab.cpp.h; sourceTree = "<group>"; };
-		A9A5780D2054A0E20072F392 /* LiveTraverser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LiveTraverser.h; sourceTree = "<group>"; };
-		A9A5780E2054A0E20072F392 /* Initialize.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Initialize.h; sourceTree = "<group>"; };
-		A9A5780F2054A0E20072F392 /* attribute.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = attribute.cpp; sourceTree = "<group>"; };
-		A9A578102054A0E20072F392 /* reflection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = reflection.cpp; sourceTree = "<group>"; };
-		A9A578112054A0E20072F392 /* RemoveTree.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RemoveTree.cpp; sourceTree = "<group>"; };
-		A9A578122054A0E20072F392 /* attribute.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = attribute.h; sourceTree = "<group>"; };
-		A9A578132054A0E20072F392 /* Versions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Versions.cpp; sourceTree = "<group>"; };
-		A9A578142054A0E20072F392 /* Constant.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Constant.cpp; sourceTree = "<group>"; };
-		A9A578152054A0E20072F392 /* linkValidate.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = linkValidate.cpp; sourceTree = "<group>"; };
-		A9A578162054A0E20072F392 /* ParseHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ParseHelper.h; sourceTree = "<group>"; };
-		A9A578182054A0E20072F392 /* PpAtom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PpAtom.cpp; sourceTree = "<group>"; };
-		A9A578192054A0E20072F392 /* PpTokens.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PpTokens.h; sourceTree = "<group>"; };
-		A9A5781A2054A0E20072F392 /* Pp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Pp.cpp; sourceTree = "<group>"; };
-		A9A5781B2054A0E20072F392 /* PpContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PpContext.h; sourceTree = "<group>"; };
-		A9A5781C2054A0E20072F392 /* PpTokens.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PpTokens.cpp; sourceTree = "<group>"; };
-		A9A5781D2054A0E20072F392 /* PpContext.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PpContext.cpp; sourceTree = "<group>"; };
-		A9A5781E2054A0E20072F392 /* PpScanner.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PpScanner.cpp; sourceTree = "<group>"; };
-		A9A5781F2054A0E20072F392 /* ParseContextBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ParseContextBase.cpp; sourceTree = "<group>"; };
-		A9A578202054A0E20072F392 /* reflection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reflection.h; sourceTree = "<group>"; };
-		A9A578212054A0E20072F392 /* Scan.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Scan.h; sourceTree = "<group>"; };
-		A9A578232054A0E20072F392 /* ShaderLang.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShaderLang.h; sourceTree = "<group>"; };
-		A9A578252054A0E20072F392 /* CodeGen.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CodeGen.cpp; sourceTree = "<group>"; };
-		A9A578262054A0E20072F392 /* Link.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Link.cpp; sourceTree = "<group>"; };
-		A9A578282054A0E20072F392 /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; };
-		A9A578292054A0E20072F392 /* InitializeDll.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InitializeDll.h; sourceTree = "<group>"; };
-		A9A5782A2054A0E20072F392 /* InitializeDll.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InitializeDll.cpp; sourceTree = "<group>"; };
 		A9AB19901CB5B5A80001E7F9 /* spirv_common.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = spirv_common.hpp; sourceTree = "<group>"; };
 		A9AB19911CB5B5A80001E7F9 /* spirv_cross.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_cross.cpp; sourceTree = "<group>"; };
 		A9AB19921CB5B5A80001E7F9 /* spirv_cross.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = spirv_cross.hpp; sourceTree = "<group>"; };
@@ -1285,6 +1288,179 @@
 			path = "../SPIRV-Cross";
 			sourceTree = "<group>";
 		};
+		A93E8202211F76F5001FEBD4 /* SPIRV */ = {
+			isa = PBXGroup;
+			children = (
+				A93E8203211F76F5001FEBD4 /* SPVRemapper.h */,
+				A93E8204211F76F5001FEBD4 /* SpvBuilder.h */,
+				A93E8205211F76F5001FEBD4 /* CMakeLists.txt */,
+				A93E8206211F76F5001FEBD4 /* SpvPostProcess.cpp */,
+				A93E8207211F76F5001FEBD4 /* InReadableOrder.cpp */,
+				A93E8208211F76F5001FEBD4 /* GLSL.ext.AMD.h */,
+				A93E8209211F76F5001FEBD4 /* doc.h */,
+				A93E820A211F76F5001FEBD4 /* spirv.hpp */,
+				A93E820B211F76F5001FEBD4 /* SpvBuilder.cpp */,
+				A93E820C211F76F6001FEBD4 /* GLSL.ext.EXT.h */,
+				A93E820D211F76F6001FEBD4 /* GLSL.ext.KHR.h */,
+				A93E820E211F76F6001FEBD4 /* GLSL.ext.NV.h */,
+				A93E820F211F76F6001FEBD4 /* GlslangToSpv.cpp */,
+				A93E8210211F76F6001FEBD4 /* spvIR.h */,
+				A93E8211211F76F6001FEBD4 /* bitutils.h */,
+				A93E8212211F76F6001FEBD4 /* disassemble.h */,
+				A93E8213211F76F6001FEBD4 /* GlslangToSpv.h */,
+				A93E8214211F76F6001FEBD4 /* GLSL.std.450.h */,
+				A93E8215211F76F6001FEBD4 /* SPVRemapper.cpp */,
+				A93E8216211F76F6001FEBD4 /* Logger.cpp */,
+				A93E8217211F76F6001FEBD4 /* hex_float.h */,
+				A93E8218211F76F6001FEBD4 /* Logger.h */,
+				A93E8219211F76F6001FEBD4 /* doc.cpp */,
+				A93E821A211F76F6001FEBD4 /* disassemble.cpp */,
+			);
+			name = SPIRV;
+			path = SPIRV;
+			sourceTree = "<group>";
+		};
+		A93E821B211F76F6001FEBD4 /* glslang */ = {
+			isa = PBXGroup;
+			children = (
+				A93E821C211F76F6001FEBD4 /* CMakeLists.txt */,
+				A93E821D211F76F6001FEBD4 /* OSDependent */,
+				A93E8226211F76F6001FEBD4 /* Include */,
+				A93E8234211F76F6001FEBD4 /* updateGrammar */,
+				A93E8235211F76F6001FEBD4 /* MachineIndependent */,
+				A93E8265211F76F6001FEBD4 /* Public */,
+				A93E8267211F76F6001FEBD4 /* GenericCodeGen */,
+			);
+			name = glslang;
+			path = glslang;
+			sourceTree = "<group>";
+		};
+		A93E821D211F76F6001FEBD4 /* OSDependent */ = {
+			isa = PBXGroup;
+			children = (
+				A93E821E211F76F6001FEBD4 /* Unix */,
+				A93E8221211F76F6001FEBD4 /* osinclude.h */,
+			);
+			path = OSDependent;
+			sourceTree = "<group>";
+		};
+		A93E821E211F76F6001FEBD4 /* Unix */ = {
+			isa = PBXGroup;
+			children = (
+				A93E821F211F76F6001FEBD4 /* ossource.cpp */,
+				A93E8220211F76F6001FEBD4 /* CMakeLists.txt */,
+			);
+			path = Unix;
+			sourceTree = "<group>";
+		};
+		A93E8226211F76F6001FEBD4 /* Include */ = {
+			isa = PBXGroup;
+			children = (
+				A93E8227211F76F6001FEBD4 /* ResourceLimits.h */,
+				A93E8228211F76F6001FEBD4 /* Types.h */,
+				A93E8229211F76F6001FEBD4 /* intermediate.h */,
+				A93E822A211F76F6001FEBD4 /* BaseTypes.h */,
+				A93E822B211F76F6001FEBD4 /* revision.h */,
+				A93E822C211F76F6001FEBD4 /* InitializeGlobals.h */,
+				A93E822D211F76F6001FEBD4 /* ShHandle.h */,
+				A93E822E211F76F6001FEBD4 /* arrays.h */,
+				A93E822F211F76F6001FEBD4 /* Common.h */,
+				A93E8230211F76F6001FEBD4 /* revision.template */,
+				A93E8231211F76F6001FEBD4 /* ConstantUnion.h */,
+				A93E8232211F76F6001FEBD4 /* InfoSink.h */,
+				A93E8233211F76F6001FEBD4 /* PoolAlloc.h */,
+			);
+			path = Include;
+			sourceTree = "<group>";
+		};
+		A93E8235211F76F6001FEBD4 /* MachineIndependent */ = {
+			isa = PBXGroup;
+			children = (
+				A93E8236211F76F6001FEBD4 /* ParseHelper.cpp */,
+				A93E8237211F76F6001FEBD4 /* parseVersions.h */,
+				A93E8238211F76F6001FEBD4 /* gl_types.h */,
+				A93E8239211F76F6001FEBD4 /* propagateNoContraction.cpp */,
+				A93E823A211F76F6001FEBD4 /* ScanContext.h */,
+				A93E823B211F76F6001FEBD4 /* iomapper.h */,
+				A93E823C211F76F6001FEBD4 /* localintermediate.h */,
+				A93E823D211F76F6001FEBD4 /* Scan.cpp */,
+				A93E823F211F76F6001FEBD4 /* RemoveTree.h */,
+				A93E8240211F76F6001FEBD4 /* Initialize.cpp */,
+				A93E8241211F76F6001FEBD4 /* glslang_tab.cpp */,
+				A93E8242211F76F6001FEBD4 /* limits.cpp */,
+				A93E8243211F76F6001FEBD4 /* parseConst.cpp */,
+				A93E8244211F76F6001FEBD4 /* propagateNoContraction.h */,
+				A93E8245211F76F6001FEBD4 /* Versions.h */,
+				A93E8246211F76F6001FEBD4 /* IntermTraverse.cpp */,
+				A93E8247211F76F6001FEBD4 /* intermOut.cpp */,
+				A93E8248211F76F6001FEBD4 /* iomapper.cpp */,
+				A93E8249211F76F6001FEBD4 /* PoolAlloc.cpp */,
+				A93E824A211F76F6001FEBD4 /* ShaderLang.cpp */,
+				A93E824B211F76F6001FEBD4 /* SymbolTable.h */,
+				A93E824C211F76F6001FEBD4 /* InfoSink.cpp */,
+				A93E824D211F76F6001FEBD4 /* Intermediate.cpp */,
+				A93E824E211F76F6001FEBD4 /* SymbolTable.cpp */,
+				A93E824F211F76F6001FEBD4 /* glslang_tab.cpp.h */,
+				A93E8250211F76F6001FEBD4 /* LiveTraverser.h */,
+				A93E8251211F76F6001FEBD4 /* Initialize.h */,
+				A93E8252211F76F6001FEBD4 /* attribute.cpp */,
+				A93E8253211F76F6001FEBD4 /* reflection.cpp */,
+				A93E8254211F76F6001FEBD4 /* RemoveTree.cpp */,
+				A93E8255211F76F6001FEBD4 /* attribute.h */,
+				A93E8256211F76F6001FEBD4 /* Versions.cpp */,
+				A93E8257211F76F6001FEBD4 /* Constant.cpp */,
+				A93E8258211F76F6001FEBD4 /* linkValidate.cpp */,
+				A93E8259211F76F6001FEBD4 /* ParseHelper.h */,
+				A93E825A211F76F6001FEBD4 /* preprocessor */,
+				A93E8262211F76F6001FEBD4 /* ParseContextBase.cpp */,
+				A93E8263211F76F6001FEBD4 /* reflection.h */,
+				A93E8264211F76F6001FEBD4 /* Scan.h */,
+			);
+			path = MachineIndependent;
+			sourceTree = "<group>";
+		};
+		A93E825A211F76F6001FEBD4 /* preprocessor */ = {
+			isa = PBXGroup;
+			children = (
+				A93E825B211F76F6001FEBD4 /* PpAtom.cpp */,
+				A93E825C211F76F6001FEBD4 /* PpTokens.h */,
+				A93E825D211F76F6001FEBD4 /* Pp.cpp */,
+				A93E825E211F76F6001FEBD4 /* PpContext.h */,
+				A93E825F211F76F6001FEBD4 /* PpTokens.cpp */,
+				A93E8260211F76F6001FEBD4 /* PpContext.cpp */,
+				A93E8261211F76F6001FEBD4 /* PpScanner.cpp */,
+			);
+			path = preprocessor;
+			sourceTree = "<group>";
+		};
+		A93E8265211F76F6001FEBD4 /* Public */ = {
+			isa = PBXGroup;
+			children = (
+				A93E8266211F76F6001FEBD4 /* ShaderLang.h */,
+			);
+			path = Public;
+			sourceTree = "<group>";
+		};
+		A93E8267211F76F6001FEBD4 /* GenericCodeGen */ = {
+			isa = PBXGroup;
+			children = (
+				A93E8268211F76F6001FEBD4 /* CodeGen.cpp */,
+				A93E8269211F76F6001FEBD4 /* Link.cpp */,
+			);
+			path = GenericCodeGen;
+			sourceTree = "<group>";
+		};
+		A93E826A211F76F6001FEBD4 /* OGLCompilersDLL */ = {
+			isa = PBXGroup;
+			children = (
+				A93E826B211F76F6001FEBD4 /* CMakeLists.txt */,
+				A93E826C211F76F6001FEBD4 /* InitializeDll.h */,
+				A93E826D211F76F6001FEBD4 /* InitializeDll.cpp */,
+			);
+			name = OGLCompilersDLL;
+			path = OGLCompilersDLL;
+			sourceTree = "<group>";
+		};
 		A964B28D1C57EBC400D930D8 /* Products */ = {
 			isa = PBXGroup;
 			children = (
@@ -1300,9 +1476,9 @@
 		A97B21311C80B38D003F0FB4 /* glslang */ = {
 			isa = PBXGroup;
 			children = (
-				A9A577D82054A0E20072F392 /* glslang */,
-				A9A578272054A0E20072F392 /* OGLCompilersDLL */,
-				A9A577C02054A0E20072F392 /* SPIRV */,
+				A93E821B211F76F6001FEBD4 /* glslang */,
+				A93E826A211F76F6001FEBD4 /* OGLCompilersDLL */,
+				A93E8202211F76F5001FEBD4 /* SPIRV */,
 			);
 			name = glslang;
 			path = ../glslang;
@@ -1655,175 +1831,6 @@
 			path = val;
 			sourceTree = "<group>";
 		};
-		A9A577C02054A0E20072F392 /* SPIRV */ = {
-			isa = PBXGroup;
-			children = (
-				A9A577C12054A0E20072F392 /* SPVRemapper.h */,
-				A9A577C22054A0E20072F392 /* SpvBuilder.h */,
-				A9A577C32054A0E20072F392 /* CMakeLists.txt */,
-				A9A577C42054A0E20072F392 /* InReadableOrder.cpp */,
-				A9A577C52054A0E20072F392 /* GLSL.ext.AMD.h */,
-				A9A577C62054A0E20072F392 /* doc.h */,
-				A9A577C72054A0E20072F392 /* spirv.hpp */,
-				A9A577C82054A0E20072F392 /* SpvBuilder.cpp */,
-				A9A577C92054A0E20072F392 /* GLSL.ext.EXT.h */,
-				A9A577CA2054A0E20072F392 /* GLSL.ext.KHR.h */,
-				A9A577CB2054A0E20072F392 /* GLSL.ext.NV.h */,
-				A9A577CC2054A0E20072F392 /* GlslangToSpv.cpp */,
-				A9A577CD2054A0E20072F392 /* spvIR.h */,
-				A9A577CE2054A0E20072F392 /* bitutils.h */,
-				A9A577CF2054A0E20072F392 /* disassemble.h */,
-				A9A577D02054A0E20072F392 /* GlslangToSpv.h */,
-				A9A577D12054A0E20072F392 /* GLSL.std.450.h */,
-				A9A577D22054A0E20072F392 /* SPVRemapper.cpp */,
-				A9A577D32054A0E20072F392 /* Logger.cpp */,
-				A9A577D42054A0E20072F392 /* hex_float.h */,
-				A9A577D52054A0E20072F392 /* Logger.h */,
-				A9A577D62054A0E20072F392 /* doc.cpp */,
-				A9A577D72054A0E20072F392 /* disassemble.cpp */,
-			);
-			path = SPIRV;
-			sourceTree = "<group>";
-		};
-		A9A577D82054A0E20072F392 /* glslang */ = {
-			isa = PBXGroup;
-			children = (
-				A9A577D92054A0E20072F392 /* CMakeLists.txt */,
-				A9A577DA2054A0E20072F392 /* OSDependent */,
-				A9A577E32054A0E20072F392 /* Include */,
-				A9A577F12054A0E20072F392 /* updateGrammar */,
-				A9A577F22054A0E20072F392 /* MachineIndependent */,
-				A9A578222054A0E20072F392 /* Public */,
-				A9A578242054A0E20072F392 /* GenericCodeGen */,
-			);
-			path = glslang;
-			sourceTree = "<group>";
-		};
-		A9A577DA2054A0E20072F392 /* OSDependent */ = {
-			isa = PBXGroup;
-			children = (
-				A9A577DB2054A0E20072F392 /* Unix */,
-				A9A577DE2054A0E20072F392 /* osinclude.h */,
-			);
-			path = OSDependent;
-			sourceTree = "<group>";
-		};
-		A9A577DB2054A0E20072F392 /* Unix */ = {
-			isa = PBXGroup;
-			children = (
-				A9A577DC2054A0E20072F392 /* ossource.cpp */,
-				A9A577DD2054A0E20072F392 /* CMakeLists.txt */,
-			);
-			path = Unix;
-			sourceTree = "<group>";
-		};
-		A9A577E32054A0E20072F392 /* Include */ = {
-			isa = PBXGroup;
-			children = (
-				A9A577E42054A0E20072F392 /* ResourceLimits.h */,
-				A9A577E52054A0E20072F392 /* Types.h */,
-				A9A577E62054A0E20072F392 /* intermediate.h */,
-				A9A577E72054A0E20072F392 /* BaseTypes.h */,
-				A9A577E82054A0E20072F392 /* revision.h */,
-				A9A577E92054A0E20072F392 /* InitializeGlobals.h */,
-				A9A577EA2054A0E20072F392 /* ShHandle.h */,
-				A9A577EB2054A0E20072F392 /* arrays.h */,
-				A9A577EC2054A0E20072F392 /* Common.h */,
-				A9A577ED2054A0E20072F392 /* revision.template */,
-				A9A577EE2054A0E20072F392 /* ConstantUnion.h */,
-				A9A577EF2054A0E20072F392 /* InfoSink.h */,
-				A9A577F02054A0E20072F392 /* PoolAlloc.h */,
-			);
-			path = Include;
-			sourceTree = "<group>";
-		};
-		A9A577F22054A0E20072F392 /* MachineIndependent */ = {
-			isa = PBXGroup;
-			children = (
-				A9A577F32054A0E20072F392 /* ParseHelper.cpp */,
-				A9A577F42054A0E20072F392 /* parseVersions.h */,
-				A9A577F52054A0E20072F392 /* gl_types.h */,
-				A9A577F62054A0E20072F392 /* propagateNoContraction.cpp */,
-				A9A577F72054A0E20072F392 /* ScanContext.h */,
-				A9A577F82054A0E20072F392 /* iomapper.h */,
-				A9A577F92054A0E20072F392 /* localintermediate.h */,
-				A9A577FA2054A0E20072F392 /* Scan.cpp */,
-				A9A577FC2054A0E20072F392 /* RemoveTree.h */,
-				A9A577FD2054A0E20072F392 /* Initialize.cpp */,
-				A9A577FE2054A0E20072F392 /* glslang_tab.cpp */,
-				A9A577FF2054A0E20072F392 /* limits.cpp */,
-				A9A578002054A0E20072F392 /* parseConst.cpp */,
-				A9A578012054A0E20072F392 /* propagateNoContraction.h */,
-				A9A578022054A0E20072F392 /* Versions.h */,
-				A9A578032054A0E20072F392 /* IntermTraverse.cpp */,
-				A9A578042054A0E20072F392 /* intermOut.cpp */,
-				A9A578052054A0E20072F392 /* iomapper.cpp */,
-				A9A578062054A0E20072F392 /* PoolAlloc.cpp */,
-				A9A578072054A0E20072F392 /* ShaderLang.cpp */,
-				A9A578082054A0E20072F392 /* SymbolTable.h */,
-				A9A578092054A0E20072F392 /* InfoSink.cpp */,
-				A9A5780A2054A0E20072F392 /* Intermediate.cpp */,
-				A9A5780B2054A0E20072F392 /* SymbolTable.cpp */,
-				A9A5780C2054A0E20072F392 /* glslang_tab.cpp.h */,
-				A9A5780D2054A0E20072F392 /* LiveTraverser.h */,
-				A9A5780E2054A0E20072F392 /* Initialize.h */,
-				A9A5780F2054A0E20072F392 /* attribute.cpp */,
-				A9A578102054A0E20072F392 /* reflection.cpp */,
-				A9A578112054A0E20072F392 /* RemoveTree.cpp */,
-				A9A578122054A0E20072F392 /* attribute.h */,
-				A9A578132054A0E20072F392 /* Versions.cpp */,
-				A9A578142054A0E20072F392 /* Constant.cpp */,
-				A9A578152054A0E20072F392 /* linkValidate.cpp */,
-				A9A578162054A0E20072F392 /* ParseHelper.h */,
-				A9A578172054A0E20072F392 /* preprocessor */,
-				A9A5781F2054A0E20072F392 /* ParseContextBase.cpp */,
-				A9A578202054A0E20072F392 /* reflection.h */,
-				A9A578212054A0E20072F392 /* Scan.h */,
-			);
-			path = MachineIndependent;
-			sourceTree = "<group>";
-		};
-		A9A578172054A0E20072F392 /* preprocessor */ = {
-			isa = PBXGroup;
-			children = (
-				A9A578182054A0E20072F392 /* PpAtom.cpp */,
-				A9A578192054A0E20072F392 /* PpTokens.h */,
-				A9A5781A2054A0E20072F392 /* Pp.cpp */,
-				A9A5781B2054A0E20072F392 /* PpContext.h */,
-				A9A5781C2054A0E20072F392 /* PpTokens.cpp */,
-				A9A5781D2054A0E20072F392 /* PpContext.cpp */,
-				A9A5781E2054A0E20072F392 /* PpScanner.cpp */,
-			);
-			path = preprocessor;
-			sourceTree = "<group>";
-		};
-		A9A578222054A0E20072F392 /* Public */ = {
-			isa = PBXGroup;
-			children = (
-				A9A578232054A0E20072F392 /* ShaderLang.h */,
-			);
-			path = Public;
-			sourceTree = "<group>";
-		};
-		A9A578242054A0E20072F392 /* GenericCodeGen */ = {
-			isa = PBXGroup;
-			children = (
-				A9A578252054A0E20072F392 /* CodeGen.cpp */,
-				A9A578262054A0E20072F392 /* Link.cpp */,
-			);
-			path = GenericCodeGen;
-			sourceTree = "<group>";
-		};
-		A9A578272054A0E20072F392 /* OGLCompilersDLL */ = {
-			isa = PBXGroup;
-			children = (
-				A9A578282054A0E20072F392 /* CMakeLists.txt */,
-				A9A578292054A0E20072F392 /* InitializeDll.h */,
-				A9A5782A2054A0E20072F392 /* InitializeDll.cpp */,
-			);
-			path = OGLCompilersDLL;
-			sourceTree = "<group>";
-		};
 		A9F042A81FB4D060009FCCB8 /* Common */ = {
 			isa = PBXGroup;
 			children = (
@@ -1863,58 +1870,58 @@
 			buildActionMask = 2147483647;
 			files = (
 				A90941A51C581F840094110D /* GLSLConversion.h in Headers */,
-				A9A5787F2054A0E20072F392 /* ScanContext.h in Headers */,
-				A9A578932054A0E20072F392 /* propagateNoContraction.h in Headers */,
-				A9A578D92054A0E20072F392 /* InitializeDll.h in Headers */,
-				A9A578AB2054A0E20072F392 /* LiveTraverser.h in Headers */,
-				A9A578C12054A0E20072F392 /* PpTokens.h in Headers */,
-				A9A578732054A0E20072F392 /* InfoSink.h in Headers */,
-				A9A578B52054A0E20072F392 /* attribute.h in Headers */,
-				A9A578352054A0E20072F392 /* spirv.hpp in Headers */,
+				A93E82C4211F76F6001FEBD4 /* ScanContext.h in Headers */,
+				A93E82D8211F76F6001FEBD4 /* propagateNoContraction.h in Headers */,
+				A93E831E211F76F6001FEBD4 /* InitializeDll.h in Headers */,
+				A93E82F0211F76F6001FEBD4 /* LiveTraverser.h in Headers */,
+				A93E8306211F76F6001FEBD4 /* PpTokens.h in Headers */,
+				A93E82B8211F76F6001FEBD4 /* InfoSink.h in Headers */,
+				A93E82FA211F76F6001FEBD4 /* attribute.h in Headers */,
+				A93E827A211F76F6001FEBD4 /* spirv.hpp in Headers */,
 				A9F042B41FB4D060009FCCB8 /* MVKLogging.h in Headers */,
 				A90940A91C5808BB0094110D /* GLSLToSPIRVConverter.h in Headers */,
-				A9A5785F2054A0E20072F392 /* ResourceLimits.h in Headers */,
-				A9A578812054A0E20072F392 /* iomapper.h in Headers */,
-				A9A578592054A0E20072F392 /* osinclude.h in Headers */,
-				A9A578BD2054A0E20072F392 /* ParseHelper.h in Headers */,
-				A9A578892054A0E20072F392 /* RemoveTree.h in Headers */,
-				A9A578832054A0E20072F392 /* localintermediate.h in Headers */,
-				A9A578C52054A0E20072F392 /* PpContext.h in Headers */,
-				A9A578612054A0E20072F392 /* Types.h in Headers */,
-				A9A578D12054A0E20072F392 /* Scan.h in Headers */,
-				A9A578332054A0E20072F392 /* doc.h in Headers */,
-				A9A578752054A0E20072F392 /* PoolAlloc.h in Headers */,
-				A9A578692054A0E20072F392 /* InitializeGlobals.h in Headers */,
-				A9A578792054A0E20072F392 /* parseVersions.h in Headers */,
+				A93E82A4211F76F6001FEBD4 /* ResourceLimits.h in Headers */,
+				A93E82C6211F76F6001FEBD4 /* iomapper.h in Headers */,
+				A93E829E211F76F6001FEBD4 /* osinclude.h in Headers */,
+				A93E8302211F76F6001FEBD4 /* ParseHelper.h in Headers */,
+				A93E82CE211F76F6001FEBD4 /* RemoveTree.h in Headers */,
+				A93E82C8211F76F6001FEBD4 /* localintermediate.h in Headers */,
+				A93E830A211F76F6001FEBD4 /* PpContext.h in Headers */,
+				A93E82A6211F76F6001FEBD4 /* Types.h in Headers */,
+				A93E8316211F76F6001FEBD4 /* Scan.h in Headers */,
+				A93E8278211F76F6001FEBD4 /* doc.h in Headers */,
+				A93E82BA211F76F6001FEBD4 /* PoolAlloc.h in Headers */,
+				A93E82AE211F76F6001FEBD4 /* InitializeGlobals.h in Headers */,
+				A93E82BE211F76F6001FEBD4 /* parseVersions.h in Headers */,
 				A9F042B01FB4D060009FCCB8 /* MVKCommonEnvironment.h in Headers */,
-				A9A578CF2054A0E20072F392 /* reflection.h in Headers */,
-				A9A578952054A0E20072F392 /* Versions.h in Headers */,
-				A9A5787B2054A0E20072F392 /* gl_types.h in Headers */,
-				A9A578A92054A0E20072F392 /* glslang_tab.cpp.h in Headers */,
-				A9A578672054A0E20072F392 /* revision.h in Headers */,
-				A9A5786B2054A0E20072F392 /* ShHandle.h in Headers */,
-				A9A578492054A0E20072F392 /* GLSL.std.450.h in Headers */,
-				A9A578652054A0E20072F392 /* BaseTypes.h in Headers */,
-				A9A578712054A0E20072F392 /* ConstantUnion.h in Headers */,
-				A9A5784F2054A0E20072F392 /* hex_float.h in Headers */,
-				A9A5783D2054A0E20072F392 /* GLSL.ext.NV.h in Headers */,
-				A9A578D32054A0E20072F392 /* ShaderLang.h in Headers */,
-				A9A5782B2054A0E20072F392 /* SPVRemapper.h in Headers */,
-				A9A5786F2054A0E20072F392 /* Common.h in Headers */,
-				A9A578AD2054A0E20072F392 /* Initialize.h in Headers */,
-				A9A578392054A0E20072F392 /* GLSL.ext.EXT.h in Headers */,
-				A9A5783B2054A0E20072F392 /* GLSL.ext.KHR.h in Headers */,
-				A9A578632054A0E20072F392 /* intermediate.h in Headers */,
-				A9A578312054A0E20072F392 /* GLSL.ext.AMD.h in Headers */,
-				A9A578A12054A0E20072F392 /* SymbolTable.h in Headers */,
-				A9A578472054A0E20072F392 /* GlslangToSpv.h in Headers */,
-				A9A5786D2054A0E20072F392 /* arrays.h in Headers */,
-				A9A578512054A0E20072F392 /* Logger.h in Headers */,
-				A9A5782D2054A0E20072F392 /* SpvBuilder.h in Headers */,
-				A9A578432054A0E20072F392 /* bitutils.h in Headers */,
+				A93E8314211F76F6001FEBD4 /* reflection.h in Headers */,
+				A93E82DA211F76F6001FEBD4 /* Versions.h in Headers */,
+				A93E82C0211F76F6001FEBD4 /* gl_types.h in Headers */,
+				A93E82EE211F76F6001FEBD4 /* glslang_tab.cpp.h in Headers */,
+				A93E82AC211F76F6001FEBD4 /* revision.h in Headers */,
+				A93E82B0211F76F6001FEBD4 /* ShHandle.h in Headers */,
+				A93E828E211F76F6001FEBD4 /* GLSL.std.450.h in Headers */,
+				A93E82AA211F76F6001FEBD4 /* BaseTypes.h in Headers */,
+				A93E82B6211F76F6001FEBD4 /* ConstantUnion.h in Headers */,
+				A93E8294211F76F6001FEBD4 /* hex_float.h in Headers */,
+				A93E8282211F76F6001FEBD4 /* GLSL.ext.NV.h in Headers */,
+				A93E8318211F76F6001FEBD4 /* ShaderLang.h in Headers */,
+				A93E826E211F76F6001FEBD4 /* SPVRemapper.h in Headers */,
+				A93E82B4211F76F6001FEBD4 /* Common.h in Headers */,
+				A93E82F2211F76F6001FEBD4 /* Initialize.h in Headers */,
+				A93E827E211F76F6001FEBD4 /* GLSL.ext.EXT.h in Headers */,
+				A93E8280211F76F6001FEBD4 /* GLSL.ext.KHR.h in Headers */,
+				A93E82A8211F76F6001FEBD4 /* intermediate.h in Headers */,
+				A93E8276211F76F6001FEBD4 /* GLSL.ext.AMD.h in Headers */,
+				A93E82E6211F76F6001FEBD4 /* SymbolTable.h in Headers */,
+				A93E828C211F76F6001FEBD4 /* GlslangToSpv.h in Headers */,
+				A93E82B2211F76F6001FEBD4 /* arrays.h in Headers */,
+				A93E8296211F76F6001FEBD4 /* Logger.h in Headers */,
+				A93E8270211F76F6001FEBD4 /* SpvBuilder.h in Headers */,
+				A93E8288211F76F6001FEBD4 /* bitutils.h in Headers */,
 				A98149661FB6A98A005F00B4 /* MVKStrings.h in Headers */,
-				A9A578412054A0E20072F392 /* spvIR.h in Headers */,
-				A9A578452054A0E20072F392 /* disassemble.h in Headers */,
+				A93E8286211F76F6001FEBD4 /* spvIR.h in Headers */,
+				A93E828A211F76F6001FEBD4 /* disassemble.h in Headers */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -1923,58 +1930,58 @@
 			buildActionMask = 2147483647;
 			files = (
 				A90941A61C581F840094110D /* GLSLConversion.h in Headers */,
-				A9A578802054A0E20072F392 /* ScanContext.h in Headers */,
-				A9A578942054A0E20072F392 /* propagateNoContraction.h in Headers */,
-				A9A578DA2054A0E20072F392 /* InitializeDll.h in Headers */,
-				A9A578AC2054A0E20072F392 /* LiveTraverser.h in Headers */,
-				A9A578C22054A0E20072F392 /* PpTokens.h in Headers */,
-				A9A578742054A0E20072F392 /* InfoSink.h in Headers */,
-				A9A578B62054A0E20072F392 /* attribute.h in Headers */,
-				A9A578362054A0E20072F392 /* spirv.hpp in Headers */,
+				A93E82C5211F76F6001FEBD4 /* ScanContext.h in Headers */,
+				A93E82D9211F76F6001FEBD4 /* propagateNoContraction.h in Headers */,
+				A93E831F211F76F6001FEBD4 /* InitializeDll.h in Headers */,
+				A93E82F1211F76F6001FEBD4 /* LiveTraverser.h in Headers */,
+				A93E8307211F76F6001FEBD4 /* PpTokens.h in Headers */,
+				A93E82B9211F76F6001FEBD4 /* InfoSink.h in Headers */,
+				A93E82FB211F76F6001FEBD4 /* attribute.h in Headers */,
+				A93E827B211F76F6001FEBD4 /* spirv.hpp in Headers */,
 				A9F042B51FB4D060009FCCB8 /* MVKLogging.h in Headers */,
 				A90940AA1C5808BB0094110D /* GLSLToSPIRVConverter.h in Headers */,
-				A9A578602054A0E20072F392 /* ResourceLimits.h in Headers */,
-				A9A578822054A0E20072F392 /* iomapper.h in Headers */,
-				A9A5785A2054A0E20072F392 /* osinclude.h in Headers */,
-				A9A578BE2054A0E20072F392 /* ParseHelper.h in Headers */,
-				A9A5788A2054A0E20072F392 /* RemoveTree.h in Headers */,
-				A9A578842054A0E20072F392 /* localintermediate.h in Headers */,
-				A9A578C62054A0E20072F392 /* PpContext.h in Headers */,
-				A9A578622054A0E20072F392 /* Types.h in Headers */,
-				A9A578D22054A0E20072F392 /* Scan.h in Headers */,
-				A9A578342054A0E20072F392 /* doc.h in Headers */,
-				A9A578762054A0E20072F392 /* PoolAlloc.h in Headers */,
-				A9A5786A2054A0E20072F392 /* InitializeGlobals.h in Headers */,
-				A9A5787A2054A0E20072F392 /* parseVersions.h in Headers */,
+				A93E82A5211F76F6001FEBD4 /* ResourceLimits.h in Headers */,
+				A93E82C7211F76F6001FEBD4 /* iomapper.h in Headers */,
+				A93E829F211F76F6001FEBD4 /* osinclude.h in Headers */,
+				A93E8303211F76F6001FEBD4 /* ParseHelper.h in Headers */,
+				A93E82CF211F76F6001FEBD4 /* RemoveTree.h in Headers */,
+				A93E82C9211F76F6001FEBD4 /* localintermediate.h in Headers */,
+				A93E830B211F76F6001FEBD4 /* PpContext.h in Headers */,
+				A93E82A7211F76F6001FEBD4 /* Types.h in Headers */,
+				A93E8317211F76F6001FEBD4 /* Scan.h in Headers */,
+				A93E8279211F76F6001FEBD4 /* doc.h in Headers */,
+				A93E82BB211F76F6001FEBD4 /* PoolAlloc.h in Headers */,
+				A93E82AF211F76F6001FEBD4 /* InitializeGlobals.h in Headers */,
+				A93E82BF211F76F6001FEBD4 /* parseVersions.h in Headers */,
 				A9F042B11FB4D060009FCCB8 /* MVKCommonEnvironment.h in Headers */,
-				A9A578D02054A0E20072F392 /* reflection.h in Headers */,
-				A9A578962054A0E20072F392 /* Versions.h in Headers */,
-				A9A5787C2054A0E20072F392 /* gl_types.h in Headers */,
-				A9A578AA2054A0E20072F392 /* glslang_tab.cpp.h in Headers */,
-				A9A578682054A0E20072F392 /* revision.h in Headers */,
-				A9A5786C2054A0E20072F392 /* ShHandle.h in Headers */,
-				A9A5784A2054A0E20072F392 /* GLSL.std.450.h in Headers */,
-				A9A578662054A0E20072F392 /* BaseTypes.h in Headers */,
-				A9A578722054A0E20072F392 /* ConstantUnion.h in Headers */,
-				A9A578502054A0E20072F392 /* hex_float.h in Headers */,
-				A9A5783E2054A0E20072F392 /* GLSL.ext.NV.h in Headers */,
-				A9A578D42054A0E20072F392 /* ShaderLang.h in Headers */,
-				A9A5782C2054A0E20072F392 /* SPVRemapper.h in Headers */,
-				A9A578702054A0E20072F392 /* Common.h in Headers */,
-				A9A578AE2054A0E20072F392 /* Initialize.h in Headers */,
-				A9A5783A2054A0E20072F392 /* GLSL.ext.EXT.h in Headers */,
-				A9A5783C2054A0E20072F392 /* GLSL.ext.KHR.h in Headers */,
-				A9A578642054A0E20072F392 /* intermediate.h in Headers */,
-				A9A578322054A0E20072F392 /* GLSL.ext.AMD.h in Headers */,
-				A9A578A22054A0E20072F392 /* SymbolTable.h in Headers */,
-				A9A578482054A0E20072F392 /* GlslangToSpv.h in Headers */,
-				A9A5786E2054A0E20072F392 /* arrays.h in Headers */,
-				A9A578522054A0E20072F392 /* Logger.h in Headers */,
-				A9A5782E2054A0E20072F392 /* SpvBuilder.h in Headers */,
-				A9A578442054A0E20072F392 /* bitutils.h in Headers */,
+				A93E8315211F76F6001FEBD4 /* reflection.h in Headers */,
+				A93E82DB211F76F6001FEBD4 /* Versions.h in Headers */,
+				A93E82C1211F76F6001FEBD4 /* gl_types.h in Headers */,
+				A93E82EF211F76F6001FEBD4 /* glslang_tab.cpp.h in Headers */,
+				A93E82AD211F76F6001FEBD4 /* revision.h in Headers */,
+				A93E82B1211F76F6001FEBD4 /* ShHandle.h in Headers */,
+				A93E828F211F76F6001FEBD4 /* GLSL.std.450.h in Headers */,
+				A93E82AB211F76F6001FEBD4 /* BaseTypes.h in Headers */,
+				A93E82B7211F76F6001FEBD4 /* ConstantUnion.h in Headers */,
+				A93E8295211F76F6001FEBD4 /* hex_float.h in Headers */,
+				A93E8283211F76F6001FEBD4 /* GLSL.ext.NV.h in Headers */,
+				A93E8319211F76F6001FEBD4 /* ShaderLang.h in Headers */,
+				A93E826F211F76F6001FEBD4 /* SPVRemapper.h in Headers */,
+				A93E82B5211F76F6001FEBD4 /* Common.h in Headers */,
+				A93E82F3211F76F6001FEBD4 /* Initialize.h in Headers */,
+				A93E827F211F76F6001FEBD4 /* GLSL.ext.EXT.h in Headers */,
+				A93E8281211F76F6001FEBD4 /* GLSL.ext.KHR.h in Headers */,
+				A93E82A9211F76F6001FEBD4 /* intermediate.h in Headers */,
+				A93E8277211F76F6001FEBD4 /* GLSL.ext.AMD.h in Headers */,
+				A93E82E7211F76F6001FEBD4 /* SymbolTable.h in Headers */,
+				A93E828D211F76F6001FEBD4 /* GlslangToSpv.h in Headers */,
+				A93E82B3211F76F6001FEBD4 /* arrays.h in Headers */,
+				A93E8297211F76F6001FEBD4 /* Logger.h in Headers */,
+				A93E8271211F76F6001FEBD4 /* SpvBuilder.h in Headers */,
+				A93E8289211F76F6001FEBD4 /* bitutils.h in Headers */,
 				A98149671FB6A98A005F00B4 /* MVKStrings.h in Headers */,
-				A9A578422054A0E20072F392 /* spvIR.h in Headers */,
-				A9A578462054A0E20072F392 /* disassemble.h in Headers */,
+				A93E8287211F76F6001FEBD4 /* spvIR.h in Headers */,
+				A93E828B211F76F6001FEBD4 /* disassemble.h in Headers */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -2440,46 +2447,47 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				A9A578CD2054A0E20072F392 /* ParseContextBase.cpp in Sources */,
-				A9A578572054A0E20072F392 /* ossource.cpp in Sources */,
-				A9A578C92054A0E20072F392 /* PpContext.cpp in Sources */,
+				A93E8298211F76F6001FEBD4 /* doc.cpp in Sources */,
+				A93E831C211F76F6001FEBD4 /* Link.cpp in Sources */,
+				A93E8272211F76F6001FEBD4 /* SpvPostProcess.cpp in Sources */,
+				A93E82E4211F76F6001FEBD4 /* ShaderLang.cpp in Sources */,
+				A93E831A211F76F6001FEBD4 /* CodeGen.cpp in Sources */,
+				A93E830C211F76F6001FEBD4 /* PpTokens.cpp in Sources */,
+				A93E8290211F76F6001FEBD4 /* SPVRemapper.cpp in Sources */,
+				A93E82C2211F76F6001FEBD4 /* propagateNoContraction.cpp in Sources */,
+				A93E82FE211F76F6001FEBD4 /* Constant.cpp in Sources */,
 				A90941A31C581F840094110D /* GLSLConversion.mm in Sources */,
-				A9A5784D2054A0E20072F392 /* Logger.cpp in Sources */,
-				A9A5782F2054A0E20072F392 /* InReadableOrder.cpp in Sources */,
-				A9A578912054A0E20072F392 /* parseConst.cpp in Sources */,
-				A9A5789F2054A0E20072F392 /* ShaderLang.cpp in Sources */,
-				A9A578AF2054A0E20072F392 /* attribute.cpp in Sources */,
-				A9A578D52054A0E20072F392 /* CodeGen.cpp in Sources */,
-				A9A578CB2054A0E20072F392 /* PpScanner.cpp in Sources */,
-				A9A578B32054A0E20072F392 /* RemoveTree.cpp in Sources */,
-				A9A5787D2054A0E20072F392 /* propagateNoContraction.cpp in Sources */,
-				A9A578772054A0E20072F392 /* ParseHelper.cpp in Sources */,
-				A9A578C32054A0E20072F392 /* Pp.cpp in Sources */,
-				A9A578BF2054A0E20072F392 /* PpAtom.cpp in Sources */,
-				A9A578A52054A0E20072F392 /* Intermediate.cpp in Sources */,
-				A9A578972054A0E20072F392 /* IntermTraverse.cpp in Sources */,
-				A9A578C72054A0E20072F392 /* PpTokens.cpp in Sources */,
+				A93E82D4211F76F6001FEBD4 /* limits.cpp in Sources */,
+				A93E8300211F76F6001FEBD4 /* linkValidate.cpp in Sources */,
+				A93E8292211F76F6001FEBD4 /* Logger.cpp in Sources */,
+				A93E829C211F76F6001FEBD4 /* ossource.cpp in Sources */,
 				A90940A71C5808BB0094110D /* GLSLToSPIRVConverter.cpp in Sources */,
-				A9A5789D2054A0E20072F392 /* PoolAlloc.cpp in Sources */,
-				A9A5788F2054A0E20072F392 /* limits.cpp in Sources */,
-				A9A5788D2054A0E20072F392 /* glslang_tab.cpp in Sources */,
-				A9A578852054A0E20072F392 /* Scan.cpp in Sources */,
-				A9A578DB2054A0E20072F392 /* InitializeDll.cpp in Sources */,
-				A9A578A72054A0E20072F392 /* SymbolTable.cpp in Sources */,
-				A9A5789B2054A0E20072F392 /* iomapper.cpp in Sources */,
-				A9A578B72054A0E20072F392 /* Versions.cpp in Sources */,
-				A9A578992054A0E20072F392 /* intermOut.cpp in Sources */,
-				A9A5788B2054A0E20072F392 /* Initialize.cpp in Sources */,
-				A9A578372054A0E20072F392 /* SpvBuilder.cpp in Sources */,
-				A9A578B12054A0E20072F392 /* reflection.cpp in Sources */,
-				A9A5783F2054A0E20072F392 /* GlslangToSpv.cpp in Sources */,
-				A9A578A32054A0E20072F392 /* InfoSink.cpp in Sources */,
-				A9A578532054A0E20072F392 /* doc.cpp in Sources */,
-				A9A5784B2054A0E20072F392 /* SPVRemapper.cpp in Sources */,
-				A9A578BB2054A0E20072F392 /* linkValidate.cpp in Sources */,
-				A9A578D72054A0E20072F392 /* Link.cpp in Sources */,
-				A9A578552054A0E20072F392 /* disassemble.cpp in Sources */,
-				A9A578B92054A0E20072F392 /* Constant.cpp in Sources */,
+				A93E82E0211F76F6001FEBD4 /* iomapper.cpp in Sources */,
+				A93E82DC211F76F6001FEBD4 /* IntermTraverse.cpp in Sources */,
+				A93E829A211F76F6001FEBD4 /* disassemble.cpp in Sources */,
+				A93E82E8211F76F6001FEBD4 /* InfoSink.cpp in Sources */,
+				A93E8312211F76F6001FEBD4 /* ParseContextBase.cpp in Sources */,
+				A93E8284211F76F6001FEBD4 /* GlslangToSpv.cpp in Sources */,
+				A93E82EC211F76F6001FEBD4 /* SymbolTable.cpp in Sources */,
+				A93E8304211F76F6001FEBD4 /* PpAtom.cpp in Sources */,
+				A93E8274211F76F6001FEBD4 /* InReadableOrder.cpp in Sources */,
+				A93E82D2211F76F6001FEBD4 /* glslang_tab.cpp in Sources */,
+				A93E8310211F76F6001FEBD4 /* PpScanner.cpp in Sources */,
+				A93E82E2211F76F6001FEBD4 /* PoolAlloc.cpp in Sources */,
+				A93E82F6211F76F6001FEBD4 /* reflection.cpp in Sources */,
+				A93E82EA211F76F6001FEBD4 /* Intermediate.cpp in Sources */,
+				A93E8308211F76F6001FEBD4 /* Pp.cpp in Sources */,
+				A93E82F4211F76F6001FEBD4 /* attribute.cpp in Sources */,
+				A93E82D6211F76F6001FEBD4 /* parseConst.cpp in Sources */,
+				A93E827C211F76F6001FEBD4 /* SpvBuilder.cpp in Sources */,
+				A93E82CA211F76F6001FEBD4 /* Scan.cpp in Sources */,
+				A93E82BC211F76F6001FEBD4 /* ParseHelper.cpp in Sources */,
+				A93E82F8211F76F6001FEBD4 /* RemoveTree.cpp in Sources */,
+				A93E82FC211F76F6001FEBD4 /* Versions.cpp in Sources */,
+				A93E8320211F76F6001FEBD4 /* InitializeDll.cpp in Sources */,
+				A93E82D0211F76F6001FEBD4 /* Initialize.cpp in Sources */,
+				A93E830E211F76F6001FEBD4 /* PpContext.cpp in Sources */,
+				A93E82DE211F76F6001FEBD4 /* intermOut.cpp in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -2487,46 +2495,47 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				A9A578CE2054A0E20072F392 /* ParseContextBase.cpp in Sources */,
-				A9A578582054A0E20072F392 /* ossource.cpp in Sources */,
-				A9A578CA2054A0E20072F392 /* PpContext.cpp in Sources */,
+				A93E8299211F76F6001FEBD4 /* doc.cpp in Sources */,
+				A93E831D211F76F6001FEBD4 /* Link.cpp in Sources */,
+				A93E8273211F76F6001FEBD4 /* SpvPostProcess.cpp in Sources */,
+				A93E82E5211F76F6001FEBD4 /* ShaderLang.cpp in Sources */,
+				A93E831B211F76F6001FEBD4 /* CodeGen.cpp in Sources */,
+				A93E830D211F76F6001FEBD4 /* PpTokens.cpp in Sources */,
+				A93E8291211F76F6001FEBD4 /* SPVRemapper.cpp in Sources */,
+				A93E82C3211F76F6001FEBD4 /* propagateNoContraction.cpp in Sources */,
+				A93E82FF211F76F6001FEBD4 /* Constant.cpp in Sources */,
 				A90941A41C581F840094110D /* GLSLConversion.mm in Sources */,
-				A9A5784E2054A0E20072F392 /* Logger.cpp in Sources */,
-				A9A578302054A0E20072F392 /* InReadableOrder.cpp in Sources */,
-				A9A578922054A0E20072F392 /* parseConst.cpp in Sources */,
-				A9A578A02054A0E20072F392 /* ShaderLang.cpp in Sources */,
-				A9A578B02054A0E20072F392 /* attribute.cpp in Sources */,
-				A9A578D62054A0E20072F392 /* CodeGen.cpp in Sources */,
-				A9A578CC2054A0E20072F392 /* PpScanner.cpp in Sources */,
-				A9A578B42054A0E20072F392 /* RemoveTree.cpp in Sources */,
-				A9A5787E2054A0E20072F392 /* propagateNoContraction.cpp in Sources */,
-				A9A578782054A0E20072F392 /* ParseHelper.cpp in Sources */,
-				A9A578C42054A0E20072F392 /* Pp.cpp in Sources */,
-				A9A578C02054A0E20072F392 /* PpAtom.cpp in Sources */,
-				A9A578A62054A0E20072F392 /* Intermediate.cpp in Sources */,
-				A9A578982054A0E20072F392 /* IntermTraverse.cpp in Sources */,
-				A9A578C82054A0E20072F392 /* PpTokens.cpp in Sources */,
+				A93E82D5211F76F6001FEBD4 /* limits.cpp in Sources */,
+				A93E8301211F76F6001FEBD4 /* linkValidate.cpp in Sources */,
+				A93E8293211F76F6001FEBD4 /* Logger.cpp in Sources */,
+				A93E829D211F76F6001FEBD4 /* ossource.cpp in Sources */,
 				A90940A81C5808BB0094110D /* GLSLToSPIRVConverter.cpp in Sources */,
-				A9A5789E2054A0E20072F392 /* PoolAlloc.cpp in Sources */,
-				A9A578902054A0E20072F392 /* limits.cpp in Sources */,
-				A9A5788E2054A0E20072F392 /* glslang_tab.cpp in Sources */,
-				A9A578862054A0E20072F392 /* Scan.cpp in Sources */,
-				A9A578DC2054A0E20072F392 /* InitializeDll.cpp in Sources */,
-				A9A578A82054A0E20072F392 /* SymbolTable.cpp in Sources */,
-				A9A5789C2054A0E20072F392 /* iomapper.cpp in Sources */,
-				A9A578B82054A0E20072F392 /* Versions.cpp in Sources */,
-				A9A5789A2054A0E20072F392 /* intermOut.cpp in Sources */,
-				A9A5788C2054A0E20072F392 /* Initialize.cpp in Sources */,
-				A9A578382054A0E20072F392 /* SpvBuilder.cpp in Sources */,
-				A9A578B22054A0E20072F392 /* reflection.cpp in Sources */,
-				A9A578402054A0E20072F392 /* GlslangToSpv.cpp in Sources */,
-				A9A578A42054A0E20072F392 /* InfoSink.cpp in Sources */,
-				A9A578542054A0E20072F392 /* doc.cpp in Sources */,
-				A9A5784C2054A0E20072F392 /* SPVRemapper.cpp in Sources */,
-				A9A578BC2054A0E20072F392 /* linkValidate.cpp in Sources */,
-				A9A578D82054A0E20072F392 /* Link.cpp in Sources */,
-				A9A578562054A0E20072F392 /* disassemble.cpp in Sources */,
-				A9A578BA2054A0E20072F392 /* Constant.cpp in Sources */,
+				A93E82E1211F76F6001FEBD4 /* iomapper.cpp in Sources */,
+				A93E82DD211F76F6001FEBD4 /* IntermTraverse.cpp in Sources */,
+				A93E829B211F76F6001FEBD4 /* disassemble.cpp in Sources */,
+				A93E82E9211F76F6001FEBD4 /* InfoSink.cpp in Sources */,
+				A93E8313211F76F6001FEBD4 /* ParseContextBase.cpp in Sources */,
+				A93E8285211F76F6001FEBD4 /* GlslangToSpv.cpp in Sources */,
+				A93E82ED211F76F6001FEBD4 /* SymbolTable.cpp in Sources */,
+				A93E8305211F76F6001FEBD4 /* PpAtom.cpp in Sources */,
+				A93E8275211F76F6001FEBD4 /* InReadableOrder.cpp in Sources */,
+				A93E82D3211F76F6001FEBD4 /* glslang_tab.cpp in Sources */,
+				A93E8311211F76F6001FEBD4 /* PpScanner.cpp in Sources */,
+				A93E82E3211F76F6001FEBD4 /* PoolAlloc.cpp in Sources */,
+				A93E82F7211F76F6001FEBD4 /* reflection.cpp in Sources */,
+				A93E82EB211F76F6001FEBD4 /* Intermediate.cpp in Sources */,
+				A93E8309211F76F6001FEBD4 /* Pp.cpp in Sources */,
+				A93E82F5211F76F6001FEBD4 /* attribute.cpp in Sources */,
+				A93E82D7211F76F6001FEBD4 /* parseConst.cpp in Sources */,
+				A93E827D211F76F6001FEBD4 /* SpvBuilder.cpp in Sources */,
+				A93E82CB211F76F6001FEBD4 /* Scan.cpp in Sources */,
+				A93E82BD211F76F6001FEBD4 /* ParseHelper.cpp in Sources */,
+				A93E82F9211F76F6001FEBD4 /* RemoveTree.cpp in Sources */,
+				A93E82FD211F76F6001FEBD4 /* Versions.cpp in Sources */,
+				A93E8321211F76F6001FEBD4 /* InitializeDll.cpp in Sources */,
+				A93E82D1211F76F6001FEBD4 /* Initialize.cpp in Sources */,
+				A93E830F211F76F6001FEBD4 /* PpContext.cpp in Sources */,
+				A93E82DF211F76F6001FEBD4 /* intermOut.cpp in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};