Merge master 1.0.36 into Metal-3.0 branch.
diff --git a/Common/MVKOSExtensions.mm b/Common/MVKOSExtensions.mm
index 7759e48..39ef03b 100644
--- a/Common/MVKOSExtensions.mm
+++ b/Common/MVKOSExtensions.mm
@@ -76,10 +76,12 @@
#pragma mark Process environment
string mvkGetEnvVar(string varName, bool* pWasFound) {
- NSDictionary* env = [[NSProcessInfo processInfo] environment];
- NSString* envStr = env[@(varName.c_str())];
- if (pWasFound) { *pWasFound = envStr != nil; }
- return envStr ? envStr.UTF8String : "";
+ @autoreleasepool {
+ NSDictionary*nsEnv = [[NSProcessInfo processInfo] environment];
+ NSString* envStr = nsEnv[@(varName.c_str())];
+ if (pWasFound) { *pWasFound = envStr != nil; }
+ return envStr ? envStr.UTF8String : "";
+ }
}
int64_t mvkGetEnvVarInt64(string varName, bool* pWasFound) {
diff --git a/Demos/LunarG-VulkanSamples/API-Samples/iOS/DemoViewController.mm b/Demos/LunarG-VulkanSamples/API-Samples/iOS/DemoViewController.mm
index e922cf4..cb00c5c 100644
--- a/Demos/LunarG-VulkanSamples/API-Samples/iOS/DemoViewController.mm
+++ b/Demos/LunarG-VulkanSamples/API-Samples/iOS/DemoViewController.mm
@@ -32,7 +32,7 @@
* Initialize sample from view, and resize view in accordance with the sample.
*/
void init_window(struct sample_info &info) {
- info.window = sampleView;
+ info.caMetalLayer = sampleView.layer;
sampleView.bounds = CGRectMake(0, 0, info.width, info.height);
}
diff --git a/Demos/LunarG-VulkanSamples/API-Samples/macOS/DemoViewController.mm b/Demos/LunarG-VulkanSamples/API-Samples/macOS/DemoViewController.mm
index 7b1bb64..aecb779 100644
--- a/Demos/LunarG-VulkanSamples/API-Samples/macOS/DemoViewController.mm
+++ b/Demos/LunarG-VulkanSamples/API-Samples/macOS/DemoViewController.mm
@@ -33,7 +33,7 @@
* Initialize sample from view, and resize view in accordance with the sample.
*/
void init_window(struct sample_info &info) {
- info.window = sampleView;
+ info.caMetalLayer = sampleView.layer;
sampleView.bounds = CGRectMake(0, 0, info.width, info.height);
}
diff --git a/Demos/LunarG-VulkanSamples/Cube/iOS/DemoViewController.m b/Demos/LunarG-VulkanSamples/Cube/iOS/DemoViewController.m
index 9706ebc..e0cce29 100644
--- a/Demos/LunarG-VulkanSamples/Cube/iOS/DemoViewController.m
+++ b/Demos/LunarG-VulkanSamples/Cube/iOS/DemoViewController.m
@@ -43,7 +43,7 @@
self.view.contentScaleFactor = UIScreen.mainScreen.nativeScale;
const char* arg = "cube";
- demo_main(&demo, self.view, 1, &arg);
+ demo_main(&demo, self.view.layer, 1, &arg);
demo_draw(&demo);
uint32_t fps = 60;
diff --git a/Demos/LunarG-VulkanSamples/Cube/macOS/DemoViewController.m b/Demos/LunarG-VulkanSamples/Cube/macOS/DemoViewController.m
index 5c6fa42..1629f76 100644
--- a/Demos/LunarG-VulkanSamples/Cube/macOS/DemoViewController.m
+++ b/Demos/LunarG-VulkanSamples/Cube/macOS/DemoViewController.m
@@ -42,8 +42,9 @@
[super viewDidLoad];
self.view.wantsLayer = YES; // Back the view with a layer created by the makeBackingLayer method.
+
const char* arg = "cube";
- demo_main(&demo, self.view, 1, &arg);
+ demo_main(&demo, self.view.layer, 1, &arg);
CVDisplayLinkCreateWithActiveCGDisplays(&_displayLink);
CVDisplayLinkSetOutputCallback(_displayLink, &DisplayLinkCallback, &demo);
diff --git a/Demos/LunarG-VulkanSamples/Hologram/ShellMVK.cpp b/Demos/LunarG-VulkanSamples/Hologram/ShellMVK.cpp
index 263f004..32e3ae9 100644
--- a/Demos/LunarG-VulkanSamples/Hologram/ShellMVK.cpp
+++ b/Demos/LunarG-VulkanSamples/Hologram/ShellMVK.cpp
@@ -48,12 +48,7 @@
_profile_start_time = _current_time;
_profile_present_count = 0;
-#ifdef VK_USE_PLATFORM_IOS_MVK
- instance_extensions_.push_back(VK_MVK_IOS_SURFACE_EXTENSION_NAME);
-#endif
-#ifdef VK_USE_PLATFORM_MACOS_MVK
- instance_extensions_.push_back(VK_MVK_MACOS_SURFACE_EXTENSION_NAME);
-#endif
+ instance_extensions_.push_back(VK_EXT_METAL_SURFACE_EXTENSION_NAME);
init_vk();
}
@@ -78,22 +73,12 @@
VkSurfaceKHR surface;
VkResult err;
-#ifdef VK_USE_PLATFORM_IOS_MVK
- VkIOSSurfaceCreateInfoMVK surface_info;
- surface_info.sType = VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK;
+ VkMetalSurfaceCreateInfoEXT surface_info;
+ surface_info.sType = VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT;
surface_info.pNext = NULL;
surface_info.flags = 0;
- surface_info.pView = _view;
- err = vkCreateIOSSurfaceMVK(instance, &surface_info, NULL, &surface);
-#endif
-#ifdef VK_USE_PLATFORM_MACOS_MVK
- VkMacOSSurfaceCreateInfoMVK surface_info;
- surface_info.sType = VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK;
- surface_info.pNext = NULL;
- surface_info.flags = 0;
- surface_info.pView = _view;
- err = vkCreateMacOSSurfaceMVK(instance, &surface_info, NULL, &surface);
-#endif
+ surface_info.pLayer = _caMetalLayer;
+ err = vkCreateMetalSurfaceEXT(instance, &surface_info, NULL, &surface);
assert(!err);
return surface;
@@ -124,8 +109,8 @@
}
}
-void ShellMVK::run(void* view) {
- _view = view; // not retained
+void ShellMVK::run(void* caMetalLayer) {
+ _caMetalLayer = caMetalLayer; // not retained
create_context();
resize_swapchain(settings_.initial_width, settings_.initial_height);
}
diff --git a/Demos/LunarG-VulkanSamples/Hologram/ShellMVK.h b/Demos/LunarG-VulkanSamples/Hologram/ShellMVK.h
index 5948b06..4309920 100644
--- a/Demos/LunarG-VulkanSamples/Hologram/ShellMVK.h
+++ b/Demos/LunarG-VulkanSamples/Hologram/ShellMVK.h
@@ -49,7 +49,7 @@
void quit() { }
protected:
- void* _view;
+ void* _caMetalLayer;
PosixTimer _timer;
double _current_time;
double _profile_start_time;
diff --git a/Demos/LunarG-VulkanSamples/Hologram/iOS/DemoViewController.mm b/Demos/LunarG-VulkanSamples/Hologram/iOS/DemoViewController.mm
index 7d0945a..bbfe4c1 100644
--- a/Demos/LunarG-VulkanSamples/Hologram/iOS/DemoViewController.mm
+++ b/Demos/LunarG-VulkanSamples/Hologram/iOS/DemoViewController.mm
@@ -45,12 +45,12 @@
self.view.contentScaleFactor = UIScreen.mainScreen.nativeScale;
std::vector<std::string> args;
- args.push_back("-p"); // Use push constants
+ args.push_back("-p"); // Use push constants
// args.push_back("-s"); // Use a single thread
_game = new Hologram(args);
_shell = new ShellMVK(*_game);
- _shell->run(self.view);
+ _shell->run(self.view.layer);
uint32_t fps = 60;
_displayLink = [CADisplayLink displayLinkWithTarget: self selector: @selector(renderLoop)];
diff --git a/Demos/LunarG-VulkanSamples/Hologram/macOS/DemoViewController.mm b/Demos/LunarG-VulkanSamples/Hologram/macOS/DemoViewController.mm
index e30ee21..6e169f0 100644
--- a/Demos/LunarG-VulkanSamples/Hologram/macOS/DemoViewController.mm
+++ b/Demos/LunarG-VulkanSamples/Hologram/macOS/DemoViewController.mm
@@ -46,12 +46,12 @@
self.view.wantsLayer = YES; // Back the view with a layer created by the makeBackingLayer method.
std::vector<std::string> args;
-// args.push_back("-p"); // Uncomment to use push constants
+ args.push_back("-p"); // Uncomment to use push constants
// args.push_back("-s"); // Uncomment to use a single thread
_game = new Hologram(args);
_shell = new ShellMVK(*_game);
- _shell->run(self.view);
+ _shell->run(self.view.layer);
CVDisplayLinkCreateWithActiveCGDisplays(&_displayLink);
CVDisplayLinkSetOutputCallback(_displayLink, &DisplayLinkCallback, _shell);
diff --git a/Docs/MoltenVK_Runtime_UserGuide.md b/Docs/MoltenVK_Runtime_UserGuide.md
index 8310e03..e4cf172 100644
--- a/Docs/MoltenVK_Runtime_UserGuide.md
+++ b/Docs/MoltenVK_Runtime_UserGuide.md
@@ -240,47 +240,45 @@
- `VK_KHR_maintenance3`
- `VK_KHR_push_descriptor`
- `VK_KHR_relaxed_block_layout`
-- `VK_KHR_sampler_mirror_clamp_to_edge`
+- `VK_KHR_sampler_mirror_clamp_to_edge` *(macOS)*
- `VK_KHR_shader_draw_parameters`
- `VK_KHR_shader_float16_int8`
- `VK_KHR_storage_buffer_storage_class`
- `VK_KHR_surface`
- `VK_KHR_swapchain`
- `VK_KHR_swapchain_mutable_format`
+- `VK_KHR_uniform_buffer_standard_layout`
- `VK_KHR_variable_pointers`
+- `VK_EXT_debug_marker`
- `VK_EXT_debug_report`
+- `VK_EXT_debug_utils`
- `VK_EXT_host_query_reset`
-- `VK_EXT_memory_budget`
+- `VK_EXT_memory_budget` *(requires Metal 2.0)*
+- `VK_EXT_metal_surface`
+- `VK_EXT_post_depth_coverage` *(iOS, requires GPU family 4)*
+- `VK_EXT_scalar_block_layout`
+- `VK_EXT_shader_stencil_export` *(requires Mac GPU family 2 or iOS GPU family 5)*
- `VK_EXT_shader_viewport_index_layer`
+- `VK_EXT_swapchain_colorspace` *(macOS)*
- `VK_EXT_vertex_attribute_divisor`
+- `VK_EXT_texel_buffer_alignment` *(requires Metal 2.0)*
- `VK_EXTX_portability_subset`
-- `VK_MVK_ios_surface` (iOS)
-- `VK_MVK_macos_surface` (macOS)
+- `VK_MVK_ios_surface` *(iOS) (Obsolete. Use `VK_EXT_metal_surface` instead.)*
+- `VK_MVK_macos_surface` *(macOS) (Obsolete. Use `VK_EXT_metal_surface` instead.)*
- `VK_MVK_moltenvk`
- `VK_AMD_gpu_shader_half_float`
- `VK_AMD_negative_viewport_height`
-- `VK_IMG_format_pvrtc` (iOS)
+- `VK_AMD_shader_image_load_store_lod` *(iOS)*
+- `VK_AMD_shader_trinary_minmax` *(requires Metal 2.1)*
+- `VK_IMG_format_pvrtc` *(iOS)*
+- `VK_INTEL_shader_integer_functions2`
- `VK_NV_glsl_shader`
-In order to visibly display your content on *iOS* or *macOS*, you must enable the `VK_MVK_ios_surface`
-or `VK_MVK_macos_surface` extension, respectively, and use the functions defined for that extension
-to create a *Vulkan* rendering surface.
-
-You can enable each of these extensions by defining the `VK_USE_PLATFORM_IOS_MVK` or
-`VK_USE_PLATFORM_MACOS_MVK` guard macro in your compiler build settings. See the description
-of the `mvk_vulkan.h` file below for a convenient way to enable these extensions automatically.
-
-When using the `VK_MVK_macos_surface ` extension, the `pView` member of the `VkMacOSSurfaceCreateInfoMVK`
-structure passed in the `vkCreateMacOSSurfaceMVK` function can be either an `NSView` whose layer is a
-`CAMetalLayer`, or the `CAMetalLayer` itself. Passing the `CAMetalLayer` itself is recommended when
-calling the `vkCreateMacOSSurfaceMVK` function from outside the main application thread, as `NSView`
-should only be accessed from the main application thread.
-
-When using the `VK_MVK_ios_surface ` extension, the `pView` member of the `VkIOSSurfaceCreateInfoMVK`
-structure passed in the `vkCreateIOSSurfaceMVK` function can be either a `UIView` whose layer is a
-`CAMetalLayer`, or the `CAMetalLayer` itself. Passing the `CAMetalLayer` itself is recommended when
-calling the `vkCreateIOSSurfaceMVK ` function from outside the main application thread, as `UIView`
-should only be accessed from the main application thread.
+In order to visibly display your content on *iOS* or *macOS*, you must enable the `VK_EXT_metal_surface`
+extension, and use the function defined in that extension to create a *Vulkan* rendering surface.
+You can enable the `VK_EXT_metal_surface` extension by defining the `VK_USE_PLATFORM_METAL_EXT`
+guard macro in your compiler build settings. See the description of the `mvk_vulkan.h` file below for
+a convenient way to enable this extension automatically.
<a name="moltenvk_extension"></a>
@@ -306,10 +304,8 @@
enabled for *iOS* or *macOS*. Use this header file in place of the `vulkan.h` header file,
where access to a **MoltenVK** platform surface extension is required.
- - When building for *iOS*, the `mvk_vulkan.h` header file automatically enables the
- `VK_USE_PLATFORM_IOS_MVK` build setting and `VK_MVK_ios_surface` *Vulkan* extension.
- - When building for *macOS*, the `mvk_vulkan.h` header file automatically enables the
- `VK_USE_PLATFORM_MACOS_MVK` build setting and `VK_MVK_macos_surface` *Vulkan* extension.
+ The `mvk_vulkan.h` header file automatically enables the `VK_USE_PLATFORM_METAL_EXT`
+ build setting and `VK_EXT_metal_surface` *Vulkan* extension.
- `mvk_datatypes.h` - Contains helpful functions for converting between *Vulkan* and *Metal* data types.
You do not need to use this functionality to use **MoltenVK**, as **MoltenVK** converts between
@@ -317,6 +313,13 @@
These functions are exposed in this header for your own purposes such as interacting with *Metal*
directly, or simply logging data values.
+>***Note:*** The functions in `vk_mvk_moltenvk.h` are not supported by the *Vulkan SDK Loader and Layers*
+ framework. The opaque Vulkan objects used by the functions in `vk_mvk_moltenvk.h` (`VkInstance`,
+ `VkPhysicalDevice`, `VkShaderModule`, `VKImage`, ...), must have been retrieved directly from **MoltenVK**,
+ and not through the *Vulkan SDK Loader and Layers* framework. The *Vulkan SDK Loader and Layers* framework
+ often changes these opaque objects, and passing them from a higher layer directly to **MoltenVK** will
+ result in undefined behaviour.
+
<a name="moltenvk_config"></a>
### Configuring MoltenVK
diff --git a/Docs/Whats_New.md b/Docs/Whats_New.md
index fbca82f..50c5b0b 100644
--- a/Docs/Whats_New.md
+++ b/Docs/Whats_New.md
@@ -13,14 +13,107 @@
-MoltenVK 1.0.36
+MoltenVK 1.0.37
---------------
Released TBD
+- Revert to supporting host-coherent memory for linear images on macOS.
+- Ensure Vulkan loader magic number is set every time before returning any dispatchable Vulkan handle.
+
+
+
+MoltenVK 1.0.36
+---------------
+
+Released 2019/07/25
+
+- Add support for extensions:
+ - `VK_KHR_device_group_creation`
+ - `VK_KHR_swapchain_mutable_format`
+ - `VK_KHR_uniform_buffer_standard_layout`
+ - `VK_EXT_metal_surface`
+ - `VK_EXT_post_depth_coverage`
+ - `VK_EXT_scalar_block_layout`
+ - `VK_EXT_shader_stencil_export`
+ - `VK_EXT_swapchain_colorspace`
+ - `VK_EXT_texel_buffer_alignment`
+ - `VK_AMD_shader_image_load_store_lod`
+ - `VK_AMD_shader_trinary_minmax`
+ - `VK_INTEL_shader_integer_functions2`
+- Support `VK_FORMAT_A2R10G10B10_UNORM_PACK32` as a surface format and view format.
+- For shaders created directly from MSL, set function name from
+ `VkPipelineShaderStageCreateInfo::pName`.
- On iOS GPU family 2 and earlier, support immutable depth-compare samplers
- as constexpr samplers hardcoded in MSL.
-- Skip SPIRV-Tools build in Travis.
+ as `constexpr` samplers hardcoded in MSL.
+- `vkCmdCopyImage()` support copying between compressed and uncompressed formats
+ and validate that formats are compatible for copying.
+- `vkCmdBufferImageCopy()` fix crash when setting bytes per image in non-arrayed images.
+- `vkCmdBlitImage()` supports blit between different texture formats, and multisampled images.
+- `vkCmdResolveImage()` supports textures of different sizes.
+- `vkCmdClearImage()` returns error if texture is not renderable.
+- Move push constant binding to `vkCmdBindPipeline()` from `vkCmdBindDescriptorSet()`.
+- `MVKDeviceMemory` keep `MTLResourceOptions` aligned with `MTLStorageMode` & `MTLCPUCacheMode`.
+- Texture memory requirements don't use shared storage on macOS.
+- Add `MTLCommandBuffer` completion timing performance tracking option.
+- Expand `MVK_CONFIG_TRACE_VULKAN_CALLS` to optionally log Vulkan call timings.
+- Skip `SPIRV-Tools` build in Travis because Travis does not support the required Python 3.
+- Separate `SPIRVToMSLConverterContext` into input config and output results.
+- Use native Metal texture buffers when available.
+- Fix issue with push constants used across multiple draw calls not being applied.
+- Fix memory leak in debug marker and debug utils labelling.
+- Reduce memory leaks when autorelease pools are not available.
+- Fix pipeline cache lookups.
+- Fix race condition between swapchain image destruction and presentation completion callback.
+- Set Metal texture usage to allow texture copy via view.
+- Fix memory leak in debug marker and debug utils labelling.
+- Fix issue with push constants used across multiple draw calls not being applied.
+- Fix crash when binding descriptor set to layout that has been destroyed and recreated.
+- Return error when `MVKImage` created as 1D attachment.
+- Reduce use of autoreleased Obj-C objects, and ensure those remaining are
+ covered by deliberate autorelease pools.
+- Document that the functions in `vk_mvk_moltenvk.h` cannot be used with objects
+ retrieved through the *Vulkan SDK Loader and Layers* framework.
+- Update `VK_MVK_MOLTENVK_SPEC_VERSION` to 21.
+- Update dependency libraries to match Vulkan SDK 1.1.114.
+- Update to latest SPIRV-Cross version:
+ - MSL: Support `SPV_KHR_multiview` extension.
+ - MSL: Support the `SPV_KHR_post_depth_coverage` extension.
+ - MSL: Support the `SPV_AMD_shader_trinary_minmax` extension.
+ - MSL: Support the `SPV_KHR_device_group` extension.
+ - MSL: Support the `SPV_INTEL_shader_integer_functions2` extension.
+ - MSL: Support `SubgroupSize` / `SubgroupInvocationID` in fragment.
+ - MSL: Support `OpImageQueryLod`.
+ - MSL: Support `MinLod` operand.
+ - MSL: Support `PrimitiveID` in fragment and barycentrics.
+ - MSL: Support 64-bit integers.
+ - MSL: Support `OpOuterProduct`.
+ - MSL: Support `SubgroupLocalInvocationId` and `SubgroupSize` in all stages.
+ - MSL: Support scalar reflect and refract.
+ - MSL: Support scalar block layout.
+ - MSL: Use the `select()` function for `OpSelect`.
+ - MSL: Handle `coherent`, `volatile`, and `restrict`.
+ - MSL: Refactor buffer packing logic from ground up.
+ - MSL: Fix alignment of packed types.
+ - MSL: Handle packed matrices.
+ - MSL: Conditionally validate MSL 2.2 shaders.
+ - MSL: Rewrite how resource indices are fallback-assigned.
+ - MSL: Support custom bindings for argument buffers.
+ - MSL: Fix sampling with `FP16` coordinates.
+ - MSL: Deal with scalar input values for distance/length/normalize.
+ - MSL: Error out on `int64_t/uint64_t` buffer members as unsupported by Metal.
+ - MSL: Deal with scalar input values for distance/length/normalize.
+ - MSL: Re-roll array expressions in initializers.
+ - MSL: New SDK errors out on cull distance.
+ - Rewrite how switch block case labels are emitted.
+ - Fixes to handling of `OpPhi` and case fallthrough.
+ - Fix declaration of loop variables with a `OpPhi` helper copy.
+ - Handle more cases with FP16 and texture sampling.
+ - Fix variable scope when an `if` or `else` block dominates a variable.
+ - Fall back to complex loop if non-trivial continue block is found.
+ - Remove unreasonable assertion for `OpTypeImage Sampled` parameter.
+ - Propagate NonUniformEXT to dependent expressions.
+ - Deal correctly with return sign of bitscan operations.
@@ -44,7 +137,7 @@
- Fix tessellated indirect draws using wrong kernels to map parameters.
- Work around potential Metal bug with stage-in indirect buffers.
- Fix zero local threadgroup size in indirect tessellated rendering.
- - Fix [[attribute]] assignment for tessellation evaluation shaders.
+ - Fix `[[attribute]]` assignment for tessellation evaluation shaders.
- `VkSemaphore` optionally uses `MTLEvent`, if available and
`MVK_ALLOW_METAL_EVENTS` environment variable is enabled.
- Add `vkSetWorkgroupSizeMVK()` to set compute kernel workgroup size
@@ -69,7 +162,7 @@
- Fix unused attachments terminating loop early.
- Fix offset of buffer view relative to buffer offset within device memory.
- Guard against missing Metal pipeline states when pipeline compilation fails.
-- MVKBuffer: Force managed storage for linear textures on shared buffers.
+- `MVKBuffer`: Force managed storage for linear textures on shared buffers.
- Use device address space when decompressing DXT image data.
- Added missing `texelBufferTextureWidth` setting in `MVKComputePipeline::getMTLFunction()`.
- Fixes and consolidation of external library header references.
@@ -97,7 +190,7 @@
- MSL: Support Invariant qualifier on position.
- MSL: Support stencil export.
- Deal with case where a block is somehow emitted in a duplicated fashion.
- - Fix infinite loop when OpAtomic* temporaries are used in other blocks.
+ - Fix infinite loop when `OpAtomic*` temporaries are used in other blocks.
- Fix tests for device->constant address space change in MSL tessellation control shader generation.
- Accept SPIR-V 1.4 version.
@@ -241,7 +334,7 @@
- Allow default GPU Capture scope to be assigned to any queue in any queue family.
- VkPhysicalDevice: Correct some features and limits.
- Stop advertising atomic image support.
-- vkSetMTLTextureMVK() function retains texture object.
+- `vkSetMTLTextureMVK()` function retains texture object.
- Log to stderr instead of stdout.
- `fetchDependencies`: build `spirv-tools` when attached via symlink.
- Enhancements to `MVKVector`, and set appropriate inline sizing usages.
@@ -568,7 +661,7 @@
Released 2018/07/31
- Disable rasterization and return void from vertex shaders that write to resources.
-- Add SPIRVToMSLConverterOptions::isRasterizationDisabled to allow pipeline and
+- Add SPIRVToMSLConversionOptions::isRasterizationDisabled to allow pipeline and
vertex shader to communicate rasterization status.
- Track layered rendering capability.
- Add MVKPhysicalDeviceMetalFeatures::layeredRendering.
diff --git a/ExternalDependencies.xcodeproj/project.pbxproj b/ExternalDependencies.xcodeproj/project.pbxproj
index d77a01a..80dc513 100644
--- a/ExternalDependencies.xcodeproj/project.pbxproj
+++ b/ExternalDependencies.xcodeproj/project.pbxproj
@@ -54,756 +54,6 @@
450A4F66221C5A95007203D7 /* spirv_reflect.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 450A4F63221C5A95007203D7 /* spirv_reflect.hpp */; };
450A4F67221C5A95007203D7 /* spirv_reflect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 450A4F64221C5A95007203D7 /* spirv_reflect.cpp */; };
450A4F68221C5A95007203D7 /* spirv_reflect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 450A4F64221C5A95007203D7 /* spirv_reflect.cpp */; };
- A94A68EE22B17BBB00C661C6 /* spirv_target_env.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A673E22B17BBB00C661C6 /* spirv_target_env.cpp */; };
- A94A68EF22B17BBB00C661C6 /* spirv_target_env.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A673E22B17BBB00C661C6 /* spirv_target_env.cpp */; };
- A94A68F022B17BBB00C661C6 /* spirv_fuzzer_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A674022B17BBB00C661C6 /* spirv_fuzzer_options.h */; };
- A94A68F122B17BBB00C661C6 /* spirv_fuzzer_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A674022B17BBB00C661C6 /* spirv_fuzzer_options.h */; };
- A94A68F222B17BBB00C661C6 /* assembly_grammar.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A674122B17BBB00C661C6 /* assembly_grammar.h */; };
- A94A68F322B17BBB00C661C6 /* assembly_grammar.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A674122B17BBB00C661C6 /* assembly_grammar.h */; };
- A94A68F422B17BBB00C661C6 /* enum_set.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A674222B17BBB00C661C6 /* enum_set.h */; };
- A94A68F522B17BBB00C661C6 /* enum_set.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A674222B17BBB00C661C6 /* enum_set.h */; };
- A94A68F622B17BBB00C661C6 /* text.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A674522B17BBB00C661C6 /* text.cpp */; };
- A94A68F722B17BBB00C661C6 /* text.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A674522B17BBB00C661C6 /* text.cpp */; };
- A94A68F822B17BBB00C661C6 /* assembly_grammar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A674622B17BBB00C661C6 /* assembly_grammar.cpp */; };
- A94A68F922B17BBB00C661C6 /* assembly_grammar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A674622B17BBB00C661C6 /* assembly_grammar.cpp */; };
- A94A68FA22B17BBB00C661C6 /* text.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A674722B17BBB00C661C6 /* text.h */; };
- A94A68FB22B17BBB00C661C6 /* text.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A674722B17BBB00C661C6 /* text.h */; };
- A94A68FC22B17BBB00C661C6 /* extensions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A674822B17BBB00C661C6 /* extensions.cpp */; };
- A94A68FD22B17BBB00C661C6 /* extensions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A674822B17BBB00C661C6 /* extensions.cpp */; };
- A94A68FE22B17BBB00C661C6 /* pch_source.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A674922B17BBB00C661C6 /* pch_source.cpp */; };
- A94A68FF22B17BBB00C661C6 /* pch_source.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A674922B17BBB00C661C6 /* pch_source.cpp */; };
- A94A690022B17BBB00C661C6 /* parse_number.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A674B22B17BBB00C661C6 /* parse_number.h */; };
- A94A690122B17BBB00C661C6 /* parse_number.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A674B22B17BBB00C661C6 /* parse_number.h */; };
- A94A690222B17BBB00C661C6 /* ilist_node.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A674C22B17BBB00C661C6 /* ilist_node.h */; };
- A94A690322B17BBB00C661C6 /* ilist_node.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A674C22B17BBB00C661C6 /* ilist_node.h */; };
- A94A690422B17BBB00C661C6 /* make_unique.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A674D22B17BBB00C661C6 /* make_unique.h */; };
- A94A690522B17BBB00C661C6 /* make_unique.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A674D22B17BBB00C661C6 /* make_unique.h */; };
- A94A690622B17BBB00C661C6 /* string_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A674E22B17BBB00C661C6 /* string_utils.h */; };
- A94A690722B17BBB00C661C6 /* string_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A674E22B17BBB00C661C6 /* string_utils.h */; };
- A94A690822B17BBB00C661C6 /* small_vector.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A674F22B17BBB00C661C6 /* small_vector.h */; };
- A94A690922B17BBB00C661C6 /* small_vector.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A674F22B17BBB00C661C6 /* small_vector.h */; };
- A94A690A22B17BBB00C661C6 /* timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A675022B17BBB00C661C6 /* timer.cpp */; };
- A94A690B22B17BBB00C661C6 /* timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A675022B17BBB00C661C6 /* timer.cpp */; };
- A94A690C22B17BBB00C661C6 /* timer.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A675122B17BBB00C661C6 /* timer.h */; };
- A94A690D22B17BBB00C661C6 /* timer.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A675122B17BBB00C661C6 /* timer.h */; };
- A94A690E22B17BBB00C661C6 /* string_utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A675222B17BBB00C661C6 /* string_utils.cpp */; };
- A94A690F22B17BBB00C661C6 /* string_utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A675222B17BBB00C661C6 /* string_utils.cpp */; };
- A94A691022B17BBB00C661C6 /* bit_vector.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A675322B17BBB00C661C6 /* bit_vector.h */; };
- A94A691122B17BBB00C661C6 /* bit_vector.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A675322B17BBB00C661C6 /* bit_vector.h */; };
- A94A691222B17BBB00C661C6 /* bitutils.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A675422B17BBB00C661C6 /* bitutils.h */; };
- A94A691322B17BBB00C661C6 /* bitutils.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A675422B17BBB00C661C6 /* bitutils.h */; };
- A94A691422B17BBB00C661C6 /* hex_float.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A675522B17BBB00C661C6 /* hex_float.h */; };
- A94A691522B17BBB00C661C6 /* hex_float.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A675522B17BBB00C661C6 /* hex_float.h */; };
- A94A691622B17BBB00C661C6 /* parse_number.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A675622B17BBB00C661C6 /* parse_number.cpp */; };
- A94A691722B17BBB00C661C6 /* parse_number.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A675622B17BBB00C661C6 /* parse_number.cpp */; };
- A94A691822B17BBB00C661C6 /* bit_vector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A675722B17BBB00C661C6 /* bit_vector.cpp */; };
- A94A691922B17BBB00C661C6 /* bit_vector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A675722B17BBB00C661C6 /* bit_vector.cpp */; };
- A94A691A22B17BBB00C661C6 /* ilist.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A675822B17BBB00C661C6 /* ilist.h */; };
- A94A691B22B17BBB00C661C6 /* ilist.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A675822B17BBB00C661C6 /* ilist.h */; };
- A94A691C22B17BBB00C661C6 /* spirv_target_env.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A675922B17BBB00C661C6 /* spirv_target_env.h */; };
- A94A691D22B17BBB00C661C6 /* spirv_target_env.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A675922B17BBB00C661C6 /* spirv_target_env.h */; };
- A94A691E22B17BBB00C661C6 /* table.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A675A22B17BBB00C661C6 /* table.cpp */; };
- A94A691F22B17BBB00C661C6 /* table.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A675A22B17BBB00C661C6 /* table.cpp */; };
- A94A692022B17BBB00C661C6 /* operand_to_undef_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A675C22B17BBB00C661C6 /* operand_to_undef_reduction_opportunity_finder.h */; };
- A94A692122B17BBB00C661C6 /* operand_to_undef_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A675C22B17BBB00C661C6 /* operand_to_undef_reduction_opportunity_finder.h */; };
- A94A692222B17BBB00C661C6 /* remove_selection_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A675D22B17BBB00C661C6 /* remove_selection_reduction_opportunity.cpp */; };
- A94A692322B17BBB00C661C6 /* remove_selection_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A675D22B17BBB00C661C6 /* remove_selection_reduction_opportunity.cpp */; };
- A94A692422B17BBB00C661C6 /* remove_block_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A675E22B17BBB00C661C6 /* remove_block_reduction_opportunity.h */; };
- A94A692522B17BBB00C661C6 /* remove_block_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A675E22B17BBB00C661C6 /* remove_block_reduction_opportunity.h */; };
- A94A692622B17BBB00C661C6 /* operand_to_dominating_id_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A675F22B17BBB00C661C6 /* operand_to_dominating_id_reduction_opportunity_finder.h */; };
- A94A692722B17BBB00C661C6 /* operand_to_dominating_id_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A675F22B17BBB00C661C6 /* operand_to_dominating_id_reduction_opportunity_finder.h */; };
- A94A692822B17BBB00C661C6 /* reduction_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A676022B17BBB00C661C6 /* reduction_pass.cpp */; };
- A94A692922B17BBB00C661C6 /* reduction_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A676022B17BBB00C661C6 /* reduction_pass.cpp */; };
- A94A692A22B17BBB00C661C6 /* operand_to_const_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A676122B17BBB00C661C6 /* operand_to_const_reduction_opportunity_finder.cpp */; };
- A94A692B22B17BBB00C661C6 /* operand_to_const_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A676122B17BBB00C661C6 /* operand_to_const_reduction_opportunity_finder.cpp */; };
- A94A692C22B17BBB00C661C6 /* operand_to_const_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A676222B17BBB00C661C6 /* operand_to_const_reduction_opportunity_finder.h */; };
- A94A692D22B17BBB00C661C6 /* operand_to_const_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A676222B17BBB00C661C6 /* operand_to_const_reduction_opportunity_finder.h */; };
- A94A692E22B17BBB00C661C6 /* reduction_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A676422B17BBB00C661C6 /* reduction_util.cpp */; };
- A94A692F22B17BBB00C661C6 /* reduction_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A676422B17BBB00C661C6 /* reduction_util.cpp */; };
- A94A693022B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A676522B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity_finder.cpp */; };
- A94A693122B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A676522B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity_finder.cpp */; };
- A94A693222B17BBB00C661C6 /* simple_conditional_branch_to_branch_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A676622B17BBB00C661C6 /* simple_conditional_branch_to_branch_reduction_opportunity.h */; };
- A94A693322B17BBB00C661C6 /* simple_conditional_branch_to_branch_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A676622B17BBB00C661C6 /* simple_conditional_branch_to_branch_reduction_opportunity.h */; };
- A94A693422B17BBB00C661C6 /* remove_function_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A676722B17BBB00C661C6 /* remove_function_reduction_opportunity_finder.cpp */; };
- A94A693522B17BBB00C661C6 /* remove_function_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A676722B17BBB00C661C6 /* remove_function_reduction_opportunity_finder.cpp */; };
- A94A693622B17BBB00C661C6 /* remove_instruction_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A676822B17BBB00C661C6 /* remove_instruction_reduction_opportunity.h */; };
- A94A693722B17BBB00C661C6 /* remove_instruction_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A676822B17BBB00C661C6 /* remove_instruction_reduction_opportunity.h */; };
- A94A693822B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A676922B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h */; };
- A94A693922B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A676922B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h */; };
- A94A693A22B17BBB00C661C6 /* simple_conditional_branch_to_branch_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A676A22B17BBB00C661C6 /* simple_conditional_branch_to_branch_reduction_opportunity.cpp */; };
- A94A693B22B17BBB00C661C6 /* simple_conditional_branch_to_branch_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A676A22B17BBB00C661C6 /* simple_conditional_branch_to_branch_reduction_opportunity.cpp */; };
- A94A693C22B17BBB00C661C6 /* remove_function_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A676B22B17BBB00C661C6 /* remove_function_reduction_opportunity.cpp */; };
- A94A693D22B17BBB00C661C6 /* remove_function_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A676B22B17BBB00C661C6 /* remove_function_reduction_opportunity.cpp */; };
- A94A693E22B17BBB00C661C6 /* remove_opname_instruction_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A676C22B17BBB00C661C6 /* remove_opname_instruction_reduction_opportunity_finder.h */; };
- A94A693F22B17BBB00C661C6 /* remove_opname_instruction_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A676C22B17BBB00C661C6 /* remove_opname_instruction_reduction_opportunity_finder.h */; };
- A94A694022B17BBB00C661C6 /* simple_conditional_branch_to_branch_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A676D22B17BBB00C661C6 /* simple_conditional_branch_to_branch_opportunity_finder.cpp */; };
- A94A694122B17BBB00C661C6 /* simple_conditional_branch_to_branch_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A676D22B17BBB00C661C6 /* simple_conditional_branch_to_branch_opportunity_finder.cpp */; };
- A94A694222B17BBB00C661C6 /* remove_selection_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A676E22B17BBB00C661C6 /* remove_selection_reduction_opportunity_finder.cpp */; };
- A94A694322B17BBB00C661C6 /* remove_selection_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A676E22B17BBB00C661C6 /* remove_selection_reduction_opportunity_finder.cpp */; };
- A94A694422B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A676F22B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp */; };
- A94A694522B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A676F22B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp */; };
- A94A694622B17BBB00C661C6 /* simple_conditional_branch_to_branch_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A677022B17BBB00C661C6 /* simple_conditional_branch_to_branch_opportunity_finder.h */; };
- A94A694722B17BBB00C661C6 /* simple_conditional_branch_to_branch_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A677022B17BBB00C661C6 /* simple_conditional_branch_to_branch_opportunity_finder.h */; };
- A94A694822B17BBB00C661C6 /* merge_blocks_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A677122B17BBB00C661C6 /* merge_blocks_reduction_opportunity.cpp */; };
- A94A694922B17BBB00C661C6 /* merge_blocks_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A677122B17BBB00C661C6 /* merge_blocks_reduction_opportunity.cpp */; };
- A94A694A22B17BBB00C661C6 /* change_operand_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A677222B17BBB00C661C6 /* change_operand_reduction_opportunity.cpp */; };
- A94A694B22B17BBB00C661C6 /* change_operand_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A677222B17BBB00C661C6 /* change_operand_reduction_opportunity.cpp */; };
- A94A694C22B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A677322B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity.h */; };
- A94A694D22B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A677322B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity.h */; };
- A94A694E22B17BBB00C661C6 /* remove_function_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A677422B17BBB00C661C6 /* remove_function_reduction_opportunity.h */; };
- A94A694F22B17BBB00C661C6 /* remove_function_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A677422B17BBB00C661C6 /* remove_function_reduction_opportunity.h */; };
- A94A695022B17BBB00C661C6 /* change_operand_to_undef_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A677522B17BBB00C661C6 /* change_operand_to_undef_reduction_opportunity.h */; };
- A94A695122B17BBB00C661C6 /* change_operand_to_undef_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A677522B17BBB00C661C6 /* change_operand_to_undef_reduction_opportunity.h */; };
- A94A695222B17BBB00C661C6 /* remove_unreferenced_instruction_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A677622B17BBB00C661C6 /* remove_unreferenced_instruction_reduction_opportunity_finder.cpp */; };
- A94A695322B17BBB00C661C6 /* remove_unreferenced_instruction_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A677622B17BBB00C661C6 /* remove_unreferenced_instruction_reduction_opportunity_finder.cpp */; };
- A94A695422B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A677722B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity_finder.h */; };
- A94A695522B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A677722B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity_finder.h */; };
- A94A695622B17BBB00C661C6 /* remove_selection_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A677822B17BBB00C661C6 /* remove_selection_reduction_opportunity.h */; };
- A94A695722B17BBB00C661C6 /* remove_selection_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A677822B17BBB00C661C6 /* remove_selection_reduction_opportunity.h */; };
- A94A695822B17BBB00C661C6 /* remove_instruction_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A677922B17BBB00C661C6 /* remove_instruction_reduction_opportunity.cpp */; };
- A94A695922B17BBB00C661C6 /* remove_instruction_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A677922B17BBB00C661C6 /* remove_instruction_reduction_opportunity.cpp */; };
- A94A695A22B17BBB00C661C6 /* remove_selection_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A677A22B17BBB00C661C6 /* remove_selection_reduction_opportunity_finder.h */; };
- A94A695B22B17BBB00C661C6 /* remove_selection_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A677A22B17BBB00C661C6 /* remove_selection_reduction_opportunity_finder.h */; };
- A94A695C22B17BBB00C661C6 /* merge_blocks_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A677B22B17BBB00C661C6 /* merge_blocks_reduction_opportunity_finder.h */; };
- A94A695D22B17BBB00C661C6 /* merge_blocks_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A677B22B17BBB00C661C6 /* merge_blocks_reduction_opportunity_finder.h */; };
- A94A695E22B17BBB00C661C6 /* remove_opname_instruction_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A677C22B17BBB00C661C6 /* remove_opname_instruction_reduction_opportunity_finder.cpp */; };
- A94A695F22B17BBB00C661C6 /* remove_opname_instruction_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A677C22B17BBB00C661C6 /* remove_opname_instruction_reduction_opportunity_finder.cpp */; };
- A94A696022B17BBB00C661C6 /* pch_source_reduce.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A677D22B17BBB00C661C6 /* pch_source_reduce.cpp */; };
- A94A696122B17BBB00C661C6 /* pch_source_reduce.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A677D22B17BBB00C661C6 /* pch_source_reduce.cpp */; };
- A94A696222B17BBB00C661C6 /* reducer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A677E22B17BBB00C661C6 /* reducer.cpp */; };
- A94A696322B17BBB00C661C6 /* reducer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A677E22B17BBB00C661C6 /* reducer.cpp */; };
- A94A696422B17BBB00C661C6 /* operand_to_undef_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A677F22B17BBB00C661C6 /* operand_to_undef_reduction_opportunity_finder.cpp */; };
- A94A696522B17BBB00C661C6 /* operand_to_undef_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A677F22B17BBB00C661C6 /* operand_to_undef_reduction_opportunity_finder.cpp */; };
- A94A696622B17BBB00C661C6 /* remove_function_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678022B17BBB00C661C6 /* remove_function_reduction_opportunity_finder.h */; };
- A94A696722B17BBB00C661C6 /* remove_function_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678022B17BBB00C661C6 /* remove_function_reduction_opportunity_finder.h */; };
- A94A696822B17BBB00C661C6 /* pch_source_reduce.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678122B17BBB00C661C6 /* pch_source_reduce.h */; };
- A94A696922B17BBB00C661C6 /* pch_source_reduce.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678122B17BBB00C661C6 /* pch_source_reduce.h */; };
- A94A696A22B17BBB00C661C6 /* remove_unreferenced_instruction_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678222B17BBB00C661C6 /* remove_unreferenced_instruction_reduction_opportunity_finder.h */; };
- A94A696B22B17BBB00C661C6 /* remove_unreferenced_instruction_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678222B17BBB00C661C6 /* remove_unreferenced_instruction_reduction_opportunity_finder.h */; };
- A94A696C22B17BBB00C661C6 /* merge_blocks_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A678322B17BBB00C661C6 /* merge_blocks_reduction_opportunity_finder.cpp */; };
- A94A696D22B17BBB00C661C6 /* merge_blocks_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A678322B17BBB00C661C6 /* merge_blocks_reduction_opportunity_finder.cpp */; };
- A94A696E22B17BBB00C661C6 /* reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A678422B17BBB00C661C6 /* reduction_opportunity.cpp */; };
- A94A696F22B17BBB00C661C6 /* reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A678422B17BBB00C661C6 /* reduction_opportunity.cpp */; };
- A94A697022B17BBB00C661C6 /* reducer.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678522B17BBB00C661C6 /* reducer.h */; };
- A94A697122B17BBB00C661C6 /* reducer.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678522B17BBB00C661C6 /* reducer.h */; };
- A94A697222B17BBB00C661C6 /* change_operand_to_undef_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A678622B17BBB00C661C6 /* change_operand_to_undef_reduction_opportunity.cpp */; };
- A94A697322B17BBB00C661C6 /* change_operand_to_undef_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A678622B17BBB00C661C6 /* change_operand_to_undef_reduction_opportunity.cpp */; };
- A94A697422B17BBB00C661C6 /* reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678722B17BBB00C661C6 /* reduction_opportunity.h */; };
- A94A697522B17BBB00C661C6 /* reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678722B17BBB00C661C6 /* reduction_opportunity.h */; };
- A94A697622B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678822B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h */; };
- A94A697722B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678822B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h */; };
- A94A697822B17BBB00C661C6 /* operand_to_dominating_id_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A678922B17BBB00C661C6 /* operand_to_dominating_id_reduction_opportunity_finder.cpp */; };
- A94A697922B17BBB00C661C6 /* operand_to_dominating_id_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A678922B17BBB00C661C6 /* operand_to_dominating_id_reduction_opportunity_finder.cpp */; };
- A94A697A22B17BBB00C661C6 /* reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678A22B17BBB00C661C6 /* reduction_opportunity_finder.h */; };
- A94A697B22B17BBB00C661C6 /* reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678A22B17BBB00C661C6 /* reduction_opportunity_finder.h */; };
- A94A697C22B17BBB00C661C6 /* change_operand_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678B22B17BBB00C661C6 /* change_operand_reduction_opportunity.h */; };
- A94A697D22B17BBB00C661C6 /* change_operand_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678B22B17BBB00C661C6 /* change_operand_reduction_opportunity.h */; };
- A94A697E22B17BBB00C661C6 /* remove_block_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678C22B17BBB00C661C6 /* remove_block_reduction_opportunity_finder.h */; };
- A94A697F22B17BBB00C661C6 /* remove_block_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678C22B17BBB00C661C6 /* remove_block_reduction_opportunity_finder.h */; };
- A94A698022B17BBB00C661C6 /* remove_block_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A678D22B17BBB00C661C6 /* remove_block_reduction_opportunity_finder.cpp */; };
- A94A698122B17BBB00C661C6 /* remove_block_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A678D22B17BBB00C661C6 /* remove_block_reduction_opportunity_finder.cpp */; };
- A94A698222B17BBB00C661C6 /* reduction_util.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678E22B17BBB00C661C6 /* reduction_util.h */; };
- A94A698322B17BBB00C661C6 /* reduction_util.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678E22B17BBB00C661C6 /* reduction_util.h */; };
- A94A698422B17BBB00C661C6 /* merge_blocks_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678F22B17BBB00C661C6 /* merge_blocks_reduction_opportunity.h */; };
- A94A698522B17BBB00C661C6 /* merge_blocks_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678F22B17BBB00C661C6 /* merge_blocks_reduction_opportunity.h */; };
- A94A698622B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A679022B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp */; };
- A94A698722B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A679022B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp */; };
- A94A698822B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A679122B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity.cpp */; };
- A94A698922B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A679122B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity.cpp */; };
- A94A698A22B17BBB00C661C6 /* remove_block_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A679222B17BBB00C661C6 /* remove_block_reduction_opportunity.cpp */; };
- A94A698B22B17BBB00C661C6 /* remove_block_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A679222B17BBB00C661C6 /* remove_block_reduction_opportunity.cpp */; };
- A94A698C22B17BBB00C661C6 /* reduction_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A679322B17BBB00C661C6 /* reduction_pass.h */; };
- A94A698D22B17BBB00C661C6 /* reduction_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A679322B17BBB00C661C6 /* reduction_pass.h */; };
- A94A698E22B17BBB00C661C6 /* latest_version_opencl_std_header.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A679422B17BBB00C661C6 /* latest_version_opencl_std_header.h */; };
- A94A698F22B17BBB00C661C6 /* latest_version_opencl_std_header.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A679422B17BBB00C661C6 /* latest_version_opencl_std_header.h */; };
- A94A699022B17BBB00C661C6 /* spirv_optimizer_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A679522B17BBB00C661C6 /* spirv_optimizer_options.cpp */; };
- A94A699122B17BBB00C661C6 /* spirv_optimizer_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A679522B17BBB00C661C6 /* spirv_optimizer_options.cpp */; };
- A94A699222B17BBB00C661C6 /* cfa.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A679622B17BBB00C661C6 /* cfa.h */; };
- A94A699322B17BBB00C661C6 /* cfa.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A679622B17BBB00C661C6 /* cfa.h */; };
- A94A699422B17BBB00C661C6 /* pch_source.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A679722B17BBB00C661C6 /* pch_source.h */; };
- A94A699522B17BBB00C661C6 /* pch_source.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A679722B17BBB00C661C6 /* pch_source.h */; };
- A94A699622B17BBB00C661C6 /* enum_string_mapping.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A679822B17BBB00C661C6 /* enum_string_mapping.h */; };
- A94A699722B17BBB00C661C6 /* enum_string_mapping.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A679822B17BBB00C661C6 /* enum_string_mapping.h */; };
- A94A699822B17BBB00C661C6 /* spirv_fuzzer_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A679922B17BBB00C661C6 /* spirv_fuzzer_options.cpp */; };
- A94A699922B17BBB00C661C6 /* spirv_fuzzer_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A679922B17BBB00C661C6 /* spirv_fuzzer_options.cpp */; };
- A94A699A22B17BBB00C661C6 /* spirv_reducer_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A679A22B17BBB00C661C6 /* spirv_reducer_options.h */; };
- A94A699B22B17BBB00C661C6 /* spirv_reducer_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A679A22B17BBB00C661C6 /* spirv_reducer_options.h */; };
- A94A699C22B17BBB00C661C6 /* spirv_validator_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A679B22B17BBB00C661C6 /* spirv_validator_options.cpp */; };
- A94A699D22B17BBB00C661C6 /* spirv_validator_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A679B22B17BBB00C661C6 /* spirv_validator_options.cpp */; };
- A94A699E22B17BBB00C661C6 /* print.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A679D22B17BBB00C661C6 /* print.cpp */; };
- A94A699F22B17BBB00C661C6 /* print.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A679D22B17BBB00C661C6 /* print.cpp */; };
- A94A69A022B17BBB00C661C6 /* spirv_definition.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A679E22B17BBB00C661C6 /* spirv_definition.h */; };
- A94A69A122B17BBB00C661C6 /* spirv_definition.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A679E22B17BBB00C661C6 /* spirv_definition.h */; };
- A94A69A222B17BBB00C661C6 /* operand.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A679F22B17BBB00C661C6 /* operand.h */; };
- A94A69A322B17BBB00C661C6 /* operand.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A679F22B17BBB00C661C6 /* operand.h */; };
- A94A69A422B17BBB00C661C6 /* spirv_endian.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67A022B17BBB00C661C6 /* spirv_endian.cpp */; };
- A94A69A522B17BBB00C661C6 /* spirv_endian.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67A022B17BBB00C661C6 /* spirv_endian.cpp */; };
- A94A69A622B17BBB00C661C6 /* macro.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67A122B17BBB00C661C6 /* macro.h */; };
- A94A69A722B17BBB00C661C6 /* macro.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67A122B17BBB00C661C6 /* macro.h */; };
- A94A69A822B17BBB00C661C6 /* spirv_constant.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67A222B17BBB00C661C6 /* spirv_constant.h */; };
- A94A69A922B17BBB00C661C6 /* spirv_constant.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67A222B17BBB00C661C6 /* spirv_constant.h */; };
- A94A69AA22B17BBB00C661C6 /* binary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67A422B17BBB00C661C6 /* binary.cpp */; };
- A94A69AB22B17BBB00C661C6 /* binary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67A422B17BBB00C661C6 /* binary.cpp */; };
- A94A69AC22B17BBB00C661C6 /* spirv_validator_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67A522B17BBB00C661C6 /* spirv_validator_options.h */; };
- A94A69AD22B17BBB00C661C6 /* spirv_validator_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67A522B17BBB00C661C6 /* spirv_validator_options.h */; };
- A94A69AE22B17BBB00C661C6 /* enum_string_mapping.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67A622B17BBB00C661C6 /* enum_string_mapping.cpp */; };
- A94A69AF22B17BBB00C661C6 /* enum_string_mapping.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67A622B17BBB00C661C6 /* enum_string_mapping.cpp */; };
- A94A69B022B17BBB00C661C6 /* text_handler.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67A722B17BBB00C661C6 /* text_handler.h */; };
- A94A69B122B17BBB00C661C6 /* text_handler.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67A722B17BBB00C661C6 /* text_handler.h */; };
- A94A69B222B17BBB00C661C6 /* parsed_operand.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67A822B17BBB00C661C6 /* parsed_operand.h */; };
- A94A69B322B17BBB00C661C6 /* parsed_operand.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67A822B17BBB00C661C6 /* parsed_operand.h */; };
- A94A69B422B17BBB00C661C6 /* name_mapper.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67A922B17BBB00C661C6 /* name_mapper.h */; };
- A94A69B522B17BBB00C661C6 /* name_mapper.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67A922B17BBB00C661C6 /* name_mapper.h */; };
- A94A69B622B17BBB00C661C6 /* spirv_reducer_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67AA22B17BBB00C661C6 /* spirv_reducer_options.cpp */; };
- A94A69B722B17BBB00C661C6 /* spirv_reducer_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67AA22B17BBB00C661C6 /* spirv_reducer_options.cpp */; };
- A94A69B822B17BBB00C661C6 /* parsed_operand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67AB22B17BBB00C661C6 /* parsed_operand.cpp */; };
- A94A69B922B17BBB00C661C6 /* parsed_operand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67AB22B17BBB00C661C6 /* parsed_operand.cpp */; };
- A94A69BA22B17BBB00C661C6 /* diagnostic.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67AC22B17BBB00C661C6 /* diagnostic.h */; };
- A94A69BB22B17BBB00C661C6 /* diagnostic.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67AC22B17BBB00C661C6 /* diagnostic.h */; };
- A94A69BC22B17BBB00C661C6 /* spirv_endian.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67AD22B17BBB00C661C6 /* spirv_endian.h */; };
- A94A69BD22B17BBB00C661C6 /* spirv_endian.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67AD22B17BBB00C661C6 /* spirv_endian.h */; };
- A94A69BE22B17BBB00C661C6 /* name_mapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67AE22B17BBB00C661C6 /* name_mapper.cpp */; };
- A94A69BF22B17BBB00C661C6 /* name_mapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67AE22B17BBB00C661C6 /* name_mapper.cpp */; };
- A94A69C022B17BBB00C661C6 /* linker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67B222B17BBB00C661C6 /* linker.cpp */; };
- A94A69C122B17BBB00C661C6 /* linker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67B222B17BBB00C661C6 /* linker.cpp */; };
- A94A69C222B17BBC00C661C6 /* software_version.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67B322B17BBB00C661C6 /* software_version.cpp */; };
- A94A69C322B17BBC00C661C6 /* software_version.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67B322B17BBB00C661C6 /* software_version.cpp */; };
- A94A69C422B17BBC00C661C6 /* opcode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67B422B17BBB00C661C6 /* opcode.cpp */; };
- A94A69C522B17BBC00C661C6 /* opcode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67B422B17BBB00C661C6 /* opcode.cpp */; };
- A94A69C622B17BBC00C661C6 /* print.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67B522B17BBB00C661C6 /* print.h */; };
- A94A69C722B17BBC00C661C6 /* print.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67B522B17BBB00C661C6 /* print.h */; };
- A94A69C822B17BBC00C661C6 /* ext_inst.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67B622B17BBB00C661C6 /* ext_inst.cpp */; };
- A94A69C922B17BBC00C661C6 /* ext_inst.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67B622B17BBB00C661C6 /* ext_inst.cpp */; };
- A94A69CA22B17BBC00C661C6 /* disassemble.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67B722B17BBB00C661C6 /* disassemble.h */; };
- A94A69CB22B17BBC00C661C6 /* disassemble.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67B722B17BBB00C661C6 /* disassemble.h */; };
- A94A69CC22B17BBC00C661C6 /* optimizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67B922B17BBB00C661C6 /* optimizer.cpp */; };
- A94A69CD22B17BBC00C661C6 /* optimizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67B922B17BBB00C661C6 /* optimizer.cpp */; };
- A94A69CE22B17BBC00C661C6 /* if_conversion.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67BA22B17BBB00C661C6 /* if_conversion.h */; };
- A94A69CF22B17BBC00C661C6 /* if_conversion.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67BA22B17BBB00C661C6 /* if_conversion.h */; };
- A94A69D022B17BBC00C661C6 /* register_pressure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67BB22B17BBB00C661C6 /* register_pressure.cpp */; };
- A94A69D122B17BBC00C661C6 /* register_pressure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67BB22B17BBB00C661C6 /* register_pressure.cpp */; };
- A94A69D222B17BBC00C661C6 /* loop_utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67BC22B17BBB00C661C6 /* loop_utils.cpp */; };
- A94A69D322B17BBC00C661C6 /* loop_utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67BC22B17BBB00C661C6 /* loop_utils.cpp */; };
- A94A69D422B17BBC00C661C6 /* merge_return_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67BD22B17BBB00C661C6 /* merge_return_pass.h */; };
- A94A69D522B17BBC00C661C6 /* merge_return_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67BD22B17BBB00C661C6 /* merge_return_pass.h */; };
- A94A69D622B17BBC00C661C6 /* inline_opaque_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67BE22B17BBB00C661C6 /* inline_opaque_pass.h */; };
- A94A69D722B17BBC00C661C6 /* inline_opaque_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67BE22B17BBB00C661C6 /* inline_opaque_pass.h */; };
- A94A69D822B17BBC00C661C6 /* loop_fusion.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67BF22B17BBB00C661C6 /* loop_fusion.h */; };
- A94A69D922B17BBC00C661C6 /* loop_fusion.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67BF22B17BBB00C661C6 /* loop_fusion.h */; };
- A94A69DA22B17BBC00C661C6 /* combine_access_chains.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67C022B17BBB00C661C6 /* combine_access_chains.cpp */; };
- A94A69DB22B17BBC00C661C6 /* combine_access_chains.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67C022B17BBB00C661C6 /* combine_access_chains.cpp */; };
- A94A69DC22B17BBC00C661C6 /* build_module.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67C122B17BBB00C661C6 /* build_module.cpp */; };
- A94A69DD22B17BBC00C661C6 /* build_module.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67C122B17BBB00C661C6 /* build_module.cpp */; };
- A94A69DE22B17BBC00C661C6 /* composite.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67C222B17BBB00C661C6 /* composite.h */; };
- A94A69DF22B17BBC00C661C6 /* composite.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67C222B17BBB00C661C6 /* composite.h */; };
- A94A69E022B17BBC00C661C6 /* compact_ids_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67C322B17BBB00C661C6 /* compact_ids_pass.h */; };
- A94A69E122B17BBC00C661C6 /* compact_ids_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67C322B17BBB00C661C6 /* compact_ids_pass.h */; };
- A94A69E222B17BBC00C661C6 /* register_pressure.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67C422B17BBB00C661C6 /* register_pressure.h */; };
- A94A69E322B17BBC00C661C6 /* register_pressure.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67C422B17BBB00C661C6 /* register_pressure.h */; };
- A94A69E422B17BBC00C661C6 /* tree_iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67C522B17BBB00C661C6 /* tree_iterator.h */; };
- A94A69E522B17BBC00C661C6 /* tree_iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67C522B17BBB00C661C6 /* tree_iterator.h */; };
- A94A69E622B17BBC00C661C6 /* strip_atomic_counter_memory_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67C622B17BBB00C661C6 /* strip_atomic_counter_memory_pass.h */; };
- A94A69E722B17BBC00C661C6 /* strip_atomic_counter_memory_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67C622B17BBB00C661C6 /* strip_atomic_counter_memory_pass.h */; };
- A94A69E822B17BBC00C661C6 /* legalize_vector_shuffle_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67C722B17BBB00C661C6 /* legalize_vector_shuffle_pass.h */; };
- A94A69E922B17BBC00C661C6 /* legalize_vector_shuffle_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67C722B17BBB00C661C6 /* legalize_vector_shuffle_pass.h */; };
- A94A69EA22B17BBC00C661C6 /* local_single_store_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67C822B17BBB00C661C6 /* local_single_store_elim_pass.h */; };
- A94A69EB22B17BBC00C661C6 /* local_single_store_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67C822B17BBB00C661C6 /* local_single_store_elim_pass.h */; };
- A94A69EC22B17BBC00C661C6 /* reduce_load_size.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67C922B17BBB00C661C6 /* reduce_load_size.h */; };
- A94A69ED22B17BBC00C661C6 /* reduce_load_size.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67C922B17BBB00C661C6 /* reduce_load_size.h */; };
- A94A69EE22B17BBC00C661C6 /* code_sink.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67CA22B17BBB00C661C6 /* code_sink.cpp */; };
- A94A69EF22B17BBC00C661C6 /* code_sink.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67CA22B17BBB00C661C6 /* code_sink.cpp */; };
- A94A69F022B17BBC00C661C6 /* types.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67CB22B17BBB00C661C6 /* types.cpp */; };
- A94A69F122B17BBC00C661C6 /* types.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67CB22B17BBB00C661C6 /* types.cpp */; };
- A94A69F222B17BBC00C661C6 /* scalar_analysis.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67CC22B17BBB00C661C6 /* scalar_analysis.h */; };
- A94A69F322B17BBC00C661C6 /* scalar_analysis.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67CC22B17BBB00C661C6 /* scalar_analysis.h */; };
- A94A69F422B17BBC00C661C6 /* strip_debug_info_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67CD22B17BBB00C661C6 /* strip_debug_info_pass.h */; };
- A94A69F522B17BBC00C661C6 /* strip_debug_info_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67CD22B17BBB00C661C6 /* strip_debug_info_pass.h */; };
- A94A69F622B17BBC00C661C6 /* cfg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67CE22B17BBB00C661C6 /* cfg.cpp */; };
- A94A69F722B17BBC00C661C6 /* cfg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67CE22B17BBB00C661C6 /* cfg.cpp */; };
- A94A69F822B17BBC00C661C6 /* strip_atomic_counter_memory_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67CF22B17BBB00C661C6 /* strip_atomic_counter_memory_pass.cpp */; };
- A94A69F922B17BBC00C661C6 /* strip_atomic_counter_memory_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67CF22B17BBB00C661C6 /* strip_atomic_counter_memory_pass.cpp */; };
- A94A69FA22B17BBC00C661C6 /* decoration_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67D022B17BBB00C661C6 /* decoration_manager.cpp */; };
- A94A69FB22B17BBC00C661C6 /* decoration_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67D022B17BBB00C661C6 /* decoration_manager.cpp */; };
- A94A69FC22B17BBC00C661C6 /* local_single_block_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67D122B17BBB00C661C6 /* local_single_block_elim_pass.cpp */; };
- A94A69FD22B17BBC00C661C6 /* local_single_block_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67D122B17BBB00C661C6 /* local_single_block_elim_pass.cpp */; };
- A94A69FE22B17BBC00C661C6 /* freeze_spec_constant_value_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67D222B17BBB00C661C6 /* freeze_spec_constant_value_pass.cpp */; };
- A94A69FF22B17BBC00C661C6 /* freeze_spec_constant_value_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67D222B17BBB00C661C6 /* freeze_spec_constant_value_pass.cpp */; };
- A94A6A0022B17BBC00C661C6 /* replace_invalid_opc.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67D322B17BBB00C661C6 /* replace_invalid_opc.h */; };
- A94A6A0122B17BBC00C661C6 /* replace_invalid_opc.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67D322B17BBB00C661C6 /* replace_invalid_opc.h */; };
- A94A6A0222B17BBC00C661C6 /* local_access_chain_convert_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67D422B17BBB00C661C6 /* local_access_chain_convert_pass.h */; };
- A94A6A0322B17BBC00C661C6 /* local_access_chain_convert_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67D422B17BBB00C661C6 /* local_access_chain_convert_pass.h */; };
- A94A6A0422B17BBC00C661C6 /* inst_bindless_check_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67D522B17BBB00C661C6 /* inst_bindless_check_pass.cpp */; };
- A94A6A0522B17BBC00C661C6 /* inst_bindless_check_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67D522B17BBB00C661C6 /* inst_bindless_check_pass.cpp */; };
- A94A6A0622B17BBC00C661C6 /* local_redundancy_elimination.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67D622B17BBB00C661C6 /* local_redundancy_elimination.cpp */; };
- A94A6A0722B17BBC00C661C6 /* local_redundancy_elimination.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67D622B17BBB00C661C6 /* local_redundancy_elimination.cpp */; };
- A94A6A0822B17BBC00C661C6 /* instrument_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67D822B17BBB00C661C6 /* instrument_pass.cpp */; };
- A94A6A0922B17BBC00C661C6 /* instrument_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67D822B17BBB00C661C6 /* instrument_pass.cpp */; };
- A94A6A0A22B17BBC00C661C6 /* propagator.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67D922B17BBB00C661C6 /* propagator.h */; };
- A94A6A0B22B17BBC00C661C6 /* propagator.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67D922B17BBB00C661C6 /* propagator.h */; };
- A94A6A0C22B17BBC00C661C6 /* instruction_list.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67DA22B17BBB00C661C6 /* instruction_list.h */; };
- A94A6A0D22B17BBC00C661C6 /* instruction_list.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67DA22B17BBB00C661C6 /* instruction_list.h */; };
- A94A6A0E22B17BBC00C661C6 /* feature_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67DB22B17BBB00C661C6 /* feature_manager.cpp */; };
- A94A6A0F22B17BBC00C661C6 /* feature_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67DB22B17BBB00C661C6 /* feature_manager.cpp */; };
- A94A6A1022B17BBC00C661C6 /* pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67DC22B17BBB00C661C6 /* pass.cpp */; };
- A94A6A1122B17BBC00C661C6 /* pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67DC22B17BBB00C661C6 /* pass.cpp */; };
- A94A6A1222B17BBC00C661C6 /* loop_fission.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67DD22B17BBB00C661C6 /* loop_fission.cpp */; };
- A94A6A1322B17BBC00C661C6 /* loop_fission.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67DD22B17BBB00C661C6 /* loop_fission.cpp */; };
- A94A6A1422B17BBC00C661C6 /* dominator_tree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67DE22B17BBB00C661C6 /* dominator_tree.cpp */; };
- A94A6A1522B17BBC00C661C6 /* dominator_tree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67DE22B17BBB00C661C6 /* dominator_tree.cpp */; };
- A94A6A1622B17BBC00C661C6 /* merge_return_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67DF22B17BBB00C661C6 /* merge_return_pass.cpp */; };
- A94A6A1722B17BBC00C661C6 /* merge_return_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67DF22B17BBB00C661C6 /* merge_return_pass.cpp */; };
- A94A6A1822B17BBC00C661C6 /* ir_context.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67E022B17BBB00C661C6 /* ir_context.h */; };
- A94A6A1922B17BBC00C661C6 /* ir_context.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67E022B17BBB00C661C6 /* ir_context.h */; };
- A94A6A1A22B17BBC00C661C6 /* eliminate_dead_constant_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67E122B17BBB00C661C6 /* eliminate_dead_constant_pass.cpp */; };
- A94A6A1B22B17BBC00C661C6 /* eliminate_dead_constant_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67E122B17BBB00C661C6 /* eliminate_dead_constant_pass.cpp */; };
- A94A6A1C22B17BBC00C661C6 /* cfg_cleanup_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67E222B17BBB00C661C6 /* cfg_cleanup_pass.cpp */; };
- A94A6A1D22B17BBC00C661C6 /* cfg_cleanup_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67E222B17BBB00C661C6 /* cfg_cleanup_pass.cpp */; };
- A94A6A1E22B17BBC00C661C6 /* const_folding_rules.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67E322B17BBB00C661C6 /* const_folding_rules.cpp */; };
- A94A6A1F22B17BBC00C661C6 /* const_folding_rules.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67E322B17BBB00C661C6 /* const_folding_rules.cpp */; };
- A94A6A2022B17BBC00C661C6 /* loop_unroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67E422B17BBB00C661C6 /* loop_unroller.h */; };
- A94A6A2122B17BBC00C661C6 /* loop_unroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67E422B17BBB00C661C6 /* loop_unroller.h */; };
- A94A6A2222B17BBC00C661C6 /* strip_debug_info_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67E522B17BBB00C661C6 /* strip_debug_info_pass.cpp */; };
- A94A6A2322B17BBC00C661C6 /* strip_debug_info_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67E522B17BBB00C661C6 /* strip_debug_info_pass.cpp */; };
- A94A6A2422B17BBC00C661C6 /* ssa_rewrite_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67E622B17BBB00C661C6 /* ssa_rewrite_pass.cpp */; };
- A94A6A2522B17BBC00C661C6 /* ssa_rewrite_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67E622B17BBB00C661C6 /* ssa_rewrite_pass.cpp */; };
- A94A6A2622B17BBC00C661C6 /* loop_dependence.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67E722B17BBB00C661C6 /* loop_dependence.cpp */; };
- A94A6A2722B17BBC00C661C6 /* loop_dependence.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67E722B17BBB00C661C6 /* loop_dependence.cpp */; };
- A94A6A2822B17BBC00C661C6 /* unify_const_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67E822B17BBB00C661C6 /* unify_const_pass.h */; };
- A94A6A2922B17BBC00C661C6 /* unify_const_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67E822B17BBB00C661C6 /* unify_const_pass.h */; };
- A94A6A2A22B17BBC00C661C6 /* ir_loader.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67E922B17BBB00C661C6 /* ir_loader.h */; };
- A94A6A2B22B17BBC00C661C6 /* ir_loader.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67E922B17BBB00C661C6 /* ir_loader.h */; };
- A94A6A2C22B17BBC00C661C6 /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67EA22B17BBB00C661C6 /* types.h */; };
- A94A6A2D22B17BBC00C661C6 /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67EA22B17BBB00C661C6 /* types.h */; };
- A94A6A2E22B17BBC00C661C6 /* fold_spec_constant_op_and_composite_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67EB22B17BBB00C661C6 /* fold_spec_constant_op_and_composite_pass.h */; };
- A94A6A2F22B17BBC00C661C6 /* fold_spec_constant_op_and_composite_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67EB22B17BBB00C661C6 /* fold_spec_constant_op_and_composite_pass.h */; };
- A94A6A3022B17BBC00C661C6 /* mem_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67EC22B17BBB00C661C6 /* mem_pass.cpp */; };
- A94A6A3122B17BBC00C661C6 /* mem_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67EC22B17BBB00C661C6 /* mem_pass.cpp */; };
- A94A6A3222B17BBC00C661C6 /* basic_block.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67ED22B17BBB00C661C6 /* basic_block.h */; };
- A94A6A3322B17BBC00C661C6 /* basic_block.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67ED22B17BBB00C661C6 /* basic_block.h */; };
- A94A6A3422B17BBC00C661C6 /* remove_duplicates_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67EE22B17BBB00C661C6 /* remove_duplicates_pass.cpp */; };
- A94A6A3522B17BBC00C661C6 /* remove_duplicates_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67EE22B17BBB00C661C6 /* remove_duplicates_pass.cpp */; };
- A94A6A3622B17BBC00C661C6 /* dead_variable_elimination.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67EF22B17BBB00C661C6 /* dead_variable_elimination.cpp */; };
- A94A6A3722B17BBC00C661C6 /* dead_variable_elimination.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67EF22B17BBB00C661C6 /* dead_variable_elimination.cpp */; };
- A94A6A3822B17BBC00C661C6 /* block_merge_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67F022B17BBB00C661C6 /* block_merge_pass.h */; };
- A94A6A3922B17BBC00C661C6 /* block_merge_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67F022B17BBB00C661C6 /* block_merge_pass.h */; };
- A94A6A3A22B17BBC00C661C6 /* module.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67F122B17BBB00C661C6 /* module.cpp */; };
- A94A6A3B22B17BBC00C661C6 /* module.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67F122B17BBB00C661C6 /* module.cpp */; };
- A94A6A3C22B17BBC00C661C6 /* fold_spec_constant_op_and_composite_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67F222B17BBB00C661C6 /* fold_spec_constant_op_and_composite_pass.cpp */; };
- A94A6A3D22B17BBC00C661C6 /* fold_spec_constant_op_and_composite_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67F222B17BBB00C661C6 /* fold_spec_constant_op_and_composite_pass.cpp */; };
- A94A6A3E22B17BBC00C661C6 /* loop_unswitch_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67F322B17BBB00C661C6 /* loop_unswitch_pass.cpp */; };
- A94A6A3F22B17BBC00C661C6 /* loop_unswitch_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67F322B17BBB00C661C6 /* loop_unswitch_pass.cpp */; };
- A94A6A4022B17BBC00C661C6 /* unify_const_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67F422B17BBB00C661C6 /* unify_const_pass.cpp */; };
- A94A6A4122B17BBC00C661C6 /* unify_const_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67F422B17BBB00C661C6 /* unify_const_pass.cpp */; };
- A94A6A4222B17BBC00C661C6 /* type_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67F522B17BBB00C661C6 /* type_manager.cpp */; };
- A94A6A4322B17BBC00C661C6 /* type_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67F522B17BBB00C661C6 /* type_manager.cpp */; };
- A94A6A4422B17BBC00C661C6 /* generate_webgpu_initializers_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67F622B17BBB00C661C6 /* generate_webgpu_initializers_pass.cpp */; };
- A94A6A4522B17BBC00C661C6 /* generate_webgpu_initializers_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67F622B17BBB00C661C6 /* generate_webgpu_initializers_pass.cpp */; };
- A94A6A4622B17BBC00C661C6 /* private_to_local_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67F722B17BBB00C661C6 /* private_to_local_pass.h */; };
- A94A6A4722B17BBC00C661C6 /* private_to_local_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67F722B17BBB00C661C6 /* private_to_local_pass.h */; };
- A94A6A4822B17BBC00C661C6 /* inline_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67F822B17BBB00C661C6 /* inline_pass.cpp */; };
- A94A6A4922B17BBC00C661C6 /* inline_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67F822B17BBB00C661C6 /* inline_pass.cpp */; };
- A94A6A4A22B17BBC00C661C6 /* def_use_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67F922B17BBB00C661C6 /* def_use_manager.h */; };
- A94A6A4B22B17BBC00C661C6 /* def_use_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67F922B17BBB00C661C6 /* def_use_manager.h */; };
- A94A6A4C22B17BBC00C661C6 /* ir_loader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67FA22B17BBB00C661C6 /* ir_loader.cpp */; };
- A94A6A4D22B17BBC00C661C6 /* ir_loader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67FA22B17BBB00C661C6 /* ir_loader.cpp */; };
- A94A6A4E22B17BBC00C661C6 /* cfg_cleanup_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67FB22B17BBB00C661C6 /* cfg_cleanup_pass.h */; };
- A94A6A4F22B17BBC00C661C6 /* cfg_cleanup_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67FB22B17BBB00C661C6 /* cfg_cleanup_pass.h */; };
- A94A6A5022B17BBC00C661C6 /* licm_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67FC22B17BBB00C661C6 /* licm_pass.cpp */; };
- A94A6A5122B17BBC00C661C6 /* licm_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67FC22B17BBB00C661C6 /* licm_pass.cpp */; };
- A94A6A5222B17BBC00C661C6 /* eliminate_dead_functions_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67FD22B17BBB00C661C6 /* eliminate_dead_functions_pass.cpp */; };
- A94A6A5322B17BBC00C661C6 /* eliminate_dead_functions_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67FD22B17BBB00C661C6 /* eliminate_dead_functions_pass.cpp */; };
- A94A6A5422B17BBC00C661C6 /* local_redundancy_elimination.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67FE22B17BBB00C661C6 /* local_redundancy_elimination.h */; };
- A94A6A5522B17BBC00C661C6 /* local_redundancy_elimination.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67FE22B17BBB00C661C6 /* local_redundancy_elimination.h */; };
- A94A6A5622B17BBC00C661C6 /* split_invalid_unreachable_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67FF22B17BBB00C661C6 /* split_invalid_unreachable_pass.cpp */; };
- A94A6A5722B17BBC00C661C6 /* split_invalid_unreachable_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67FF22B17BBB00C661C6 /* split_invalid_unreachable_pass.cpp */; };
- A94A6A5822B17BBC00C661C6 /* loop_peeling.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A680022B17BBB00C661C6 /* loop_peeling.h */; };
- A94A6A5922B17BBC00C661C6 /* loop_peeling.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A680022B17BBB00C661C6 /* loop_peeling.h */; };
- A94A6A5A22B17BBC00C661C6 /* vector_dce.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A680122B17BBB00C661C6 /* vector_dce.cpp */; };
- A94A6A5B22B17BBC00C661C6 /* vector_dce.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A680122B17BBB00C661C6 /* vector_dce.cpp */; };
- A94A6A5C22B17BBC00C661C6 /* block_merge_util.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A680222B17BBB00C661C6 /* block_merge_util.h */; };
- A94A6A5D22B17BBC00C661C6 /* block_merge_util.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A680222B17BBB00C661C6 /* block_merge_util.h */; };
- A94A6A5E22B17BBC00C661C6 /* loop_unroller.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A680322B17BBB00C661C6 /* loop_unroller.cpp */; };
- A94A6A5F22B17BBC00C661C6 /* loop_unroller.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A680322B17BBB00C661C6 /* loop_unroller.cpp */; };
- A94A6A6022B17BBC00C661C6 /* constants.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A680422B17BBB00C661C6 /* constants.cpp */; };
- A94A6A6122B17BBC00C661C6 /* constants.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A680422B17BBB00C661C6 /* constants.cpp */; };
- A94A6A6222B17BBC00C661C6 /* loop_fusion_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A680522B17BBB00C661C6 /* loop_fusion_pass.h */; };
- A94A6A6322B17BBC00C661C6 /* loop_fusion_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A680522B17BBB00C661C6 /* loop_fusion_pass.h */; };
- A94A6A6422B17BBC00C661C6 /* struct_cfg_analysis.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A680622B17BBB00C661C6 /* struct_cfg_analysis.h */; };
- A94A6A6522B17BBC00C661C6 /* struct_cfg_analysis.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A680622B17BBB00C661C6 /* struct_cfg_analysis.h */; };
- A94A6A6622B17BBC00C661C6 /* common_uniform_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A680722B17BBB00C661C6 /* common_uniform_elim_pass.cpp */; };
- A94A6A6722B17BBC00C661C6 /* common_uniform_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A680722B17BBB00C661C6 /* common_uniform_elim_pass.cpp */; };
- A94A6A6822B17BBC00C661C6 /* def_use_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A680822B17BBB00C661C6 /* def_use_manager.cpp */; };
- A94A6A6922B17BBC00C661C6 /* def_use_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A680822B17BBB00C661C6 /* def_use_manager.cpp */; };
- A94A6A6A22B17BBC00C661C6 /* strip_reflect_info_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A680922B17BBB00C661C6 /* strip_reflect_info_pass.cpp */; };
- A94A6A6B22B17BBC00C661C6 /* strip_reflect_info_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A680922B17BBB00C661C6 /* strip_reflect_info_pass.cpp */; };
- A94A6A6C22B17BBC00C661C6 /* decoration_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A680A22B17BBB00C661C6 /* decoration_manager.h */; };
- A94A6A6D22B17BBC00C661C6 /* decoration_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A680A22B17BBB00C661C6 /* decoration_manager.h */; };
- A94A6A6E22B17BBC00C661C6 /* ccp_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A680B22B17BBB00C661C6 /* ccp_pass.cpp */; };
- A94A6A6F22B17BBC00C661C6 /* ccp_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A680B22B17BBB00C661C6 /* ccp_pass.cpp */; };
- A94A6A7022B17BBC00C661C6 /* process_lines_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A680C22B17BBB00C661C6 /* process_lines_pass.h */; };
- A94A6A7122B17BBC00C661C6 /* process_lines_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A680C22B17BBB00C661C6 /* process_lines_pass.h */; };
- A94A6A7222B17BBC00C661C6 /* local_single_block_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A680D22B17BBB00C661C6 /* local_single_block_elim_pass.h */; };
- A94A6A7322B17BBC00C661C6 /* local_single_block_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A680D22B17BBB00C661C6 /* local_single_block_elim_pass.h */; };
- A94A6A7422B17BBC00C661C6 /* pch_source_opt.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A680E22B17BBB00C661C6 /* pch_source_opt.cpp */; };
- A94A6A7522B17BBC00C661C6 /* pch_source_opt.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A680E22B17BBB00C661C6 /* pch_source_opt.cpp */; };
- A94A6A7622B17BBC00C661C6 /* strength_reduction_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A680F22B17BBB00C661C6 /* strength_reduction_pass.h */; };
- A94A6A7722B17BBC00C661C6 /* strength_reduction_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A680F22B17BBB00C661C6 /* strength_reduction_pass.h */; };
- A94A6A7822B17BBC00C661C6 /* aggressive_dead_code_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681022B17BBB00C661C6 /* aggressive_dead_code_elim_pass.cpp */; };
- A94A6A7922B17BBC00C661C6 /* aggressive_dead_code_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681022B17BBB00C661C6 /* aggressive_dead_code_elim_pass.cpp */; };
- A94A6A7A22B17BBC00C661C6 /* eliminate_dead_functions_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681122B17BBB00C661C6 /* eliminate_dead_functions_util.cpp */; };
- A94A6A7B22B17BBC00C661C6 /* eliminate_dead_functions_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681122B17BBB00C661C6 /* eliminate_dead_functions_util.cpp */; };
- A94A6A7C22B17BBC00C661C6 /* simplification_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681222B17BBB00C661C6 /* simplification_pass.cpp */; };
- A94A6A7D22B17BBC00C661C6 /* simplification_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681222B17BBB00C661C6 /* simplification_pass.cpp */; };
- A94A6A7E22B17BBC00C661C6 /* dead_branch_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681322B17BBB00C661C6 /* dead_branch_elim_pass.cpp */; };
- A94A6A7F22B17BBC00C661C6 /* dead_branch_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681322B17BBB00C661C6 /* dead_branch_elim_pass.cpp */; };
- A94A6A8022B17BBC00C661C6 /* flatten_decoration_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681422B17BBB00C661C6 /* flatten_decoration_pass.cpp */; };
- A94A6A8122B17BBC00C661C6 /* flatten_decoration_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681422B17BBB00C661C6 /* flatten_decoration_pass.cpp */; };
- A94A6A8222B17BBC00C661C6 /* dead_insert_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A681522B17BBB00C661C6 /* dead_insert_elim_pass.h */; };
- A94A6A8322B17BBC00C661C6 /* dead_insert_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A681522B17BBB00C661C6 /* dead_insert_elim_pass.h */; };
- A94A6A8422B17BBC00C661C6 /* folding_rules.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681622B17BBB00C661C6 /* folding_rules.cpp */; };
- A94A6A8522B17BBC00C661C6 /* folding_rules.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681622B17BBB00C661C6 /* folding_rules.cpp */; };
- A94A6A8622B17BBC00C661C6 /* freeze_spec_constant_value_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A681722B17BBB00C661C6 /* freeze_spec_constant_value_pass.h */; };
- A94A6A8722B17BBC00C661C6 /* freeze_spec_constant_value_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A681722B17BBB00C661C6 /* freeze_spec_constant_value_pass.h */; };
- A94A6A8822B17BBC00C661C6 /* ir_context.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681822B17BBB00C661C6 /* ir_context.cpp */; };
- A94A6A8922B17BBC00C661C6 /* ir_context.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681822B17BBB00C661C6 /* ir_context.cpp */; };
- A94A6A8A22B17BBC00C661C6 /* instrument_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A681922B17BBB00C661C6 /* instrument_pass.h */; };
- A94A6A8B22B17BBC00C661C6 /* instrument_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A681922B17BBB00C661C6 /* instrument_pass.h */; };
- A94A6A8C22B17BBC00C661C6 /* mem_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A681A22B17BBB00C661C6 /* mem_pass.h */; };
- A94A6A8D22B17BBC00C661C6 /* mem_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A681A22B17BBB00C661C6 /* mem_pass.h */; };
- A94A6A8E22B17BBC00C661C6 /* loop_descriptor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681B22B17BBB00C661C6 /* loop_descriptor.cpp */; };
- A94A6A8F22B17BBC00C661C6 /* loop_descriptor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681B22B17BBB00C661C6 /* loop_descriptor.cpp */; };
- A94A6A9022B17BBC00C661C6 /* local_ssa_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681C22B17BBB00C661C6 /* local_ssa_elim_pass.cpp */; };
- A94A6A9122B17BBC00C661C6 /* local_ssa_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681C22B17BBB00C661C6 /* local_ssa_elim_pass.cpp */; };
- A94A6A9222B17BBC00C661C6 /* eliminate_dead_members_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A681D22B17BBB00C661C6 /* eliminate_dead_members_pass.h */; };
- A94A6A9322B17BBC00C661C6 /* eliminate_dead_members_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A681D22B17BBB00C661C6 /* eliminate_dead_members_pass.h */; };
- A94A6A9422B17BBC00C661C6 /* function.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681E22B17BBB00C661C6 /* function.cpp */; };
- A94A6A9522B17BBC00C661C6 /* function.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681E22B17BBB00C661C6 /* function.cpp */; };
- A94A6A9622B17BBC00C661C6 /* instruction_list.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681F22B17BBB00C661C6 /* instruction_list.cpp */; };
- A94A6A9722B17BBC00C661C6 /* instruction_list.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681F22B17BBB00C661C6 /* instruction_list.cpp */; };
- A94A6A9822B17BBC00C661C6 /* composite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A682022B17BBB00C661C6 /* composite.cpp */; };
- A94A6A9922B17BBC00C661C6 /* composite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A682022B17BBB00C661C6 /* composite.cpp */; };
- A94A6A9A22B17BBC00C661C6 /* process_lines_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A682122B17BBB00C661C6 /* process_lines_pass.cpp */; };
- A94A6A9B22B17BBC00C661C6 /* process_lines_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A682122B17BBB00C661C6 /* process_lines_pass.cpp */; };
- A94A6A9C22B17BBC00C661C6 /* inline_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A682222B17BBB00C661C6 /* inline_pass.h */; };
- A94A6A9D22B17BBC00C661C6 /* inline_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A682222B17BBB00C661C6 /* inline_pass.h */; };
- A94A6A9E22B17BBC00C661C6 /* loop_dependence.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A682322B17BBB00C661C6 /* loop_dependence.h */; };
- A94A6A9F22B17BBC00C661C6 /* loop_dependence.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A682322B17BBB00C661C6 /* loop_dependence.h */; };
- A94A6AA022B17BBC00C661C6 /* value_number_table.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A682422B17BBB00C661C6 /* value_number_table.h */; };
- A94A6AA122B17BBC00C661C6 /* value_number_table.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A682422B17BBB00C661C6 /* value_number_table.h */; };
- A94A6AA222B17BBC00C661C6 /* flatten_decoration_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A682522B17BBB00C661C6 /* flatten_decoration_pass.h */; };
- A94A6AA322B17BBC00C661C6 /* flatten_decoration_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A682522B17BBB00C661C6 /* flatten_decoration_pass.h */; };
- A94A6AA422B17BBC00C661C6 /* if_conversion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A682622B17BBB00C661C6 /* if_conversion.cpp */; };
- A94A6AA522B17BBC00C661C6 /* if_conversion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A682622B17BBB00C661C6 /* if_conversion.cpp */; };
- A94A6AA622B17BBC00C661C6 /* inline_exhaustive_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A682722B17BBB00C661C6 /* inline_exhaustive_pass.h */; };
- A94A6AA722B17BBC00C661C6 /* inline_exhaustive_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A682722B17BBB00C661C6 /* inline_exhaustive_pass.h */; };
- A94A6AA822B17BBC00C661C6 /* constants.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A682822B17BBB00C661C6 /* constants.h */; };
- A94A6AA922B17BBC00C661C6 /* constants.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A682822B17BBB00C661C6 /* constants.h */; };
- A94A6AAA22B17BBC00C661C6 /* eliminate_dead_members_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A682922B17BBB00C661C6 /* eliminate_dead_members_pass.cpp */; };
- A94A6AAB22B17BBC00C661C6 /* eliminate_dead_members_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A682922B17BBB00C661C6 /* eliminate_dead_members_pass.cpp */; };
- A94A6AAC22B17BBC00C661C6 /* strength_reduction_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A682A22B17BBB00C661C6 /* strength_reduction_pass.cpp */; };
- A94A6AAD22B17BBC00C661C6 /* strength_reduction_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A682A22B17BBB00C661C6 /* strength_reduction_pass.cpp */; };
- A94A6AAE22B17BBC00C661C6 /* block_merge_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A682B22B17BBB00C661C6 /* block_merge_util.cpp */; };
- A94A6AAF22B17BBC00C661C6 /* block_merge_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A682B22B17BBB00C661C6 /* block_merge_util.cpp */; };
- A94A6AB022B17BBC00C661C6 /* upgrade_memory_model.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A682C22B17BBB00C661C6 /* upgrade_memory_model.h */; };
- A94A6AB122B17BBC00C661C6 /* upgrade_memory_model.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A682C22B17BBB00C661C6 /* upgrade_memory_model.h */; };
- A94A6AB222B17BBC00C661C6 /* copy_prop_arrays.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A682D22B17BBB00C661C6 /* copy_prop_arrays.cpp */; };
- A94A6AB322B17BBC00C661C6 /* copy_prop_arrays.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A682D22B17BBB00C661C6 /* copy_prop_arrays.cpp */; };
- A94A6AB422B17BBC00C661C6 /* pass_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A682E22B17BBB00C661C6 /* pass_manager.cpp */; };
- A94A6AB522B17BBC00C661C6 /* pass_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A682E22B17BBB00C661C6 /* pass_manager.cpp */; };
- A94A6AB622B17BBC00C661C6 /* inline_exhaustive_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A682F22B17BBB00C661C6 /* inline_exhaustive_pass.cpp */; };
- A94A6AB722B17BBC00C661C6 /* inline_exhaustive_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A682F22B17BBB00C661C6 /* inline_exhaustive_pass.cpp */; };
- A94A6AB822B17BBC00C661C6 /* loop_fission.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683022B17BBB00C661C6 /* loop_fission.h */; };
- A94A6AB922B17BBC00C661C6 /* loop_fission.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683022B17BBB00C661C6 /* loop_fission.h */; };
- A94A6ABA22B17BBC00C661C6 /* workaround1209.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683122B17BBB00C661C6 /* workaround1209.h */; };
- A94A6ABB22B17BBC00C661C6 /* workaround1209.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683122B17BBB00C661C6 /* workaround1209.h */; };
- A94A6ABC22B17BBC00C661C6 /* loop_fusion_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A683222B17BBB00C661C6 /* loop_fusion_pass.cpp */; };
- A94A6ABD22B17BBC00C661C6 /* loop_fusion_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A683222B17BBB00C661C6 /* loop_fusion_pass.cpp */; };
- A94A6ABE22B17BBC00C661C6 /* log.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683322B17BBB00C661C6 /* log.h */; };
- A94A6ABF22B17BBC00C661C6 /* log.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683322B17BBB00C661C6 /* log.h */; };
- A94A6AC022B17BBC00C661C6 /* split_invalid_unreachable_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683422B17BBB00C661C6 /* split_invalid_unreachable_pass.h */; };
- A94A6AC122B17BBC00C661C6 /* split_invalid_unreachable_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683422B17BBB00C661C6 /* split_invalid_unreachable_pass.h */; };
- A94A6AC222B17BBC00C661C6 /* copy_prop_arrays.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683522B17BBB00C661C6 /* copy_prop_arrays.h */; };
- A94A6AC322B17BBC00C661C6 /* copy_prop_arrays.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683522B17BBB00C661C6 /* copy_prop_arrays.h */; };
- A94A6AC422B17BBC00C661C6 /* eliminate_dead_constant_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683622B17BBB00C661C6 /* eliminate_dead_constant_pass.h */; };
- A94A6AC522B17BBC00C661C6 /* eliminate_dead_constant_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683622B17BBB00C661C6 /* eliminate_dead_constant_pass.h */; };
- A94A6AC622B17BBC00C661C6 /* dead_insert_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A683722B17BBB00C661C6 /* dead_insert_elim_pass.cpp */; };
- A94A6AC722B17BBC00C661C6 /* dead_insert_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A683722B17BBB00C661C6 /* dead_insert_elim_pass.cpp */; };
- A94A6AC822B17BBC00C661C6 /* ssa_rewrite_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683822B17BBB00C661C6 /* ssa_rewrite_pass.h */; };
- A94A6AC922B17BBC00C661C6 /* ssa_rewrite_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683822B17BBB00C661C6 /* ssa_rewrite_pass.h */; };
- A94A6ACA22B17BBC00C661C6 /* scalar_analysis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A683922B17BBB00C661C6 /* scalar_analysis.cpp */; };
- A94A6ACB22B17BBC00C661C6 /* scalar_analysis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A683922B17BBB00C661C6 /* scalar_analysis.cpp */; };
- A94A6ACC22B17BBC00C661C6 /* dead_variable_elimination.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683A22B17BBB00C661C6 /* dead_variable_elimination.h */; };
- A94A6ACD22B17BBC00C661C6 /* dead_variable_elimination.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683A22B17BBB00C661C6 /* dead_variable_elimination.h */; };
- A94A6ACE22B17BBC00C661C6 /* block_merge_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A683B22B17BBB00C661C6 /* block_merge_pass.cpp */; };
- A94A6ACF22B17BBC00C661C6 /* block_merge_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A683B22B17BBB00C661C6 /* block_merge_pass.cpp */; };
- A94A6AD022B17BBC00C661C6 /* dominator_analysis.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683C22B17BBB00C661C6 /* dominator_analysis.h */; };
- A94A6AD122B17BBC00C661C6 /* dominator_analysis.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683C22B17BBB00C661C6 /* dominator_analysis.h */; };
- A94A6AD222B17BBC00C661C6 /* pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683D22B17BBB00C661C6 /* pass.h */; };
- A94A6AD322B17BBC00C661C6 /* pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683D22B17BBB00C661C6 /* pass.h */; };
- A94A6AD422B17BBC00C661C6 /* folding_rules.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683E22B17BBB00C661C6 /* folding_rules.h */; };
- A94A6AD522B17BBC00C661C6 /* folding_rules.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683E22B17BBB00C661C6 /* folding_rules.h */; };
- A94A6AD622B17BBC00C661C6 /* eliminate_dead_functions_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683F22B17BBB00C661C6 /* eliminate_dead_functions_pass.h */; };
- A94A6AD722B17BBC00C661C6 /* eliminate_dead_functions_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683F22B17BBB00C661C6 /* eliminate_dead_functions_pass.h */; };
- A94A6AD822B17BBC00C661C6 /* common_uniform_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A684022B17BBB00C661C6 /* common_uniform_elim_pass.h */; };
- A94A6AD922B17BBC00C661C6 /* common_uniform_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A684022B17BBB00C661C6 /* common_uniform_elim_pass.h */; };
- A94A6ADA22B17BBC00C661C6 /* eliminate_dead_functions_util.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A684122B17BBB00C661C6 /* eliminate_dead_functions_util.h */; };
- A94A6ADB22B17BBC00C661C6 /* eliminate_dead_functions_util.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A684122B17BBB00C661C6 /* eliminate_dead_functions_util.h */; };
- A94A6ADC22B17BBC00C661C6 /* fold.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A684222B17BBB00C661C6 /* fold.h */; };
- A94A6ADD22B17BBC00C661C6 /* fold.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A684222B17BBB00C661C6 /* fold.h */; };
- A94A6ADE22B17BBC00C661C6 /* local_single_store_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A684322B17BBB00C661C6 /* local_single_store_elim_pass.cpp */; };
- A94A6ADF22B17BBC00C661C6 /* local_single_store_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A684322B17BBB00C661C6 /* local_single_store_elim_pass.cpp */; };
- A94A6AE022B17BBC00C661C6 /* dead_branch_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A684422B17BBB00C661C6 /* dead_branch_elim_pass.h */; };
- A94A6AE122B17BBC00C661C6 /* dead_branch_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A684422B17BBB00C661C6 /* dead_branch_elim_pass.h */; };
- A94A6AE222B17BBC00C661C6 /* private_to_local_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A684522B17BBB00C661C6 /* private_to_local_pass.cpp */; };
- A94A6AE322B17BBC00C661C6 /* private_to_local_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A684522B17BBB00C661C6 /* private_to_local_pass.cpp */; };
- A94A6AE422B17BBC00C661C6 /* scalar_analysis_nodes.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A684622B17BBB00C661C6 /* scalar_analysis_nodes.h */; };
- A94A6AE522B17BBC00C661C6 /* scalar_analysis_nodes.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A684622B17BBB00C661C6 /* scalar_analysis_nodes.h */; };
- A94A6AE622B17BBC00C661C6 /* propagator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A684722B17BBB00C661C6 /* propagator.cpp */; };
- A94A6AE722B17BBC00C661C6 /* propagator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A684722B17BBB00C661C6 /* propagator.cpp */; };
- A94A6AE822B17BBC00C661C6 /* fix_storage_class.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A684822B17BBB00C661C6 /* fix_storage_class.h */; };
- A94A6AE922B17BBC00C661C6 /* fix_storage_class.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A684822B17BBB00C661C6 /* fix_storage_class.h */; };
- A94A6AEA22B17BBC00C661C6 /* loop_dependence_helpers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A684922B17BBB00C661C6 /* loop_dependence_helpers.cpp */; };
- A94A6AEB22B17BBC00C661C6 /* loop_dependence_helpers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A684922B17BBB00C661C6 /* loop_dependence_helpers.cpp */; };
- A94A6AEC22B17BBC00C661C6 /* set_spec_constant_default_value_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A684A22B17BBB00C661C6 /* set_spec_constant_default_value_pass.cpp */; };
- A94A6AED22B17BBC00C661C6 /* set_spec_constant_default_value_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A684A22B17BBB00C661C6 /* set_spec_constant_default_value_pass.cpp */; };
- A94A6AEE22B17BBC00C661C6 /* passes.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A684B22B17BBB00C661C6 /* passes.h */; };
- A94A6AEF22B17BBC00C661C6 /* passes.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A684B22B17BBB00C661C6 /* passes.h */; };
- A94A6AF022B17BBC00C661C6 /* fold.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A684C22B17BBB00C661C6 /* fold.cpp */; };
- A94A6AF122B17BBC00C661C6 /* fold.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A684C22B17BBB00C661C6 /* fold.cpp */; };
- A94A6AF222B17BBC00C661C6 /* strip_reflect_info_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A684D22B17BBB00C661C6 /* strip_reflect_info_pass.h */; };
- A94A6AF322B17BBC00C661C6 /* strip_reflect_info_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A684D22B17BBB00C661C6 /* strip_reflect_info_pass.h */; };
- A94A6AF422B17BBC00C661C6 /* scalar_replacement_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A684E22B17BBB00C661C6 /* scalar_replacement_pass.cpp */; };
- A94A6AF522B17BBC00C661C6 /* scalar_replacement_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A684E22B17BBB00C661C6 /* scalar_replacement_pass.cpp */; };
- A94A6AF622B17BBC00C661C6 /* simplification_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A684F22B17BBB00C661C6 /* simplification_pass.h */; };
- A94A6AF722B17BBC00C661C6 /* simplification_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A684F22B17BBB00C661C6 /* simplification_pass.h */; };
- A94A6AF822B17BBC00C661C6 /* remove_duplicates_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A685022B17BBB00C661C6 /* remove_duplicates_pass.h */; };
- A94A6AF922B17BBC00C661C6 /* remove_duplicates_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A685022B17BBB00C661C6 /* remove_duplicates_pass.h */; };
- A94A6AFA22B17BBC00C661C6 /* redundancy_elimination.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A685122B17BBB00C661C6 /* redundancy_elimination.cpp */; };
- A94A6AFB22B17BBC00C661C6 /* redundancy_elimination.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A685122B17BBB00C661C6 /* redundancy_elimination.cpp */; };
- A94A6AFC22B17BBC00C661C6 /* reflect.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A685222B17BBB00C661C6 /* reflect.h */; };
- A94A6AFD22B17BBC00C661C6 /* reflect.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A685222B17BBB00C661C6 /* reflect.h */; };
- A94A6AFE22B17BBC00C661C6 /* workaround1209.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A685322B17BBB00C661C6 /* workaround1209.cpp */; };
- A94A6AFF22B17BBC00C661C6 /* workaround1209.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A685322B17BBB00C661C6 /* workaround1209.cpp */; };
- A94A6B0022B17BBC00C661C6 /* null_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A685422B17BBB00C661C6 /* null_pass.h */; };
- A94A6B0122B17BBC00C661C6 /* null_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A685422B17BBB00C661C6 /* null_pass.h */; };
- A94A6B0222B17BBC00C661C6 /* const_folding_rules.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A685522B17BBB00C661C6 /* const_folding_rules.h */; };
- A94A6B0322B17BBC00C661C6 /* const_folding_rules.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A685522B17BBB00C661C6 /* const_folding_rules.h */; };
- A94A6B0422B17BBC00C661C6 /* scalar_replacement_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A685622B17BBB00C661C6 /* scalar_replacement_pass.h */; };
- A94A6B0522B17BBC00C661C6 /* scalar_replacement_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A685622B17BBB00C661C6 /* scalar_replacement_pass.h */; };
- A94A6B0622B17BBC00C661C6 /* instruction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A685722B17BBB00C661C6 /* instruction.cpp */; };
- A94A6B0722B17BBC00C661C6 /* instruction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A685722B17BBB00C661C6 /* instruction.cpp */; };
- A94A6B0822B17BBC00C661C6 /* pch_source_opt.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A685822B17BBB00C661C6 /* pch_source_opt.h */; };
- A94A6B0922B17BBC00C661C6 /* pch_source_opt.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A685822B17BBB00C661C6 /* pch_source_opt.h */; };
- A94A6B0A22B17BBC00C661C6 /* reduce_load_size.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A685922B17BBB00C661C6 /* reduce_load_size.cpp */; };
- A94A6B0B22B17BBC00C661C6 /* reduce_load_size.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A685922B17BBB00C661C6 /* reduce_load_size.cpp */; };
- A94A6B0C22B17BBC00C661C6 /* redundancy_elimination.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A685A22B17BBB00C661C6 /* redundancy_elimination.h */; };
- A94A6B0D22B17BBC00C661C6 /* redundancy_elimination.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A685A22B17BBB00C661C6 /* redundancy_elimination.h */; };
- A94A6B0E22B17BBC00C661C6 /* fix_storage_class.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A685B22B17BBB00C661C6 /* fix_storage_class.cpp */; };
- A94A6B0F22B17BBC00C661C6 /* fix_storage_class.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A685B22B17BBB00C661C6 /* fix_storage_class.cpp */; };
- A94A6B1022B17BBC00C661C6 /* value_number_table.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A685C22B17BBB00C661C6 /* value_number_table.cpp */; };
- A94A6B1122B17BBC00C661C6 /* value_number_table.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A685C22B17BBB00C661C6 /* value_number_table.cpp */; };
- A94A6B1222B17BBC00C661C6 /* local_ssa_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A685D22B17BBB00C661C6 /* local_ssa_elim_pass.h */; };
- A94A6B1322B17BBC00C661C6 /* local_ssa_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A685D22B17BBB00C661C6 /* local_ssa_elim_pass.h */; };
- A94A6B1422B17BBC00C661C6 /* inline_opaque_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A685E22B17BBB00C661C6 /* inline_opaque_pass.cpp */; };
- A94A6B1522B17BBC00C661C6 /* inline_opaque_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A685E22B17BBB00C661C6 /* inline_opaque_pass.cpp */; };
- A94A6B1622B17BBC00C661C6 /* replace_invalid_opc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A685F22B17BBB00C661C6 /* replace_invalid_opc.cpp */; };
- A94A6B1722B17BBC00C661C6 /* replace_invalid_opc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A685F22B17BBB00C661C6 /* replace_invalid_opc.cpp */; };
- A94A6B1822B17BBC00C661C6 /* loop_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686022B17BBB00C661C6 /* loop_utils.h */; };
- A94A6B1922B17BBC00C661C6 /* loop_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686022B17BBB00C661C6 /* loop_utils.h */; };
- A94A6B1A22B17BBC00C661C6 /* module.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686122B17BBB00C661C6 /* module.h */; };
- A94A6B1B22B17BBC00C661C6 /* module.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686122B17BBB00C661C6 /* module.h */; };
- A94A6B1C22B17BBC00C661C6 /* dominator_analysis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A686222B17BBB00C661C6 /* dominator_analysis.cpp */; };
- A94A6B1D22B17BBC00C661C6 /* dominator_analysis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A686222B17BBB00C661C6 /* dominator_analysis.cpp */; };
- A94A6B1E22B17BBC00C661C6 /* decompose_initialized_variables_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A686322B17BBB00C661C6 /* decompose_initialized_variables_pass.cpp */; };
- A94A6B1F22B17BBC00C661C6 /* decompose_initialized_variables_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A686322B17BBB00C661C6 /* decompose_initialized_variables_pass.cpp */; };
- A94A6B2022B17BBC00C661C6 /* ir_builder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686422B17BBB00C661C6 /* ir_builder.h */; };
- A94A6B2122B17BBC00C661C6 /* ir_builder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686422B17BBB00C661C6 /* ir_builder.h */; };
- A94A6B2222B17BBC00C661C6 /* loop_unswitch_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686522B17BBB00C661C6 /* loop_unswitch_pass.h */; };
- A94A6B2322B17BBC00C661C6 /* loop_unswitch_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686522B17BBB00C661C6 /* loop_unswitch_pass.h */; };
- A94A6B2422B17BBC00C661C6 /* cfg.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686622B17BBB00C661C6 /* cfg.h */; };
- A94A6B2522B17BBC00C661C6 /* cfg.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686622B17BBB00C661C6 /* cfg.h */; };
- A94A6B2622B17BBC00C661C6 /* code_sink.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686722B17BBB00C661C6 /* code_sink.h */; };
- A94A6B2722B17BBC00C661C6 /* code_sink.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686722B17BBB00C661C6 /* code_sink.h */; };
- A94A6B2822B17BBC00C661C6 /* loop_descriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686822B17BBB00C661C6 /* loop_descriptor.h */; };
- A94A6B2922B17BBC00C661C6 /* loop_descriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686822B17BBB00C661C6 /* loop_descriptor.h */; };
- A94A6B2A22B17BBC00C661C6 /* generate_webgpu_initializers_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686922B17BBB00C661C6 /* generate_webgpu_initializers_pass.h */; };
- A94A6B2B22B17BBC00C661C6 /* generate_webgpu_initializers_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686922B17BBB00C661C6 /* generate_webgpu_initializers_pass.h */; };
- A94A6B2C22B17BBC00C661C6 /* instruction.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686A22B17BBB00C661C6 /* instruction.h */; };
- A94A6B2D22B17BBC00C661C6 /* instruction.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686A22B17BBB00C661C6 /* instruction.h */; };
- A94A6B2E22B17BBC00C661C6 /* aggressive_dead_code_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686B22B17BBB00C661C6 /* aggressive_dead_code_elim_pass.h */; };
- A94A6B2F22B17BBC00C661C6 /* aggressive_dead_code_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686B22B17BBB00C661C6 /* aggressive_dead_code_elim_pass.h */; };
- A94A6B3022B17BBC00C661C6 /* struct_cfg_analysis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A686C22B17BBB00C661C6 /* struct_cfg_analysis.cpp */; };
- A94A6B3122B17BBC00C661C6 /* struct_cfg_analysis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A686C22B17BBB00C661C6 /* struct_cfg_analysis.cpp */; };
- A94A6B3222B17BBC00C661C6 /* vector_dce.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686D22B17BBB00C661C6 /* vector_dce.h */; };
- A94A6B3322B17BBC00C661C6 /* vector_dce.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686D22B17BBB00C661C6 /* vector_dce.h */; };
- A94A6B3422B17BBC00C661C6 /* combine_access_chains.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686E22B17BBB00C661C6 /* combine_access_chains.h */; };
- A94A6B3522B17BBC00C661C6 /* combine_access_chains.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686E22B17BBB00C661C6 /* combine_access_chains.h */; };
- A94A6B3622B17BBC00C661C6 /* pass_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686F22B17BBB00C661C6 /* pass_manager.h */; };
- A94A6B3722B17BBC00C661C6 /* pass_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686F22B17BBB00C661C6 /* pass_manager.h */; };
- A94A6B3822B17BBC00C661C6 /* local_access_chain_convert_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A687022B17BBB00C661C6 /* local_access_chain_convert_pass.cpp */; };
- A94A6B3922B17BBC00C661C6 /* local_access_chain_convert_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A687022B17BBB00C661C6 /* local_access_chain_convert_pass.cpp */; };
- A94A6B3A22B17BBC00C661C6 /* basic_block.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A687122B17BBB00C661C6 /* basic_block.cpp */; };
- A94A6B3B22B17BBC00C661C6 /* basic_block.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A687122B17BBB00C661C6 /* basic_block.cpp */; };
- A94A6B3C22B17BBC00C661C6 /* iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A687222B17BBB00C661C6 /* iterator.h */; };
- A94A6B3D22B17BBC00C661C6 /* iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A687222B17BBB00C661C6 /* iterator.h */; };
- A94A6B3E22B17BBC00C661C6 /* licm_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A687322B17BBB00C661C6 /* licm_pass.h */; };
- A94A6B3F22B17BBC00C661C6 /* licm_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A687322B17BBB00C661C6 /* licm_pass.h */; };
- A94A6B4022B17BBC00C661C6 /* build_module.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A687422B17BBB00C661C6 /* build_module.h */; };
- A94A6B4122B17BBC00C661C6 /* build_module.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A687422B17BBB00C661C6 /* build_module.h */; };
- A94A6B4222B17BBC00C661C6 /* ccp_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A687522B17BBB00C661C6 /* ccp_pass.h */; };
- A94A6B4322B17BBC00C661C6 /* ccp_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A687522B17BBB00C661C6 /* ccp_pass.h */; };
- A94A6B4422B17BBC00C661C6 /* decompose_initialized_variables_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A687622B17BBB00C661C6 /* decompose_initialized_variables_pass.h */; };
- A94A6B4522B17BBC00C661C6 /* decompose_initialized_variables_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A687622B17BBB00C661C6 /* decompose_initialized_variables_pass.h */; };
- A94A6B4622B17BBC00C661C6 /* function.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A687722B17BBB00C661C6 /* function.h */; };
- A94A6B4722B17BBC00C661C6 /* function.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A687722B17BBB00C661C6 /* function.h */; };
- A94A6B4822B17BBC00C661C6 /* loop_fusion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A687822B17BBB00C661C6 /* loop_fusion.cpp */; };
- A94A6B4922B17BBC00C661C6 /* loop_fusion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A687822B17BBB00C661C6 /* loop_fusion.cpp */; };
- A94A6B4A22B17BBC00C661C6 /* upgrade_memory_model.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A687922B17BBB00C661C6 /* upgrade_memory_model.cpp */; };
- A94A6B4B22B17BBC00C661C6 /* upgrade_memory_model.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A687922B17BBB00C661C6 /* upgrade_memory_model.cpp */; };
- A94A6B4C22B17BBC00C661C6 /* feature_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A687A22B17BBB00C661C6 /* feature_manager.h */; };
- A94A6B4D22B17BBC00C661C6 /* feature_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A687A22B17BBB00C661C6 /* feature_manager.h */; };
- A94A6B4E22B17BBC00C661C6 /* inst_bindless_check_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A687B22B17BBB00C661C6 /* inst_bindless_check_pass.h */; };
- A94A6B4F22B17BBC00C661C6 /* inst_bindless_check_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A687B22B17BBB00C661C6 /* inst_bindless_check_pass.h */; };
- A94A6B5022B17BBC00C661C6 /* scalar_analysis_simplification.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A687C22B17BBB00C661C6 /* scalar_analysis_simplification.cpp */; };
- A94A6B5122B17BBC00C661C6 /* scalar_analysis_simplification.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A687C22B17BBB00C661C6 /* scalar_analysis_simplification.cpp */; };
- A94A6B5222B17BBC00C661C6 /* set_spec_constant_default_value_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A687D22B17BBB00C661C6 /* set_spec_constant_default_value_pass.h */; };
- A94A6B5322B17BBC00C661C6 /* set_spec_constant_default_value_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A687D22B17BBB00C661C6 /* set_spec_constant_default_value_pass.h */; };
- A94A6B5422B17BBC00C661C6 /* dominator_tree.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A687E22B17BBB00C661C6 /* dominator_tree.h */; };
- A94A6B5522B17BBC00C661C6 /* dominator_tree.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A687E22B17BBB00C661C6 /* dominator_tree.h */; };
- A94A6B5622B17BBC00C661C6 /* legalize_vector_shuffle_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A687F22B17BBB00C661C6 /* legalize_vector_shuffle_pass.cpp */; };
- A94A6B5722B17BBC00C661C6 /* legalize_vector_shuffle_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A687F22B17BBB00C661C6 /* legalize_vector_shuffle_pass.cpp */; };
- A94A6B5822B17BBC00C661C6 /* type_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A688022B17BBB00C661C6 /* type_manager.h */; };
- A94A6B5922B17BBC00C661C6 /* type_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A688022B17BBB00C661C6 /* type_manager.h */; };
- A94A6B5A22B17BBC00C661C6 /* compact_ids_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A688122B17BBB00C661C6 /* compact_ids_pass.cpp */; };
- A94A6B5B22B17BBC00C661C6 /* compact_ids_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A688122B17BBB00C661C6 /* compact_ids_pass.cpp */; };
- A94A6B5C22B17BBC00C661C6 /* loop_peeling.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A688222B17BBB00C661C6 /* loop_peeling.cpp */; };
- A94A6B5D22B17BBC00C661C6 /* loop_peeling.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A688222B17BBB00C661C6 /* loop_peeling.cpp */; };
- A94A6B5E22B17BBC00C661C6 /* table.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A688322B17BBB00C661C6 /* table.h */; };
- A94A6B5F22B17BBC00C661C6 /* table.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A688322B17BBB00C661C6 /* table.h */; };
- A94A6BB022B17BBC00C661C6 /* ext_inst.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68AF22B17BBB00C661C6 /* ext_inst.h */; };
- A94A6BB122B17BBC00C661C6 /* ext_inst.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68AF22B17BBB00C661C6 /* ext_inst.h */; };
- A94A6BB222B17BBC00C661C6 /* diagnostic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68B022B17BBB00C661C6 /* diagnostic.cpp */; };
- A94A6BB322B17BBC00C661C6 /* diagnostic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68B022B17BBB00C661C6 /* diagnostic.cpp */; };
- A94A6BB422B17BBC00C661C6 /* latest_version_spirv_header.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68B122B17BBB00C661C6 /* latest_version_spirv_header.h */; };
- A94A6BB522B17BBC00C661C6 /* latest_version_spirv_header.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68B122B17BBB00C661C6 /* latest_version_spirv_header.h */; };
- A94A6BB622B17BBC00C661C6 /* libspirv.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68B222B17BBB00C661C6 /* libspirv.cpp */; };
- A94A6BB722B17BBC00C661C6 /* libspirv.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68B222B17BBB00C661C6 /* libspirv.cpp */; };
- A94A6BB822B17BBC00C661C6 /* instruction.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68B322B17BBB00C661C6 /* instruction.h */; };
- A94A6BB922B17BBC00C661C6 /* instruction.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68B322B17BBB00C661C6 /* instruction.h */; };
- A94A6BBA22B17BBC00C661C6 /* spirv_optimizer_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68B422B17BBB00C661C6 /* spirv_optimizer_options.h */; };
- A94A6BBB22B17BBC00C661C6 /* spirv_optimizer_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68B422B17BBB00C661C6 /* spirv_optimizer_options.h */; };
- A94A6BBC22B17BBC00C661C6 /* opcode.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68B522B17BBB00C661C6 /* opcode.h */; };
- A94A6BBD22B17BBC00C661C6 /* opcode.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68B522B17BBB00C661C6 /* opcode.h */; };
- A94A6BBE22B17BBC00C661C6 /* operand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68B622B17BBB00C661C6 /* operand.cpp */; };
- A94A6BBF22B17BBC00C661C6 /* operand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68B622B17BBB00C661C6 /* operand.cpp */; };
- A94A6BC022B17BBC00C661C6 /* latest_version_glsl_std_450_header.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68B722B17BBB00C661C6 /* latest_version_glsl_std_450_header.h */; };
- A94A6BC122B17BBC00C661C6 /* latest_version_glsl_std_450_header.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68B722B17BBB00C661C6 /* latest_version_glsl_std_450_header.h */; };
- A94A6BC222B17BBC00C661C6 /* extensions.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68B822B17BBB00C661C6 /* extensions.h */; };
- A94A6BC322B17BBC00C661C6 /* extensions.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68B822B17BBB00C661C6 /* extensions.h */; };
- A94A6BC422B17BBC00C661C6 /* disassemble.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68B922B17BBB00C661C6 /* disassemble.cpp */; };
- A94A6BC522B17BBC00C661C6 /* disassemble.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68B922B17BBB00C661C6 /* disassemble.cpp */; };
- A94A6BC622B17BBC00C661C6 /* binary.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68BA22B17BBB00C661C6 /* binary.h */; };
- A94A6BC722B17BBC00C661C6 /* binary.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68BA22B17BBB00C661C6 /* binary.h */; };
- A94A6BC822B17BBC00C661C6 /* text_handler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68BB22B17BBB00C661C6 /* text_handler.cpp */; };
- A94A6BC922B17BBC00C661C6 /* text_handler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68BB22B17BBB00C661C6 /* text_handler.cpp */; };
- A94A6BCA22B17BBC00C661C6 /* validate_annotation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68BD22B17BBB00C661C6 /* validate_annotation.cpp */; };
- A94A6BCB22B17BBC00C661C6 /* validate_annotation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68BD22B17BBB00C661C6 /* validate_annotation.cpp */; };
- A94A6BCC22B17BBC00C661C6 /* validate_misc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68BE22B17BBB00C661C6 /* validate_misc.cpp */; };
- A94A6BCD22B17BBC00C661C6 /* validate_misc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68BE22B17BBB00C661C6 /* validate_misc.cpp */; };
- A94A6BCE22B17BBC00C661C6 /* validate_cfg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68BF22B17BBB00C661C6 /* validate_cfg.cpp */; };
- A94A6BCF22B17BBC00C661C6 /* validate_cfg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68BF22B17BBB00C661C6 /* validate_cfg.cpp */; };
- A94A6BD022B17BBC00C661C6 /* validate_capability.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68C022B17BBB00C661C6 /* validate_capability.cpp */; };
- A94A6BD122B17BBC00C661C6 /* validate_capability.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68C022B17BBB00C661C6 /* validate_capability.cpp */; };
- A94A6BD222B17BBC00C661C6 /* construct.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68C122B17BBB00C661C6 /* construct.h */; };
- A94A6BD322B17BBC00C661C6 /* construct.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68C122B17BBB00C661C6 /* construct.h */; };
- A94A6BD422B17BBC00C661C6 /* validate_barriers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68C222B17BBB00C661C6 /* validate_barriers.cpp */; };
- A94A6BD522B17BBC00C661C6 /* validate_barriers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68C222B17BBB00C661C6 /* validate_barriers.cpp */; };
- A94A6BD622B17BBC00C661C6 /* validate_non_uniform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68C322B17BBB00C661C6 /* validate_non_uniform.cpp */; };
- A94A6BD722B17BBC00C661C6 /* validate_non_uniform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68C322B17BBB00C661C6 /* validate_non_uniform.cpp */; };
- A94A6BD822B17BBC00C661C6 /* validate_scopes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68C422B17BBB00C661C6 /* validate_scopes.cpp */; };
- A94A6BD922B17BBC00C661C6 /* validate_scopes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68C422B17BBB00C661C6 /* validate_scopes.cpp */; };
- A94A6BDA22B17BBC00C661C6 /* validate_atomics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68C522B17BBB00C661C6 /* validate_atomics.cpp */; };
- A94A6BDB22B17BBC00C661C6 /* validate_atomics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68C522B17BBB00C661C6 /* validate_atomics.cpp */; };
- A94A6BDC22B17BBC00C661C6 /* basic_block.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68C622B17BBB00C661C6 /* basic_block.h */; };
- A94A6BDD22B17BBC00C661C6 /* basic_block.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68C622B17BBB00C661C6 /* basic_block.h */; };
- A94A6BDE22B17BBC00C661C6 /* validate_instruction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68C722B17BBB00C661C6 /* validate_instruction.cpp */; };
- A94A6BDF22B17BBC00C661C6 /* validate_instruction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68C722B17BBB00C661C6 /* validate_instruction.cpp */; };
- A94A6BE022B17BBC00C661C6 /* validate_decorations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68C822B17BBB00C661C6 /* validate_decorations.cpp */; };
- A94A6BE122B17BBC00C661C6 /* validate_decorations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68C822B17BBB00C661C6 /* validate_decorations.cpp */; };
- A94A6BE222B17BBC00C661C6 /* validate_debug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68C922B17BBB00C661C6 /* validate_debug.cpp */; };
- A94A6BE322B17BBC00C661C6 /* validate_debug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68C922B17BBB00C661C6 /* validate_debug.cpp */; };
- A94A6BE422B17BBC00C661C6 /* validate_builtins.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68CA22B17BBB00C661C6 /* validate_builtins.cpp */; };
- A94A6BE522B17BBC00C661C6 /* validate_builtins.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68CA22B17BBB00C661C6 /* validate_builtins.cpp */; };
- A94A6BE622B17BBC00C661C6 /* validate_interfaces.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68CB22B17BBB00C661C6 /* validate_interfaces.cpp */; };
- A94A6BE722B17BBC00C661C6 /* validate_interfaces.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68CB22B17BBB00C661C6 /* validate_interfaces.cpp */; };
- A94A6BE822B17BBC00C661C6 /* validate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68CC22B17BBB00C661C6 /* validate.cpp */; };
- A94A6BE922B17BBC00C661C6 /* validate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68CC22B17BBB00C661C6 /* validate.cpp */; };
- A94A6BEA22B17BBC00C661C6 /* validation_state.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68CD22B17BBB00C661C6 /* validation_state.h */; };
- A94A6BEB22B17BBC00C661C6 /* validation_state.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68CD22B17BBB00C661C6 /* validation_state.h */; };
- A94A6BEC22B17BBD00C661C6 /* validate_constants.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68CE22B17BBB00C661C6 /* validate_constants.cpp */; };
- A94A6BED22B17BBD00C661C6 /* validate_constants.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68CE22B17BBB00C661C6 /* validate_constants.cpp */; };
- A94A6BEE22B17BBD00C661C6 /* validate_bitwise.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68CF22B17BBB00C661C6 /* validate_bitwise.cpp */; };
- A94A6BEF22B17BBD00C661C6 /* validate_bitwise.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68CF22B17BBB00C661C6 /* validate_bitwise.cpp */; };
- A94A6BF022B17BBD00C661C6 /* validate_extensions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68D022B17BBB00C661C6 /* validate_extensions.cpp */; };
- A94A6BF122B17BBD00C661C6 /* validate_extensions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68D022B17BBB00C661C6 /* validate_extensions.cpp */; };
- A94A6BF222B17BBD00C661C6 /* construct.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68D122B17BBB00C661C6 /* construct.cpp */; };
- A94A6BF322B17BBD00C661C6 /* construct.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68D122B17BBB00C661C6 /* construct.cpp */; };
- A94A6BF422B17BBD00C661C6 /* function.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68D222B17BBB00C661C6 /* function.cpp */; };
- A94A6BF522B17BBD00C661C6 /* function.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68D222B17BBB00C661C6 /* function.cpp */; };
- A94A6BF622B17BBD00C661C6 /* validate.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68D322B17BBB00C661C6 /* validate.h */; };
- A94A6BF722B17BBD00C661C6 /* validate.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68D322B17BBB00C661C6 /* validate.h */; };
- A94A6BF822B17BBD00C661C6 /* validate_adjacency.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68D422B17BBB00C661C6 /* validate_adjacency.cpp */; };
- A94A6BF922B17BBD00C661C6 /* validate_adjacency.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68D422B17BBB00C661C6 /* validate_adjacency.cpp */; };
- A94A6BFA22B17BBD00C661C6 /* validate_conversion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68D522B17BBB00C661C6 /* validate_conversion.cpp */; };
- A94A6BFB22B17BBD00C661C6 /* validate_conversion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68D522B17BBB00C661C6 /* validate_conversion.cpp */; };
- A94A6BFC22B17BBD00C661C6 /* validate_datarules.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68D622B17BBB00C661C6 /* validate_datarules.cpp */; };
- A94A6BFD22B17BBD00C661C6 /* validate_datarules.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68D622B17BBB00C661C6 /* validate_datarules.cpp */; };
- A94A6BFE22B17BBD00C661C6 /* validate_scopes.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68D722B17BBB00C661C6 /* validate_scopes.h */; };
- A94A6BFF22B17BBD00C661C6 /* validate_scopes.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68D722B17BBB00C661C6 /* validate_scopes.h */; };
- A94A6C0022B17BBD00C661C6 /* validate_id.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68D822B17BBB00C661C6 /* validate_id.cpp */; };
- A94A6C0122B17BBD00C661C6 /* validate_id.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68D822B17BBB00C661C6 /* validate_id.cpp */; };
- A94A6C0222B17BBD00C661C6 /* validate_memory_semantics.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68D922B17BBB00C661C6 /* validate_memory_semantics.h */; };
- A94A6C0322B17BBD00C661C6 /* validate_memory_semantics.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68D922B17BBB00C661C6 /* validate_memory_semantics.h */; };
- A94A6C0422B17BBD00C661C6 /* validate_arithmetics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68DA22B17BBB00C661C6 /* validate_arithmetics.cpp */; };
- A94A6C0522B17BBD00C661C6 /* validate_arithmetics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68DA22B17BBB00C661C6 /* validate_arithmetics.cpp */; };
- A94A6C0622B17BBD00C661C6 /* validate_mode_setting.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68DB22B17BBB00C661C6 /* validate_mode_setting.cpp */; };
- A94A6C0722B17BBD00C661C6 /* validate_mode_setting.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68DB22B17BBB00C661C6 /* validate_mode_setting.cpp */; };
- A94A6C0822B17BBD00C661C6 /* validate_memory_semantics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68DC22B17BBB00C661C6 /* validate_memory_semantics.cpp */; };
- A94A6C0922B17BBD00C661C6 /* validate_memory_semantics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68DC22B17BBB00C661C6 /* validate_memory_semantics.cpp */; };
- A94A6C0A22B17BBD00C661C6 /* validate_logicals.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68DD22B17BBB00C661C6 /* validate_logicals.cpp */; };
- A94A6C0B22B17BBD00C661C6 /* validate_logicals.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68DD22B17BBB00C661C6 /* validate_logicals.cpp */; };
- A94A6C0C22B17BBD00C661C6 /* validate_derivatives.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68DE22B17BBB00C661C6 /* validate_derivatives.cpp */; };
- A94A6C0D22B17BBD00C661C6 /* validate_derivatives.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68DE22B17BBB00C661C6 /* validate_derivatives.cpp */; };
- A94A6C0E22B17BBD00C661C6 /* validate_memory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68DF22B17BBB00C661C6 /* validate_memory.cpp */; };
- A94A6C0F22B17BBD00C661C6 /* validate_memory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68DF22B17BBB00C661C6 /* validate_memory.cpp */; };
- A94A6C1022B17BBD00C661C6 /* validate_image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68E022B17BBB00C661C6 /* validate_image.cpp */; };
- A94A6C1122B17BBD00C661C6 /* validate_image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68E022B17BBB00C661C6 /* validate_image.cpp */; };
- A94A6C1222B17BBD00C661C6 /* validate_literals.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68E122B17BBB00C661C6 /* validate_literals.cpp */; };
- A94A6C1322B17BBD00C661C6 /* validate_literals.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68E122B17BBB00C661C6 /* validate_literals.cpp */; };
- A94A6C1422B17BBD00C661C6 /* instruction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68E222B17BBB00C661C6 /* instruction.cpp */; };
- A94A6C1522B17BBD00C661C6 /* instruction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68E222B17BBB00C661C6 /* instruction.cpp */; };
- A94A6C1622B17BBD00C661C6 /* validate_type.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68E322B17BBB00C661C6 /* validate_type.cpp */; };
- A94A6C1722B17BBD00C661C6 /* validate_type.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68E322B17BBB00C661C6 /* validate_type.cpp */; };
- A94A6C1822B17BBD00C661C6 /* instruction.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68E422B17BBB00C661C6 /* instruction.h */; };
- A94A6C1922B17BBD00C661C6 /* instruction.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68E422B17BBB00C661C6 /* instruction.h */; };
- A94A6C1A22B17BBD00C661C6 /* validate_execution_limitations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68E522B17BBB00C661C6 /* validate_execution_limitations.cpp */; };
- A94A6C1B22B17BBD00C661C6 /* validate_execution_limitations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68E522B17BBB00C661C6 /* validate_execution_limitations.cpp */; };
- A94A6C1C22B17BBD00C661C6 /* validate_layout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68E622B17BBB00C661C6 /* validate_layout.cpp */; };
- A94A6C1D22B17BBD00C661C6 /* validate_layout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68E622B17BBB00C661C6 /* validate_layout.cpp */; };
- A94A6C1E22B17BBD00C661C6 /* basic_block.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68E722B17BBB00C661C6 /* basic_block.cpp */; };
- A94A6C1F22B17BBD00C661C6 /* basic_block.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68E722B17BBB00C661C6 /* basic_block.cpp */; };
- A94A6C2022B17BBD00C661C6 /* validate_function.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68E822B17BBB00C661C6 /* validate_function.cpp */; };
- A94A6C2122B17BBD00C661C6 /* validate_function.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68E822B17BBB00C661C6 /* validate_function.cpp */; };
- A94A6C2222B17BBD00C661C6 /* function.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68E922B17BBB00C661C6 /* function.h */; };
- A94A6C2322B17BBD00C661C6 /* function.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68E922B17BBB00C661C6 /* function.h */; };
- A94A6C2422B17BBD00C661C6 /* validate_composites.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68EA22B17BBB00C661C6 /* validate_composites.cpp */; };
- A94A6C2522B17BBD00C661C6 /* validate_composites.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68EA22B17BBB00C661C6 /* validate_composites.cpp */; };
- A94A6C2622B17BBD00C661C6 /* validation_state.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68EB22B17BBB00C661C6 /* validation_state.cpp */; };
- A94A6C2722B17BBD00C661C6 /* validation_state.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68EB22B17BBB00C661C6 /* validation_state.cpp */; };
- A94A6C2822B17BBD00C661C6 /* validate_primitives.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68EC22B17BBB00C661C6 /* validate_primitives.cpp */; };
- A94A6C2922B17BBD00C661C6 /* validate_primitives.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68EC22B17BBB00C661C6 /* validate_primitives.cpp */; };
- A94A6C2A22B17BBD00C661C6 /* decoration.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68ED22B17BBB00C661C6 /* decoration.h */; };
- A94A6C2B22B17BBD00C661C6 /* decoration.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68ED22B17BBB00C661C6 /* decoration.h */; };
A972AC6521CED9060013AB25 /* InitializeDll.h in Headers */ = {isa = PBXBuildFile; fileRef = A972ABF721CED9060013AB25 /* InitializeDll.h */; };
A972AC6621CED9060013AB25 /* InitializeDll.h in Headers */ = {isa = PBXBuildFile; fileRef = A972ABF721CED9060013AB25 /* InitializeDll.h */; };
A972AC6721CED9060013AB25 /* InitializeDll.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A972ABF821CED9060013AB25 /* InitializeDll.cpp */; };
@@ -1012,6 +262,754 @@
A976292621CC60BC00B52A68 /* spirv_msl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A976290D21CC60BC00B52A68 /* spirv_msl.cpp */; };
A976292721CC60BC00B52A68 /* spirv_cross_parsed_ir.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A976290E21CC60BC00B52A68 /* spirv_cross_parsed_ir.cpp */; };
A976292821CC60BC00B52A68 /* spirv_cross_parsed_ir.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A976290E21CC60BC00B52A68 /* spirv_cross_parsed_ir.cpp */; };
+ A9C2F13922E7833D001763CE /* spirv_target_env.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF7822E7833C001763CE /* spirv_target_env.cpp */; };
+ A9C2F13A22E7833D001763CE /* spirv_target_env.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF7822E7833C001763CE /* spirv_target_env.cpp */; };
+ A9C2F13B22E7833D001763CE /* spirv_fuzzer_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF7A22E7833C001763CE /* spirv_fuzzer_options.h */; };
+ A9C2F13C22E7833D001763CE /* spirv_fuzzer_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF7A22E7833C001763CE /* spirv_fuzzer_options.h */; };
+ A9C2F13D22E7833D001763CE /* assembly_grammar.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF7B22E7833C001763CE /* assembly_grammar.h */; };
+ A9C2F13E22E7833D001763CE /* assembly_grammar.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF7B22E7833C001763CE /* assembly_grammar.h */; };
+ A9C2F13F22E7833D001763CE /* enum_set.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF7C22E7833C001763CE /* enum_set.h */; };
+ A9C2F14022E7833D001763CE /* enum_set.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF7C22E7833C001763CE /* enum_set.h */; };
+ A9C2F14122E7833D001763CE /* text.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF7F22E7833C001763CE /* text.cpp */; };
+ A9C2F14222E7833D001763CE /* text.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF7F22E7833C001763CE /* text.cpp */; };
+ A9C2F14322E7833D001763CE /* assembly_grammar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF8022E7833C001763CE /* assembly_grammar.cpp */; };
+ A9C2F14422E7833D001763CE /* assembly_grammar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF8022E7833C001763CE /* assembly_grammar.cpp */; };
+ A9C2F14522E7833D001763CE /* text.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF8122E7833C001763CE /* text.h */; };
+ A9C2F14622E7833D001763CE /* text.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF8122E7833C001763CE /* text.h */; };
+ A9C2F14722E7833D001763CE /* extensions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF8222E7833C001763CE /* extensions.cpp */; };
+ A9C2F14822E7833D001763CE /* extensions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF8222E7833C001763CE /* extensions.cpp */; };
+ A9C2F14922E7833D001763CE /* pch_source.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF8322E7833C001763CE /* pch_source.cpp */; };
+ A9C2F14A22E7833D001763CE /* pch_source.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF8322E7833C001763CE /* pch_source.cpp */; };
+ A9C2F14B22E7833D001763CE /* parse_number.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF8522E7833C001763CE /* parse_number.h */; };
+ A9C2F14C22E7833D001763CE /* parse_number.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF8522E7833C001763CE /* parse_number.h */; };
+ A9C2F14D22E7833D001763CE /* ilist_node.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF8622E7833C001763CE /* ilist_node.h */; };
+ A9C2F14E22E7833D001763CE /* ilist_node.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF8622E7833C001763CE /* ilist_node.h */; };
+ A9C2F14F22E7833D001763CE /* make_unique.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF8722E7833C001763CE /* make_unique.h */; };
+ A9C2F15022E7833D001763CE /* make_unique.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF8722E7833C001763CE /* make_unique.h */; };
+ A9C2F15122E7833D001763CE /* string_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF8822E7833C001763CE /* string_utils.h */; };
+ A9C2F15222E7833D001763CE /* string_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF8822E7833C001763CE /* string_utils.h */; };
+ A9C2F15322E7833D001763CE /* small_vector.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF8922E7833C001763CE /* small_vector.h */; };
+ A9C2F15422E7833D001763CE /* small_vector.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF8922E7833C001763CE /* small_vector.h */; };
+ A9C2F15522E7833D001763CE /* timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF8A22E7833C001763CE /* timer.cpp */; };
+ A9C2F15622E7833D001763CE /* timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF8A22E7833C001763CE /* timer.cpp */; };
+ A9C2F15722E7833D001763CE /* timer.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF8B22E7833C001763CE /* timer.h */; };
+ A9C2F15822E7833D001763CE /* timer.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF8B22E7833C001763CE /* timer.h */; };
+ A9C2F15922E7833D001763CE /* string_utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF8C22E7833C001763CE /* string_utils.cpp */; };
+ A9C2F15A22E7833D001763CE /* string_utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF8C22E7833C001763CE /* string_utils.cpp */; };
+ A9C2F15B22E7833D001763CE /* bit_vector.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF8D22E7833C001763CE /* bit_vector.h */; };
+ A9C2F15C22E7833D001763CE /* bit_vector.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF8D22E7833C001763CE /* bit_vector.h */; };
+ A9C2F15D22E7833D001763CE /* bitutils.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF8E22E7833C001763CE /* bitutils.h */; };
+ A9C2F15E22E7833D001763CE /* bitutils.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF8E22E7833C001763CE /* bitutils.h */; };
+ A9C2F15F22E7833D001763CE /* hex_float.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF8F22E7833C001763CE /* hex_float.h */; };
+ A9C2F16022E7833D001763CE /* hex_float.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF8F22E7833C001763CE /* hex_float.h */; };
+ A9C2F16122E7833D001763CE /* parse_number.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF9022E7833C001763CE /* parse_number.cpp */; };
+ A9C2F16222E7833D001763CE /* parse_number.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF9022E7833C001763CE /* parse_number.cpp */; };
+ A9C2F16322E7833D001763CE /* bit_vector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF9122E7833C001763CE /* bit_vector.cpp */; };
+ A9C2F16422E7833D001763CE /* bit_vector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF9122E7833C001763CE /* bit_vector.cpp */; };
+ A9C2F16522E7833D001763CE /* ilist.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF9222E7833C001763CE /* ilist.h */; };
+ A9C2F16622E7833D001763CE /* ilist.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF9222E7833C001763CE /* ilist.h */; };
+ A9C2F16722E7833D001763CE /* spirv_target_env.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF9322E7833C001763CE /* spirv_target_env.h */; };
+ A9C2F16822E7833D001763CE /* spirv_target_env.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF9322E7833C001763CE /* spirv_target_env.h */; };
+ A9C2F16922E7833D001763CE /* table.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF9422E7833C001763CE /* table.cpp */; };
+ A9C2F16A22E7833D001763CE /* table.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF9422E7833C001763CE /* table.cpp */; };
+ A9C2F16B22E7833D001763CE /* operand_to_undef_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF9622E7833C001763CE /* operand_to_undef_reduction_opportunity_finder.h */; };
+ A9C2F16C22E7833D001763CE /* operand_to_undef_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF9622E7833C001763CE /* operand_to_undef_reduction_opportunity_finder.h */; };
+ A9C2F16D22E7833D001763CE /* remove_selection_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF9722E7833C001763CE /* remove_selection_reduction_opportunity.cpp */; };
+ A9C2F16E22E7833D001763CE /* remove_selection_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF9722E7833C001763CE /* remove_selection_reduction_opportunity.cpp */; };
+ A9C2F16F22E7833D001763CE /* remove_block_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF9822E7833C001763CE /* remove_block_reduction_opportunity.h */; };
+ A9C2F17022E7833D001763CE /* remove_block_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF9822E7833C001763CE /* remove_block_reduction_opportunity.h */; };
+ A9C2F17122E7833D001763CE /* operand_to_dominating_id_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF9922E7833C001763CE /* operand_to_dominating_id_reduction_opportunity_finder.h */; };
+ A9C2F17222E7833D001763CE /* operand_to_dominating_id_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF9922E7833C001763CE /* operand_to_dominating_id_reduction_opportunity_finder.h */; };
+ A9C2F17322E7833D001763CE /* reduction_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF9A22E7833C001763CE /* reduction_pass.cpp */; };
+ A9C2F17422E7833D001763CE /* reduction_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF9A22E7833C001763CE /* reduction_pass.cpp */; };
+ A9C2F17522E7833D001763CE /* operand_to_const_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF9B22E7833C001763CE /* operand_to_const_reduction_opportunity_finder.cpp */; };
+ A9C2F17622E7833D001763CE /* operand_to_const_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF9B22E7833C001763CE /* operand_to_const_reduction_opportunity_finder.cpp */; };
+ A9C2F17722E7833D001763CE /* operand_to_const_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF9C22E7833C001763CE /* operand_to_const_reduction_opportunity_finder.h */; };
+ A9C2F17822E7833D001763CE /* operand_to_const_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF9C22E7833C001763CE /* operand_to_const_reduction_opportunity_finder.h */; };
+ A9C2F17922E7833D001763CE /* reduction_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF9E22E7833C001763CE /* reduction_util.cpp */; };
+ A9C2F17A22E7833D001763CE /* reduction_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF9E22E7833C001763CE /* reduction_util.cpp */; };
+ A9C2F17B22E7833D001763CE /* structured_loop_to_selection_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF9F22E7833C001763CE /* structured_loop_to_selection_reduction_opportunity_finder.cpp */; };
+ A9C2F17C22E7833D001763CE /* structured_loop_to_selection_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF9F22E7833C001763CE /* structured_loop_to_selection_reduction_opportunity_finder.cpp */; };
+ A9C2F17D22E7833D001763CE /* simple_conditional_branch_to_branch_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFA022E7833C001763CE /* simple_conditional_branch_to_branch_reduction_opportunity.h */; };
+ A9C2F17E22E7833D001763CE /* simple_conditional_branch_to_branch_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFA022E7833C001763CE /* simple_conditional_branch_to_branch_reduction_opportunity.h */; };
+ A9C2F17F22E7833D001763CE /* remove_function_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFA122E7833C001763CE /* remove_function_reduction_opportunity_finder.cpp */; };
+ A9C2F18022E7833D001763CE /* remove_function_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFA122E7833C001763CE /* remove_function_reduction_opportunity_finder.cpp */; };
+ A9C2F18122E7833D001763CE /* remove_instruction_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFA222E7833C001763CE /* remove_instruction_reduction_opportunity.h */; };
+ A9C2F18222E7833D001763CE /* remove_instruction_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFA222E7833C001763CE /* remove_instruction_reduction_opportunity.h */; };
+ A9C2F18322E7833D001763CE /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFA322E7833C001763CE /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h */; };
+ A9C2F18422E7833D001763CE /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFA322E7833C001763CE /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h */; };
+ A9C2F18522E7833D001763CE /* simple_conditional_branch_to_branch_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFA422E7833C001763CE /* simple_conditional_branch_to_branch_reduction_opportunity.cpp */; };
+ A9C2F18622E7833D001763CE /* simple_conditional_branch_to_branch_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFA422E7833C001763CE /* simple_conditional_branch_to_branch_reduction_opportunity.cpp */; };
+ A9C2F18722E7833D001763CE /* remove_function_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFA522E7833C001763CE /* remove_function_reduction_opportunity.cpp */; };
+ A9C2F18822E7833D001763CE /* remove_function_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFA522E7833C001763CE /* remove_function_reduction_opportunity.cpp */; };
+ A9C2F18922E7833D001763CE /* remove_opname_instruction_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFA622E7833C001763CE /* remove_opname_instruction_reduction_opportunity_finder.h */; };
+ A9C2F18A22E7833D001763CE /* remove_opname_instruction_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFA622E7833C001763CE /* remove_opname_instruction_reduction_opportunity_finder.h */; };
+ A9C2F18B22E7833D001763CE /* simple_conditional_branch_to_branch_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFA722E7833C001763CE /* simple_conditional_branch_to_branch_opportunity_finder.cpp */; };
+ A9C2F18C22E7833D001763CE /* simple_conditional_branch_to_branch_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFA722E7833C001763CE /* simple_conditional_branch_to_branch_opportunity_finder.cpp */; };
+ A9C2F18D22E7833D001763CE /* remove_selection_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFA822E7833C001763CE /* remove_selection_reduction_opportunity_finder.cpp */; };
+ A9C2F18E22E7833D001763CE /* remove_selection_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFA822E7833C001763CE /* remove_selection_reduction_opportunity_finder.cpp */; };
+ A9C2F18F22E7833D001763CE /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFA922E7833C001763CE /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp */; };
+ A9C2F19022E7833D001763CE /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFA922E7833C001763CE /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp */; };
+ A9C2F19122E7833D001763CE /* simple_conditional_branch_to_branch_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFAA22E7833C001763CE /* simple_conditional_branch_to_branch_opportunity_finder.h */; };
+ A9C2F19222E7833D001763CE /* simple_conditional_branch_to_branch_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFAA22E7833C001763CE /* simple_conditional_branch_to_branch_opportunity_finder.h */; };
+ A9C2F19322E7833D001763CE /* merge_blocks_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFAB22E7833C001763CE /* merge_blocks_reduction_opportunity.cpp */; };
+ A9C2F19422E7833D001763CE /* merge_blocks_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFAB22E7833C001763CE /* merge_blocks_reduction_opportunity.cpp */; };
+ A9C2F19522E7833D001763CE /* change_operand_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFAC22E7833C001763CE /* change_operand_reduction_opportunity.cpp */; };
+ A9C2F19622E7833D001763CE /* change_operand_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFAC22E7833C001763CE /* change_operand_reduction_opportunity.cpp */; };
+ A9C2F19722E7833D001763CE /* structured_loop_to_selection_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFAD22E7833C001763CE /* structured_loop_to_selection_reduction_opportunity.h */; };
+ A9C2F19822E7833D001763CE /* structured_loop_to_selection_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFAD22E7833C001763CE /* structured_loop_to_selection_reduction_opportunity.h */; };
+ A9C2F19922E7833D001763CE /* remove_function_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFAE22E7833C001763CE /* remove_function_reduction_opportunity.h */; };
+ A9C2F19A22E7833D001763CE /* remove_function_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFAE22E7833C001763CE /* remove_function_reduction_opportunity.h */; };
+ A9C2F19B22E7833D001763CE /* change_operand_to_undef_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFAF22E7833C001763CE /* change_operand_to_undef_reduction_opportunity.h */; };
+ A9C2F19C22E7833D001763CE /* change_operand_to_undef_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFAF22E7833C001763CE /* change_operand_to_undef_reduction_opportunity.h */; };
+ A9C2F19D22E7833D001763CE /* remove_unreferenced_instruction_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFB022E7833C001763CE /* remove_unreferenced_instruction_reduction_opportunity_finder.cpp */; };
+ A9C2F19E22E7833D001763CE /* remove_unreferenced_instruction_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFB022E7833C001763CE /* remove_unreferenced_instruction_reduction_opportunity_finder.cpp */; };
+ A9C2F19F22E7833D001763CE /* structured_loop_to_selection_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFB122E7833C001763CE /* structured_loop_to_selection_reduction_opportunity_finder.h */; };
+ A9C2F1A022E7833D001763CE /* structured_loop_to_selection_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFB122E7833C001763CE /* structured_loop_to_selection_reduction_opportunity_finder.h */; };
+ A9C2F1A122E7833D001763CE /* remove_selection_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFB222E7833C001763CE /* remove_selection_reduction_opportunity.h */; };
+ A9C2F1A222E7833D001763CE /* remove_selection_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFB222E7833C001763CE /* remove_selection_reduction_opportunity.h */; };
+ A9C2F1A322E7833D001763CE /* remove_instruction_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFB322E7833C001763CE /* remove_instruction_reduction_opportunity.cpp */; };
+ A9C2F1A422E7833D001763CE /* remove_instruction_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFB322E7833C001763CE /* remove_instruction_reduction_opportunity.cpp */; };
+ A9C2F1A522E7833D001763CE /* remove_selection_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFB422E7833C001763CE /* remove_selection_reduction_opportunity_finder.h */; };
+ A9C2F1A622E7833D001763CE /* remove_selection_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFB422E7833C001763CE /* remove_selection_reduction_opportunity_finder.h */; };
+ A9C2F1A722E7833D001763CE /* merge_blocks_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFB522E7833C001763CE /* merge_blocks_reduction_opportunity_finder.h */; };
+ A9C2F1A822E7833D001763CE /* merge_blocks_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFB522E7833C001763CE /* merge_blocks_reduction_opportunity_finder.h */; };
+ A9C2F1A922E7833D001763CE /* remove_opname_instruction_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFB622E7833C001763CE /* remove_opname_instruction_reduction_opportunity_finder.cpp */; };
+ A9C2F1AA22E7833D001763CE /* remove_opname_instruction_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFB622E7833C001763CE /* remove_opname_instruction_reduction_opportunity_finder.cpp */; };
+ A9C2F1AB22E7833D001763CE /* pch_source_reduce.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFB722E7833C001763CE /* pch_source_reduce.cpp */; };
+ A9C2F1AC22E7833D001763CE /* pch_source_reduce.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFB722E7833C001763CE /* pch_source_reduce.cpp */; };
+ A9C2F1AD22E7833D001763CE /* reducer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFB822E7833C001763CE /* reducer.cpp */; };
+ A9C2F1AE22E7833D001763CE /* reducer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFB822E7833C001763CE /* reducer.cpp */; };
+ A9C2F1AF22E7833D001763CE /* operand_to_undef_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFB922E7833C001763CE /* operand_to_undef_reduction_opportunity_finder.cpp */; };
+ A9C2F1B022E7833D001763CE /* operand_to_undef_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFB922E7833C001763CE /* operand_to_undef_reduction_opportunity_finder.cpp */; };
+ A9C2F1B122E7833D001763CE /* remove_function_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFBA22E7833C001763CE /* remove_function_reduction_opportunity_finder.h */; };
+ A9C2F1B222E7833D001763CE /* remove_function_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFBA22E7833C001763CE /* remove_function_reduction_opportunity_finder.h */; };
+ A9C2F1B322E7833D001763CE /* pch_source_reduce.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFBB22E7833C001763CE /* pch_source_reduce.h */; };
+ A9C2F1B422E7833D001763CE /* pch_source_reduce.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFBB22E7833C001763CE /* pch_source_reduce.h */; };
+ A9C2F1B522E7833D001763CE /* remove_unreferenced_instruction_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFBC22E7833C001763CE /* remove_unreferenced_instruction_reduction_opportunity_finder.h */; };
+ A9C2F1B622E7833D001763CE /* remove_unreferenced_instruction_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFBC22E7833C001763CE /* remove_unreferenced_instruction_reduction_opportunity_finder.h */; };
+ A9C2F1B722E7833D001763CE /* merge_blocks_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFBD22E7833C001763CE /* merge_blocks_reduction_opportunity_finder.cpp */; };
+ A9C2F1B822E7833D001763CE /* merge_blocks_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFBD22E7833C001763CE /* merge_blocks_reduction_opportunity_finder.cpp */; };
+ A9C2F1B922E7833D001763CE /* reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFBE22E7833C001763CE /* reduction_opportunity.cpp */; };
+ A9C2F1BA22E7833D001763CE /* reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFBE22E7833C001763CE /* reduction_opportunity.cpp */; };
+ A9C2F1BB22E7833D001763CE /* reducer.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFBF22E7833C001763CE /* reducer.h */; };
+ A9C2F1BC22E7833D001763CE /* reducer.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFBF22E7833C001763CE /* reducer.h */; };
+ A9C2F1BD22E7833D001763CE /* change_operand_to_undef_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFC022E7833C001763CE /* change_operand_to_undef_reduction_opportunity.cpp */; };
+ A9C2F1BE22E7833D001763CE /* change_operand_to_undef_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFC022E7833C001763CE /* change_operand_to_undef_reduction_opportunity.cpp */; };
+ A9C2F1BF22E7833D001763CE /* reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFC122E7833C001763CE /* reduction_opportunity.h */; };
+ A9C2F1C022E7833D001763CE /* reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFC122E7833C001763CE /* reduction_opportunity.h */; };
+ A9C2F1C122E7833D001763CE /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFC222E7833C001763CE /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h */; };
+ A9C2F1C222E7833D001763CE /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFC222E7833C001763CE /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h */; };
+ A9C2F1C322E7833D001763CE /* operand_to_dominating_id_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFC322E7833C001763CE /* operand_to_dominating_id_reduction_opportunity_finder.cpp */; };
+ A9C2F1C422E7833D001763CE /* operand_to_dominating_id_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFC322E7833C001763CE /* operand_to_dominating_id_reduction_opportunity_finder.cpp */; };
+ A9C2F1C522E7833D001763CE /* reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFC422E7833C001763CE /* reduction_opportunity_finder.h */; };
+ A9C2F1C622E7833D001763CE /* reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFC422E7833C001763CE /* reduction_opportunity_finder.h */; };
+ A9C2F1C722E7833D001763CE /* change_operand_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFC522E7833C001763CE /* change_operand_reduction_opportunity.h */; };
+ A9C2F1C822E7833D001763CE /* change_operand_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFC522E7833C001763CE /* change_operand_reduction_opportunity.h */; };
+ A9C2F1C922E7833D001763CE /* remove_block_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFC622E7833C001763CE /* remove_block_reduction_opportunity_finder.h */; };
+ A9C2F1CA22E7833D001763CE /* remove_block_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFC622E7833C001763CE /* remove_block_reduction_opportunity_finder.h */; };
+ A9C2F1CB22E7833D001763CE /* remove_block_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFC722E7833C001763CE /* remove_block_reduction_opportunity_finder.cpp */; };
+ A9C2F1CC22E7833D001763CE /* remove_block_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFC722E7833C001763CE /* remove_block_reduction_opportunity_finder.cpp */; };
+ A9C2F1CD22E7833D001763CE /* reduction_util.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFC822E7833C001763CE /* reduction_util.h */; };
+ A9C2F1CE22E7833D001763CE /* reduction_util.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFC822E7833C001763CE /* reduction_util.h */; };
+ A9C2F1CF22E7833D001763CE /* merge_blocks_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFC922E7833C001763CE /* merge_blocks_reduction_opportunity.h */; };
+ A9C2F1D022E7833D001763CE /* merge_blocks_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFC922E7833C001763CE /* merge_blocks_reduction_opportunity.h */; };
+ A9C2F1D122E7833D001763CE /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFCA22E7833C001763CE /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp */; };
+ A9C2F1D222E7833D001763CE /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFCA22E7833C001763CE /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp */; };
+ A9C2F1D322E7833D001763CE /* structured_loop_to_selection_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFCB22E7833C001763CE /* structured_loop_to_selection_reduction_opportunity.cpp */; };
+ A9C2F1D422E7833D001763CE /* structured_loop_to_selection_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFCB22E7833C001763CE /* structured_loop_to_selection_reduction_opportunity.cpp */; };
+ A9C2F1D522E7833D001763CE /* remove_block_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFCC22E7833C001763CE /* remove_block_reduction_opportunity.cpp */; };
+ A9C2F1D622E7833D001763CE /* remove_block_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFCC22E7833C001763CE /* remove_block_reduction_opportunity.cpp */; };
+ A9C2F1D722E7833D001763CE /* reduction_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFCD22E7833C001763CE /* reduction_pass.h */; };
+ A9C2F1D822E7833D001763CE /* reduction_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFCD22E7833C001763CE /* reduction_pass.h */; };
+ A9C2F1D922E7833D001763CE /* latest_version_opencl_std_header.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFCE22E7833C001763CE /* latest_version_opencl_std_header.h */; };
+ A9C2F1DA22E7833D001763CE /* latest_version_opencl_std_header.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFCE22E7833C001763CE /* latest_version_opencl_std_header.h */; };
+ A9C2F1DB22E7833D001763CE /* spirv_optimizer_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFCF22E7833C001763CE /* spirv_optimizer_options.cpp */; };
+ A9C2F1DC22E7833D001763CE /* spirv_optimizer_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFCF22E7833C001763CE /* spirv_optimizer_options.cpp */; };
+ A9C2F1DD22E7833D001763CE /* cfa.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFD022E7833C001763CE /* cfa.h */; };
+ A9C2F1DE22E7833D001763CE /* cfa.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFD022E7833C001763CE /* cfa.h */; };
+ A9C2F1DF22E7833D001763CE /* pch_source.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFD122E7833C001763CE /* pch_source.h */; };
+ A9C2F1E022E7833D001763CE /* pch_source.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFD122E7833C001763CE /* pch_source.h */; };
+ A9C2F1E122E7833D001763CE /* enum_string_mapping.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFD222E7833C001763CE /* enum_string_mapping.h */; };
+ A9C2F1E222E7833D001763CE /* enum_string_mapping.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFD222E7833C001763CE /* enum_string_mapping.h */; };
+ A9C2F1E322E7833D001763CE /* spirv_fuzzer_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFD322E7833C001763CE /* spirv_fuzzer_options.cpp */; };
+ A9C2F1E422E7833D001763CE /* spirv_fuzzer_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFD322E7833C001763CE /* spirv_fuzzer_options.cpp */; };
+ A9C2F1E522E7833D001763CE /* spirv_reducer_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFD422E7833C001763CE /* spirv_reducer_options.h */; };
+ A9C2F1E622E7833D001763CE /* spirv_reducer_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFD422E7833C001763CE /* spirv_reducer_options.h */; };
+ A9C2F1E722E7833D001763CE /* spirv_validator_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFD522E7833C001763CE /* spirv_validator_options.cpp */; };
+ A9C2F1E822E7833D001763CE /* spirv_validator_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFD522E7833C001763CE /* spirv_validator_options.cpp */; };
+ A9C2F1E922E7833D001763CE /* print.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFD722E7833C001763CE /* print.cpp */; };
+ A9C2F1EA22E7833D001763CE /* print.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFD722E7833C001763CE /* print.cpp */; };
+ A9C2F1EB22E7833D001763CE /* spirv_definition.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFD822E7833C001763CE /* spirv_definition.h */; };
+ A9C2F1EC22E7833D001763CE /* spirv_definition.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFD822E7833C001763CE /* spirv_definition.h */; };
+ A9C2F1ED22E7833D001763CE /* operand.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFD922E7833C001763CE /* operand.h */; };
+ A9C2F1EE22E7833D001763CE /* operand.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFD922E7833C001763CE /* operand.h */; };
+ A9C2F1EF22E7833D001763CE /* spirv_endian.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFDA22E7833C001763CE /* spirv_endian.cpp */; };
+ A9C2F1F022E7833D001763CE /* spirv_endian.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFDA22E7833C001763CE /* spirv_endian.cpp */; };
+ A9C2F1F122E7833D001763CE /* macro.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFDB22E7833C001763CE /* macro.h */; };
+ A9C2F1F222E7833D001763CE /* macro.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFDB22E7833C001763CE /* macro.h */; };
+ A9C2F1F322E7833D001763CE /* spirv_constant.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFDC22E7833C001763CE /* spirv_constant.h */; };
+ A9C2F1F422E7833D001763CE /* spirv_constant.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFDC22E7833C001763CE /* spirv_constant.h */; };
+ A9C2F1F522E7833D001763CE /* binary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFDE22E7833C001763CE /* binary.cpp */; };
+ A9C2F1F622E7833D001763CE /* binary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFDE22E7833C001763CE /* binary.cpp */; };
+ A9C2F1F722E7833D001763CE /* spirv_validator_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFDF22E7833C001763CE /* spirv_validator_options.h */; };
+ A9C2F1F822E7833D001763CE /* spirv_validator_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFDF22E7833C001763CE /* spirv_validator_options.h */; };
+ A9C2F1F922E7833D001763CE /* enum_string_mapping.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFE022E7833C001763CE /* enum_string_mapping.cpp */; };
+ A9C2F1FA22E7833D001763CE /* enum_string_mapping.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFE022E7833C001763CE /* enum_string_mapping.cpp */; };
+ A9C2F1FB22E7833D001763CE /* text_handler.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFE122E7833C001763CE /* text_handler.h */; };
+ A9C2F1FC22E7833D001763CE /* text_handler.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFE122E7833C001763CE /* text_handler.h */; };
+ A9C2F1FD22E7833D001763CE /* parsed_operand.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFE222E7833C001763CE /* parsed_operand.h */; };
+ A9C2F1FE22E7833D001763CE /* parsed_operand.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFE222E7833C001763CE /* parsed_operand.h */; };
+ A9C2F1FF22E7833D001763CE /* name_mapper.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFE322E7833C001763CE /* name_mapper.h */; };
+ A9C2F20022E7833D001763CE /* name_mapper.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFE322E7833C001763CE /* name_mapper.h */; };
+ A9C2F20122E7833D001763CE /* spirv_reducer_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFE422E7833C001763CE /* spirv_reducer_options.cpp */; };
+ A9C2F20222E7833D001763CE /* spirv_reducer_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFE422E7833C001763CE /* spirv_reducer_options.cpp */; };
+ A9C2F20322E7833D001763CE /* parsed_operand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFE522E7833C001763CE /* parsed_operand.cpp */; };
+ A9C2F20422E7833D001763CE /* parsed_operand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFE522E7833C001763CE /* parsed_operand.cpp */; };
+ A9C2F20522E7833D001763CE /* diagnostic.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFE622E7833C001763CE /* diagnostic.h */; };
+ A9C2F20622E7833D001763CE /* diagnostic.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFE622E7833C001763CE /* diagnostic.h */; };
+ A9C2F20722E7833D001763CE /* spirv_endian.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFE722E7833C001763CE /* spirv_endian.h */; };
+ A9C2F20822E7833D001763CE /* spirv_endian.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFE722E7833C001763CE /* spirv_endian.h */; };
+ A9C2F20922E7833D001763CE /* name_mapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFE822E7833C001763CE /* name_mapper.cpp */; };
+ A9C2F20A22E7833D001763CE /* name_mapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFE822E7833C001763CE /* name_mapper.cpp */; };
+ A9C2F20B22E7833D001763CE /* linker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFEC22E7833C001763CE /* linker.cpp */; };
+ A9C2F20C22E7833D001763CE /* linker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFEC22E7833C001763CE /* linker.cpp */; };
+ A9C2F20D22E7833D001763CE /* software_version.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFED22E7833C001763CE /* software_version.cpp */; };
+ A9C2F20E22E7833D001763CE /* software_version.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFED22E7833C001763CE /* software_version.cpp */; };
+ A9C2F20F22E7833D001763CE /* opcode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFEE22E7833C001763CE /* opcode.cpp */; };
+ A9C2F21022E7833D001763CE /* opcode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFEE22E7833C001763CE /* opcode.cpp */; };
+ A9C2F21122E7833D001763CE /* print.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFEF22E7833C001763CE /* print.h */; };
+ A9C2F21222E7833D001763CE /* print.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFEF22E7833C001763CE /* print.h */; };
+ A9C2F21322E7833D001763CE /* ext_inst.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFF022E7833C001763CE /* ext_inst.cpp */; };
+ A9C2F21422E7833D001763CE /* ext_inst.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFF022E7833C001763CE /* ext_inst.cpp */; };
+ A9C2F21522E7833D001763CE /* disassemble.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFF122E7833C001763CE /* disassemble.h */; };
+ A9C2F21622E7833D001763CE /* disassemble.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFF122E7833C001763CE /* disassemble.h */; };
+ A9C2F21722E7833D001763CE /* optimizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFF322E7833C001763CE /* optimizer.cpp */; };
+ A9C2F21822E7833D001763CE /* optimizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFF322E7833C001763CE /* optimizer.cpp */; };
+ A9C2F21922E7833D001763CE /* if_conversion.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFF422E7833C001763CE /* if_conversion.h */; };
+ A9C2F21A22E7833D001763CE /* if_conversion.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFF422E7833C001763CE /* if_conversion.h */; };
+ A9C2F21B22E7833D001763CE /* register_pressure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFF522E7833C001763CE /* register_pressure.cpp */; };
+ A9C2F21C22E7833D001763CE /* register_pressure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFF522E7833C001763CE /* register_pressure.cpp */; };
+ A9C2F21D22E7833D001763CE /* loop_utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFF622E7833C001763CE /* loop_utils.cpp */; };
+ A9C2F21E22E7833D001763CE /* loop_utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFF622E7833C001763CE /* loop_utils.cpp */; };
+ A9C2F21F22E7833D001763CE /* merge_return_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFF722E7833C001763CE /* merge_return_pass.h */; };
+ A9C2F22022E7833D001763CE /* merge_return_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFF722E7833C001763CE /* merge_return_pass.h */; };
+ A9C2F22122E7833D001763CE /* inline_opaque_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFF822E7833C001763CE /* inline_opaque_pass.h */; };
+ A9C2F22222E7833D001763CE /* inline_opaque_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFF822E7833C001763CE /* inline_opaque_pass.h */; };
+ A9C2F22322E7833D001763CE /* loop_fusion.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFF922E7833C001763CE /* loop_fusion.h */; };
+ A9C2F22422E7833D001763CE /* loop_fusion.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFF922E7833C001763CE /* loop_fusion.h */; };
+ A9C2F22522E7833D001763CE /* combine_access_chains.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFFA22E7833C001763CE /* combine_access_chains.cpp */; };
+ A9C2F22622E7833D001763CE /* combine_access_chains.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFFA22E7833C001763CE /* combine_access_chains.cpp */; };
+ A9C2F22722E7833D001763CE /* build_module.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFFB22E7833C001763CE /* build_module.cpp */; };
+ A9C2F22822E7833D001763CE /* build_module.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFFB22E7833C001763CE /* build_module.cpp */; };
+ A9C2F22922E7833D001763CE /* composite.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFFC22E7833C001763CE /* composite.h */; };
+ A9C2F22A22E7833D001763CE /* composite.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFFC22E7833C001763CE /* composite.h */; };
+ A9C2F22B22E7833D001763CE /* compact_ids_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFFD22E7833C001763CE /* compact_ids_pass.h */; };
+ A9C2F22C22E7833D001763CE /* compact_ids_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFFD22E7833C001763CE /* compact_ids_pass.h */; };
+ A9C2F22D22E7833D001763CE /* register_pressure.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFFE22E7833C001763CE /* register_pressure.h */; };
+ A9C2F22E22E7833D001763CE /* register_pressure.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFFE22E7833C001763CE /* register_pressure.h */; };
+ A9C2F22F22E7833D001763CE /* tree_iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFFF22E7833C001763CE /* tree_iterator.h */; };
+ A9C2F23022E7833D001763CE /* tree_iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFFF22E7833C001763CE /* tree_iterator.h */; };
+ A9C2F23122E7833D001763CE /* strip_atomic_counter_memory_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F00022E7833C001763CE /* strip_atomic_counter_memory_pass.h */; };
+ A9C2F23222E7833D001763CE /* strip_atomic_counter_memory_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F00022E7833C001763CE /* strip_atomic_counter_memory_pass.h */; };
+ A9C2F23322E7833D001763CE /* legalize_vector_shuffle_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F00122E7833C001763CE /* legalize_vector_shuffle_pass.h */; };
+ A9C2F23422E7833D001763CE /* legalize_vector_shuffle_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F00122E7833C001763CE /* legalize_vector_shuffle_pass.h */; };
+ A9C2F23522E7833D001763CE /* local_single_store_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F00222E7833C001763CE /* local_single_store_elim_pass.h */; };
+ A9C2F23622E7833D001763CE /* local_single_store_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F00222E7833C001763CE /* local_single_store_elim_pass.h */; };
+ A9C2F23722E7833D001763CE /* reduce_load_size.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F00322E7833C001763CE /* reduce_load_size.h */; };
+ A9C2F23822E7833D001763CE /* reduce_load_size.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F00322E7833C001763CE /* reduce_load_size.h */; };
+ A9C2F23922E7833D001763CE /* code_sink.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F00422E7833C001763CE /* code_sink.cpp */; };
+ A9C2F23A22E7833D001763CE /* code_sink.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F00422E7833C001763CE /* code_sink.cpp */; };
+ A9C2F23B22E7833D001763CE /* types.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F00522E7833C001763CE /* types.cpp */; };
+ A9C2F23C22E7833D001763CE /* types.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F00522E7833C001763CE /* types.cpp */; };
+ A9C2F23D22E7833D001763CE /* scalar_analysis.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F00622E7833C001763CE /* scalar_analysis.h */; };
+ A9C2F23E22E7833D001763CE /* scalar_analysis.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F00622E7833C001763CE /* scalar_analysis.h */; };
+ A9C2F23F22E7833D001763CE /* strip_debug_info_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F00722E7833C001763CE /* strip_debug_info_pass.h */; };
+ A9C2F24022E7833D001763CE /* strip_debug_info_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F00722E7833C001763CE /* strip_debug_info_pass.h */; };
+ A9C2F24122E7833D001763CE /* cfg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F00822E7833C001763CE /* cfg.cpp */; };
+ A9C2F24222E7833D001763CE /* cfg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F00822E7833C001763CE /* cfg.cpp */; };
+ A9C2F24322E7833D001763CE /* strip_atomic_counter_memory_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F00922E7833C001763CE /* strip_atomic_counter_memory_pass.cpp */; };
+ A9C2F24422E7833D001763CE /* strip_atomic_counter_memory_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F00922E7833C001763CE /* strip_atomic_counter_memory_pass.cpp */; };
+ A9C2F24522E7833D001763CE /* decoration_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F00A22E7833C001763CE /* decoration_manager.cpp */; };
+ A9C2F24622E7833D001763CE /* decoration_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F00A22E7833C001763CE /* decoration_manager.cpp */; };
+ A9C2F24722E7833D001763CE /* local_single_block_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F00B22E7833C001763CE /* local_single_block_elim_pass.cpp */; };
+ A9C2F24822E7833D001763CE /* local_single_block_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F00B22E7833C001763CE /* local_single_block_elim_pass.cpp */; };
+ A9C2F24922E7833D001763CE /* freeze_spec_constant_value_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F00C22E7833C001763CE /* freeze_spec_constant_value_pass.cpp */; };
+ A9C2F24A22E7833D001763CE /* freeze_spec_constant_value_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F00C22E7833C001763CE /* freeze_spec_constant_value_pass.cpp */; };
+ A9C2F24B22E7833D001763CE /* replace_invalid_opc.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F00D22E7833C001763CE /* replace_invalid_opc.h */; };
+ A9C2F24C22E7833D001763CE /* replace_invalid_opc.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F00D22E7833C001763CE /* replace_invalid_opc.h */; };
+ A9C2F24D22E7833D001763CE /* local_access_chain_convert_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F00E22E7833C001763CE /* local_access_chain_convert_pass.h */; };
+ A9C2F24E22E7833D001763CE /* local_access_chain_convert_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F00E22E7833C001763CE /* local_access_chain_convert_pass.h */; };
+ A9C2F24F22E7833D001763CE /* inst_bindless_check_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F00F22E7833C001763CE /* inst_bindless_check_pass.cpp */; };
+ A9C2F25022E7833D001763CE /* inst_bindless_check_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F00F22E7833C001763CE /* inst_bindless_check_pass.cpp */; };
+ A9C2F25122E7833D001763CE /* local_redundancy_elimination.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01022E7833C001763CE /* local_redundancy_elimination.cpp */; };
+ A9C2F25222E7833D001763CE /* local_redundancy_elimination.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01022E7833C001763CE /* local_redundancy_elimination.cpp */; };
+ A9C2F25322E7833D001763CE /* instrument_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01222E7833C001763CE /* instrument_pass.cpp */; };
+ A9C2F25422E7833D001763CE /* instrument_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01222E7833C001763CE /* instrument_pass.cpp */; };
+ A9C2F25522E7833D001763CE /* propagator.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F01322E7833C001763CE /* propagator.h */; };
+ A9C2F25622E7833D001763CE /* propagator.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F01322E7833C001763CE /* propagator.h */; };
+ A9C2F25722E7833D001763CE /* instruction_list.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F01422E7833C001763CE /* instruction_list.h */; };
+ A9C2F25822E7833D001763CE /* instruction_list.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F01422E7833C001763CE /* instruction_list.h */; };
+ A9C2F25922E7833D001763CE /* feature_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01522E7833C001763CE /* feature_manager.cpp */; };
+ A9C2F25A22E7833D001763CE /* feature_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01522E7833C001763CE /* feature_manager.cpp */; };
+ A9C2F25B22E7833D001763CE /* pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01622E7833C001763CE /* pass.cpp */; };
+ A9C2F25C22E7833D001763CE /* pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01622E7833C001763CE /* pass.cpp */; };
+ A9C2F25D22E7833D001763CE /* loop_fission.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01722E7833C001763CE /* loop_fission.cpp */; };
+ A9C2F25E22E7833D001763CE /* loop_fission.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01722E7833C001763CE /* loop_fission.cpp */; };
+ A9C2F25F22E7833D001763CE /* dominator_tree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01822E7833C001763CE /* dominator_tree.cpp */; };
+ A9C2F26022E7833D001763CE /* dominator_tree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01822E7833C001763CE /* dominator_tree.cpp */; };
+ A9C2F26122E7833D001763CE /* merge_return_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01922E7833C001763CE /* merge_return_pass.cpp */; };
+ A9C2F26222E7833D001763CE /* merge_return_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01922E7833C001763CE /* merge_return_pass.cpp */; };
+ A9C2F26322E7833D001763CE /* ir_context.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F01A22E7833C001763CE /* ir_context.h */; };
+ A9C2F26422E7833D001763CE /* ir_context.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F01A22E7833C001763CE /* ir_context.h */; };
+ A9C2F26522E7833D001763CE /* eliminate_dead_constant_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01B22E7833C001763CE /* eliminate_dead_constant_pass.cpp */; };
+ A9C2F26622E7833D001763CE /* eliminate_dead_constant_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01B22E7833C001763CE /* eliminate_dead_constant_pass.cpp */; };
+ A9C2F26722E7833D001763CE /* cfg_cleanup_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01C22E7833C001763CE /* cfg_cleanup_pass.cpp */; };
+ A9C2F26822E7833D001763CE /* cfg_cleanup_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01C22E7833C001763CE /* cfg_cleanup_pass.cpp */; };
+ A9C2F26922E7833D001763CE /* const_folding_rules.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01D22E7833C001763CE /* const_folding_rules.cpp */; };
+ A9C2F26A22E7833D001763CE /* const_folding_rules.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01D22E7833C001763CE /* const_folding_rules.cpp */; };
+ A9C2F26B22E7833D001763CE /* loop_unroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F01E22E7833C001763CE /* loop_unroller.h */; };
+ A9C2F26C22E7833D001763CE /* loop_unroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F01E22E7833C001763CE /* loop_unroller.h */; };
+ A9C2F26D22E7833D001763CE /* strip_debug_info_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01F22E7833C001763CE /* strip_debug_info_pass.cpp */; };
+ A9C2F26E22E7833D001763CE /* strip_debug_info_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01F22E7833C001763CE /* strip_debug_info_pass.cpp */; };
+ A9C2F26F22E7833D001763CE /* ssa_rewrite_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F02022E7833C001763CE /* ssa_rewrite_pass.cpp */; };
+ A9C2F27022E7833D001763CE /* ssa_rewrite_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F02022E7833C001763CE /* ssa_rewrite_pass.cpp */; };
+ A9C2F27122E7833D001763CE /* loop_dependence.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F02122E7833C001763CE /* loop_dependence.cpp */; };
+ A9C2F27222E7833D001763CE /* loop_dependence.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F02122E7833C001763CE /* loop_dependence.cpp */; };
+ A9C2F27322E7833D001763CE /* unify_const_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F02222E7833C001763CE /* unify_const_pass.h */; };
+ A9C2F27422E7833D001763CE /* unify_const_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F02222E7833C001763CE /* unify_const_pass.h */; };
+ A9C2F27522E7833D001763CE /* ir_loader.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F02322E7833C001763CE /* ir_loader.h */; };
+ A9C2F27622E7833D001763CE /* ir_loader.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F02322E7833C001763CE /* ir_loader.h */; };
+ A9C2F27722E7833D001763CE /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F02422E7833C001763CE /* types.h */; };
+ A9C2F27822E7833D001763CE /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F02422E7833C001763CE /* types.h */; };
+ A9C2F27922E7833D001763CE /* fold_spec_constant_op_and_composite_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F02522E7833C001763CE /* fold_spec_constant_op_and_composite_pass.h */; };
+ A9C2F27A22E7833D001763CE /* fold_spec_constant_op_and_composite_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F02522E7833C001763CE /* fold_spec_constant_op_and_composite_pass.h */; };
+ A9C2F27B22E7833D001763CE /* mem_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F02622E7833C001763CE /* mem_pass.cpp */; };
+ A9C2F27C22E7833D001763CE /* mem_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F02622E7833C001763CE /* mem_pass.cpp */; };
+ A9C2F27D22E7833D001763CE /* basic_block.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F02722E7833C001763CE /* basic_block.h */; };
+ A9C2F27E22E7833D001763CE /* basic_block.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F02722E7833C001763CE /* basic_block.h */; };
+ A9C2F27F22E7833D001763CE /* remove_duplicates_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F02822E7833C001763CE /* remove_duplicates_pass.cpp */; };
+ A9C2F28022E7833D001763CE /* remove_duplicates_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F02822E7833C001763CE /* remove_duplicates_pass.cpp */; };
+ A9C2F28122E7833D001763CE /* dead_variable_elimination.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F02922E7833C001763CE /* dead_variable_elimination.cpp */; };
+ A9C2F28222E7833D001763CE /* dead_variable_elimination.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F02922E7833C001763CE /* dead_variable_elimination.cpp */; };
+ A9C2F28322E7833D001763CE /* block_merge_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F02A22E7833C001763CE /* block_merge_pass.h */; };
+ A9C2F28422E7833D001763CE /* block_merge_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F02A22E7833C001763CE /* block_merge_pass.h */; };
+ A9C2F28522E7833D001763CE /* module.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F02B22E7833C001763CE /* module.cpp */; };
+ A9C2F28622E7833D001763CE /* module.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F02B22E7833C001763CE /* module.cpp */; };
+ A9C2F28722E7833D001763CE /* fold_spec_constant_op_and_composite_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F02C22E7833C001763CE /* fold_spec_constant_op_and_composite_pass.cpp */; };
+ A9C2F28822E7833D001763CE /* fold_spec_constant_op_and_composite_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F02C22E7833C001763CE /* fold_spec_constant_op_and_composite_pass.cpp */; };
+ A9C2F28922E7833D001763CE /* loop_unswitch_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F02D22E7833C001763CE /* loop_unswitch_pass.cpp */; };
+ A9C2F28A22E7833D001763CE /* loop_unswitch_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F02D22E7833C001763CE /* loop_unswitch_pass.cpp */; };
+ A9C2F28B22E7833D001763CE /* unify_const_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F02E22E7833C001763CE /* unify_const_pass.cpp */; };
+ A9C2F28C22E7833D001763CE /* unify_const_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F02E22E7833C001763CE /* unify_const_pass.cpp */; };
+ A9C2F28D22E7833D001763CE /* type_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F02F22E7833C001763CE /* type_manager.cpp */; };
+ A9C2F28E22E7833D001763CE /* type_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F02F22E7833C001763CE /* type_manager.cpp */; };
+ A9C2F28F22E7833D001763CE /* generate_webgpu_initializers_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F03022E7833C001763CE /* generate_webgpu_initializers_pass.cpp */; };
+ A9C2F29022E7833D001763CE /* generate_webgpu_initializers_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F03022E7833C001763CE /* generate_webgpu_initializers_pass.cpp */; };
+ A9C2F29122E7833D001763CE /* private_to_local_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F03122E7833C001763CE /* private_to_local_pass.h */; };
+ A9C2F29222E7833D001763CE /* private_to_local_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F03122E7833C001763CE /* private_to_local_pass.h */; };
+ A9C2F29322E7833D001763CE /* inline_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F03222E7833C001763CE /* inline_pass.cpp */; };
+ A9C2F29422E7833D001763CE /* inline_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F03222E7833C001763CE /* inline_pass.cpp */; };
+ A9C2F29522E7833D001763CE /* def_use_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F03322E7833C001763CE /* def_use_manager.h */; };
+ A9C2F29622E7833D001763CE /* def_use_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F03322E7833C001763CE /* def_use_manager.h */; };
+ A9C2F29722E7833D001763CE /* ir_loader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F03422E7833C001763CE /* ir_loader.cpp */; };
+ A9C2F29822E7833D001763CE /* ir_loader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F03422E7833C001763CE /* ir_loader.cpp */; };
+ A9C2F29922E7833D001763CE /* cfg_cleanup_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F03522E7833C001763CE /* cfg_cleanup_pass.h */; };
+ A9C2F29A22E7833D001763CE /* cfg_cleanup_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F03522E7833C001763CE /* cfg_cleanup_pass.h */; };
+ A9C2F29B22E7833D001763CE /* licm_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F03622E7833C001763CE /* licm_pass.cpp */; };
+ A9C2F29C22E7833D001763CE /* licm_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F03622E7833C001763CE /* licm_pass.cpp */; };
+ A9C2F29D22E7833D001763CE /* eliminate_dead_functions_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F03722E7833C001763CE /* eliminate_dead_functions_pass.cpp */; };
+ A9C2F29E22E7833D001763CE /* eliminate_dead_functions_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F03722E7833C001763CE /* eliminate_dead_functions_pass.cpp */; };
+ A9C2F29F22E7833D001763CE /* local_redundancy_elimination.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F03822E7833C001763CE /* local_redundancy_elimination.h */; };
+ A9C2F2A022E7833D001763CE /* local_redundancy_elimination.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F03822E7833C001763CE /* local_redundancy_elimination.h */; };
+ A9C2F2A122E7833D001763CE /* split_invalid_unreachable_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F03922E7833C001763CE /* split_invalid_unreachable_pass.cpp */; };
+ A9C2F2A222E7833D001763CE /* split_invalid_unreachable_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F03922E7833C001763CE /* split_invalid_unreachable_pass.cpp */; };
+ A9C2F2A322E7833D001763CE /* loop_peeling.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F03A22E7833C001763CE /* loop_peeling.h */; };
+ A9C2F2A422E7833D001763CE /* loop_peeling.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F03A22E7833C001763CE /* loop_peeling.h */; };
+ A9C2F2A522E7833D001763CE /* vector_dce.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F03B22E7833C001763CE /* vector_dce.cpp */; };
+ A9C2F2A622E7833D001763CE /* vector_dce.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F03B22E7833C001763CE /* vector_dce.cpp */; };
+ A9C2F2A722E7833D001763CE /* block_merge_util.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F03C22E7833C001763CE /* block_merge_util.h */; };
+ A9C2F2A822E7833D001763CE /* block_merge_util.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F03C22E7833C001763CE /* block_merge_util.h */; };
+ A9C2F2A922E7833D001763CE /* loop_unroller.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F03D22E7833C001763CE /* loop_unroller.cpp */; };
+ A9C2F2AA22E7833D001763CE /* loop_unroller.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F03D22E7833C001763CE /* loop_unroller.cpp */; };
+ A9C2F2AB22E7833D001763CE /* constants.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F03E22E7833C001763CE /* constants.cpp */; };
+ A9C2F2AC22E7833D001763CE /* constants.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F03E22E7833C001763CE /* constants.cpp */; };
+ A9C2F2AD22E7833D001763CE /* loop_fusion_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F03F22E7833C001763CE /* loop_fusion_pass.h */; };
+ A9C2F2AE22E7833D001763CE /* loop_fusion_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F03F22E7833C001763CE /* loop_fusion_pass.h */; };
+ A9C2F2AF22E7833D001763CE /* struct_cfg_analysis.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F04022E7833C001763CE /* struct_cfg_analysis.h */; };
+ A9C2F2B022E7833D001763CE /* struct_cfg_analysis.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F04022E7833C001763CE /* struct_cfg_analysis.h */; };
+ A9C2F2B122E7833D001763CE /* def_use_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F04122E7833C001763CE /* def_use_manager.cpp */; };
+ A9C2F2B222E7833D001763CE /* def_use_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F04122E7833C001763CE /* def_use_manager.cpp */; };
+ A9C2F2B322E7833D001763CE /* strip_reflect_info_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F04222E7833C001763CE /* strip_reflect_info_pass.cpp */; };
+ A9C2F2B422E7833D001763CE /* strip_reflect_info_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F04222E7833C001763CE /* strip_reflect_info_pass.cpp */; };
+ A9C2F2B522E7833D001763CE /* decoration_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F04322E7833C001763CE /* decoration_manager.h */; };
+ A9C2F2B622E7833D001763CE /* decoration_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F04322E7833C001763CE /* decoration_manager.h */; };
+ A9C2F2B722E7833D001763CE /* ccp_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F04422E7833C001763CE /* ccp_pass.cpp */; };
+ A9C2F2B822E7833D001763CE /* ccp_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F04422E7833C001763CE /* ccp_pass.cpp */; };
+ A9C2F2B922E7833D001763CE /* process_lines_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F04522E7833C001763CE /* process_lines_pass.h */; };
+ A9C2F2BA22E7833D001763CE /* process_lines_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F04522E7833C001763CE /* process_lines_pass.h */; };
+ A9C2F2BB22E7833D001763CE /* local_single_block_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F04622E7833C001763CE /* local_single_block_elim_pass.h */; };
+ A9C2F2BC22E7833D001763CE /* local_single_block_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F04622E7833C001763CE /* local_single_block_elim_pass.h */; };
+ A9C2F2BD22E7833D001763CE /* pch_source_opt.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F04722E7833C001763CE /* pch_source_opt.cpp */; };
+ A9C2F2BE22E7833D001763CE /* pch_source_opt.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F04722E7833C001763CE /* pch_source_opt.cpp */; };
+ A9C2F2BF22E7833D001763CE /* strength_reduction_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F04822E7833C001763CE /* strength_reduction_pass.h */; };
+ A9C2F2C022E7833D001763CE /* strength_reduction_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F04822E7833C001763CE /* strength_reduction_pass.h */; };
+ A9C2F2C122E7833D001763CE /* aggressive_dead_code_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F04922E7833C001763CE /* aggressive_dead_code_elim_pass.cpp */; };
+ A9C2F2C222E7833D001763CE /* aggressive_dead_code_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F04922E7833C001763CE /* aggressive_dead_code_elim_pass.cpp */; };
+ A9C2F2C322E7833D001763CE /* eliminate_dead_functions_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F04A22E7833C001763CE /* eliminate_dead_functions_util.cpp */; };
+ A9C2F2C422E7833D001763CE /* eliminate_dead_functions_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F04A22E7833C001763CE /* eliminate_dead_functions_util.cpp */; };
+ A9C2F2C522E7833D001763CE /* simplification_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F04B22E7833C001763CE /* simplification_pass.cpp */; };
+ A9C2F2C622E7833D001763CE /* simplification_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F04B22E7833C001763CE /* simplification_pass.cpp */; };
+ A9C2F2C722E7833D001763CE /* dead_branch_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F04C22E7833C001763CE /* dead_branch_elim_pass.cpp */; };
+ A9C2F2C822E7833D001763CE /* dead_branch_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F04C22E7833C001763CE /* dead_branch_elim_pass.cpp */; };
+ A9C2F2C922E7833D001763CE /* flatten_decoration_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F04D22E7833C001763CE /* flatten_decoration_pass.cpp */; };
+ A9C2F2CA22E7833D001763CE /* flatten_decoration_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F04D22E7833C001763CE /* flatten_decoration_pass.cpp */; };
+ A9C2F2CB22E7833D001763CE /* dead_insert_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F04E22E7833C001763CE /* dead_insert_elim_pass.h */; };
+ A9C2F2CC22E7833D001763CE /* dead_insert_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F04E22E7833C001763CE /* dead_insert_elim_pass.h */; };
+ A9C2F2CD22E7833D001763CE /* folding_rules.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F04F22E7833C001763CE /* folding_rules.cpp */; };
+ A9C2F2CE22E7833D001763CE /* folding_rules.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F04F22E7833C001763CE /* folding_rules.cpp */; };
+ A9C2F2CF22E7833D001763CE /* freeze_spec_constant_value_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F05022E7833C001763CE /* freeze_spec_constant_value_pass.h */; };
+ A9C2F2D022E7833D001763CE /* freeze_spec_constant_value_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F05022E7833C001763CE /* freeze_spec_constant_value_pass.h */; };
+ A9C2F2D122E7833D001763CE /* ir_context.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F05122E7833C001763CE /* ir_context.cpp */; };
+ A9C2F2D222E7833D001763CE /* ir_context.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F05122E7833C001763CE /* ir_context.cpp */; };
+ A9C2F2D322E7833D001763CE /* instrument_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F05222E7833C001763CE /* instrument_pass.h */; };
+ A9C2F2D422E7833D001763CE /* instrument_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F05222E7833C001763CE /* instrument_pass.h */; };
+ A9C2F2D522E7833D001763CE /* mem_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F05322E7833C001763CE /* mem_pass.h */; };
+ A9C2F2D622E7833D001763CE /* mem_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F05322E7833C001763CE /* mem_pass.h */; };
+ A9C2F2D722E7833D001763CE /* loop_descriptor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F05422E7833C001763CE /* loop_descriptor.cpp */; };
+ A9C2F2D822E7833D001763CE /* loop_descriptor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F05422E7833C001763CE /* loop_descriptor.cpp */; };
+ A9C2F2D922E7833D001763CE /* local_ssa_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F05522E7833C001763CE /* local_ssa_elim_pass.cpp */; };
+ A9C2F2DA22E7833D001763CE /* local_ssa_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F05522E7833C001763CE /* local_ssa_elim_pass.cpp */; };
+ A9C2F2DB22E7833D001763CE /* eliminate_dead_members_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F05622E7833C001763CE /* eliminate_dead_members_pass.h */; };
+ A9C2F2DC22E7833D001763CE /* eliminate_dead_members_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F05622E7833C001763CE /* eliminate_dead_members_pass.h */; };
+ A9C2F2DD22E7833D001763CE /* function.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F05722E7833C001763CE /* function.cpp */; };
+ A9C2F2DE22E7833D001763CE /* function.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F05722E7833C001763CE /* function.cpp */; };
+ A9C2F2DF22E7833D001763CE /* instruction_list.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F05822E7833C001763CE /* instruction_list.cpp */; };
+ A9C2F2E022E7833D001763CE /* instruction_list.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F05822E7833C001763CE /* instruction_list.cpp */; };
+ A9C2F2E122E7833D001763CE /* composite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F05922E7833C001763CE /* composite.cpp */; };
+ A9C2F2E222E7833D001763CE /* composite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F05922E7833C001763CE /* composite.cpp */; };
+ A9C2F2E322E7833D001763CE /* process_lines_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F05A22E7833C001763CE /* process_lines_pass.cpp */; };
+ A9C2F2E422E7833D001763CE /* process_lines_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F05A22E7833C001763CE /* process_lines_pass.cpp */; };
+ A9C2F2E522E7833D001763CE /* inline_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F05B22E7833C001763CE /* inline_pass.h */; };
+ A9C2F2E622E7833D001763CE /* inline_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F05B22E7833C001763CE /* inline_pass.h */; };
+ A9C2F2E722E7833D001763CE /* loop_dependence.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F05C22E7833C001763CE /* loop_dependence.h */; };
+ A9C2F2E822E7833D001763CE /* loop_dependence.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F05C22E7833C001763CE /* loop_dependence.h */; };
+ A9C2F2E922E7833D001763CE /* value_number_table.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F05D22E7833C001763CE /* value_number_table.h */; };
+ A9C2F2EA22E7833D001763CE /* value_number_table.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F05D22E7833C001763CE /* value_number_table.h */; };
+ A9C2F2EB22E7833D001763CE /* flatten_decoration_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F05E22E7833C001763CE /* flatten_decoration_pass.h */; };
+ A9C2F2EC22E7833D001763CE /* flatten_decoration_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F05E22E7833C001763CE /* flatten_decoration_pass.h */; };
+ A9C2F2ED22E7833D001763CE /* if_conversion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F05F22E7833C001763CE /* if_conversion.cpp */; };
+ A9C2F2EE22E7833D001763CE /* if_conversion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F05F22E7833C001763CE /* if_conversion.cpp */; };
+ A9C2F2EF22E7833D001763CE /* inline_exhaustive_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F06022E7833C001763CE /* inline_exhaustive_pass.h */; };
+ A9C2F2F022E7833D001763CE /* inline_exhaustive_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F06022E7833C001763CE /* inline_exhaustive_pass.h */; };
+ A9C2F2F122E7833D001763CE /* constants.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F06122E7833C001763CE /* constants.h */; };
+ A9C2F2F222E7833D001763CE /* constants.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F06122E7833C001763CE /* constants.h */; };
+ A9C2F2F322E7833D001763CE /* eliminate_dead_members_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F06222E7833C001763CE /* eliminate_dead_members_pass.cpp */; };
+ A9C2F2F422E7833D001763CE /* eliminate_dead_members_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F06222E7833C001763CE /* eliminate_dead_members_pass.cpp */; };
+ A9C2F2F522E7833D001763CE /* strength_reduction_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F06322E7833C001763CE /* strength_reduction_pass.cpp */; };
+ A9C2F2F622E7833D001763CE /* strength_reduction_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F06322E7833C001763CE /* strength_reduction_pass.cpp */; };
+ A9C2F2F722E7833D001763CE /* block_merge_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F06422E7833C001763CE /* block_merge_util.cpp */; };
+ A9C2F2F822E7833D001763CE /* block_merge_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F06422E7833C001763CE /* block_merge_util.cpp */; };
+ A9C2F2F922E7833D001763CE /* upgrade_memory_model.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F06522E7833C001763CE /* upgrade_memory_model.h */; };
+ A9C2F2FA22E7833D001763CE /* upgrade_memory_model.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F06522E7833C001763CE /* upgrade_memory_model.h */; };
+ A9C2F2FB22E7833D001763CE /* copy_prop_arrays.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F06622E7833C001763CE /* copy_prop_arrays.cpp */; };
+ A9C2F2FC22E7833D001763CE /* copy_prop_arrays.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F06622E7833C001763CE /* copy_prop_arrays.cpp */; };
+ A9C2F2FD22E7833D001763CE /* pass_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F06722E7833C001763CE /* pass_manager.cpp */; };
+ A9C2F2FE22E7833D001763CE /* pass_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F06722E7833C001763CE /* pass_manager.cpp */; };
+ A9C2F2FF22E7833D001763CE /* inline_exhaustive_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F06822E7833C001763CE /* inline_exhaustive_pass.cpp */; };
+ A9C2F30022E7833D001763CE /* inline_exhaustive_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F06822E7833C001763CE /* inline_exhaustive_pass.cpp */; };
+ A9C2F30122E7833D001763CE /* loop_fission.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F06922E7833C001763CE /* loop_fission.h */; };
+ A9C2F30222E7833D001763CE /* loop_fission.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F06922E7833C001763CE /* loop_fission.h */; };
+ A9C2F30322E7833D001763CE /* workaround1209.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F06A22E7833C001763CE /* workaround1209.h */; };
+ A9C2F30422E7833D001763CE /* workaround1209.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F06A22E7833C001763CE /* workaround1209.h */; };
+ A9C2F30522E7833D001763CE /* loop_fusion_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F06B22E7833C001763CE /* loop_fusion_pass.cpp */; };
+ A9C2F30622E7833D001763CE /* loop_fusion_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F06B22E7833C001763CE /* loop_fusion_pass.cpp */; };
+ A9C2F30722E7833D001763CE /* log.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F06C22E7833C001763CE /* log.h */; };
+ A9C2F30822E7833D001763CE /* log.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F06C22E7833C001763CE /* log.h */; };
+ A9C2F30922E7833D001763CE /* split_invalid_unreachable_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F06D22E7833C001763CE /* split_invalid_unreachable_pass.h */; };
+ A9C2F30A22E7833D001763CE /* split_invalid_unreachable_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F06D22E7833C001763CE /* split_invalid_unreachable_pass.h */; };
+ A9C2F30B22E7833D001763CE /* copy_prop_arrays.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F06E22E7833C001763CE /* copy_prop_arrays.h */; };
+ A9C2F30C22E7833D001763CE /* copy_prop_arrays.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F06E22E7833C001763CE /* copy_prop_arrays.h */; };
+ A9C2F30D22E7833D001763CE /* eliminate_dead_constant_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F06F22E7833C001763CE /* eliminate_dead_constant_pass.h */; };
+ A9C2F30E22E7833D001763CE /* eliminate_dead_constant_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F06F22E7833C001763CE /* eliminate_dead_constant_pass.h */; };
+ A9C2F30F22E7833D001763CE /* dead_insert_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F07022E7833C001763CE /* dead_insert_elim_pass.cpp */; };
+ A9C2F31022E7833D001763CE /* dead_insert_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F07022E7833C001763CE /* dead_insert_elim_pass.cpp */; };
+ A9C2F31122E7833D001763CE /* ssa_rewrite_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F07122E7833C001763CE /* ssa_rewrite_pass.h */; };
+ A9C2F31222E7833D001763CE /* ssa_rewrite_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F07122E7833C001763CE /* ssa_rewrite_pass.h */; };
+ A9C2F31322E7833D001763CE /* scalar_analysis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F07222E7833C001763CE /* scalar_analysis.cpp */; };
+ A9C2F31422E7833D001763CE /* scalar_analysis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F07222E7833C001763CE /* scalar_analysis.cpp */; };
+ A9C2F31522E7833D001763CE /* dead_variable_elimination.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F07322E7833C001763CE /* dead_variable_elimination.h */; };
+ A9C2F31622E7833D001763CE /* dead_variable_elimination.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F07322E7833C001763CE /* dead_variable_elimination.h */; };
+ A9C2F31722E7833D001763CE /* block_merge_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F07422E7833C001763CE /* block_merge_pass.cpp */; };
+ A9C2F31822E7833D001763CE /* block_merge_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F07422E7833C001763CE /* block_merge_pass.cpp */; };
+ A9C2F31922E7833D001763CE /* dominator_analysis.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F07522E7833C001763CE /* dominator_analysis.h */; };
+ A9C2F31A22E7833D001763CE /* dominator_analysis.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F07522E7833C001763CE /* dominator_analysis.h */; };
+ A9C2F31B22E7833D001763CE /* pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F07622E7833C001763CE /* pass.h */; };
+ A9C2F31C22E7833D001763CE /* pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F07622E7833C001763CE /* pass.h */; };
+ A9C2F31D22E7833D001763CE /* folding_rules.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F07722E7833C001763CE /* folding_rules.h */; };
+ A9C2F31E22E7833D001763CE /* folding_rules.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F07722E7833C001763CE /* folding_rules.h */; };
+ A9C2F31F22E7833D001763CE /* eliminate_dead_functions_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F07822E7833C001763CE /* eliminate_dead_functions_pass.h */; };
+ A9C2F32022E7833D001763CE /* eliminate_dead_functions_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F07822E7833C001763CE /* eliminate_dead_functions_pass.h */; };
+ A9C2F32122E7833D001763CE /* eliminate_dead_functions_util.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F07922E7833C001763CE /* eliminate_dead_functions_util.h */; };
+ A9C2F32222E7833D001763CE /* eliminate_dead_functions_util.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F07922E7833C001763CE /* eliminate_dead_functions_util.h */; };
+ A9C2F32322E7833D001763CE /* fold.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F07A22E7833C001763CE /* fold.h */; };
+ A9C2F32422E7833D001763CE /* fold.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F07A22E7833C001763CE /* fold.h */; };
+ A9C2F32522E7833D001763CE /* local_single_store_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F07B22E7833C001763CE /* local_single_store_elim_pass.cpp */; };
+ A9C2F32622E7833D001763CE /* local_single_store_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F07B22E7833C001763CE /* local_single_store_elim_pass.cpp */; };
+ A9C2F32722E7833D001763CE /* dead_branch_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F07C22E7833C001763CE /* dead_branch_elim_pass.h */; };
+ A9C2F32822E7833D001763CE /* dead_branch_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F07C22E7833C001763CE /* dead_branch_elim_pass.h */; };
+ A9C2F32922E7833D001763CE /* private_to_local_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F07D22E7833C001763CE /* private_to_local_pass.cpp */; };
+ A9C2F32A22E7833D001763CE /* private_to_local_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F07D22E7833C001763CE /* private_to_local_pass.cpp */; };
+ A9C2F32B22E7833D001763CE /* scalar_analysis_nodes.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F07E22E7833C001763CE /* scalar_analysis_nodes.h */; };
+ A9C2F32C22E7833D001763CE /* scalar_analysis_nodes.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F07E22E7833C001763CE /* scalar_analysis_nodes.h */; };
+ A9C2F32D22E7833D001763CE /* propagator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F07F22E7833C001763CE /* propagator.cpp */; };
+ A9C2F32E22E7833D001763CE /* propagator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F07F22E7833C001763CE /* propagator.cpp */; };
+ A9C2F32F22E7833D001763CE /* fix_storage_class.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F08022E7833C001763CE /* fix_storage_class.h */; };
+ A9C2F33022E7833D001763CE /* fix_storage_class.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F08022E7833C001763CE /* fix_storage_class.h */; };
+ A9C2F33122E7833D001763CE /* loop_dependence_helpers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F08122E7833C001763CE /* loop_dependence_helpers.cpp */; };
+ A9C2F33222E7833D001763CE /* loop_dependence_helpers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F08122E7833C001763CE /* loop_dependence_helpers.cpp */; };
+ A9C2F33322E7833D001763CE /* set_spec_constant_default_value_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F08222E7833C001763CE /* set_spec_constant_default_value_pass.cpp */; };
+ A9C2F33422E7833D001763CE /* set_spec_constant_default_value_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F08222E7833C001763CE /* set_spec_constant_default_value_pass.cpp */; };
+ A9C2F33522E7833D001763CE /* passes.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F08322E7833C001763CE /* passes.h */; };
+ A9C2F33622E7833D001763CE /* passes.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F08322E7833C001763CE /* passes.h */; };
+ A9C2F33722E7833D001763CE /* fold.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F08422E7833C001763CE /* fold.cpp */; };
+ A9C2F33822E7833D001763CE /* fold.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F08422E7833C001763CE /* fold.cpp */; };
+ A9C2F33922E7833D001763CE /* strip_reflect_info_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F08522E7833C001763CE /* strip_reflect_info_pass.h */; };
+ A9C2F33A22E7833D001763CE /* strip_reflect_info_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F08522E7833C001763CE /* strip_reflect_info_pass.h */; };
+ A9C2F33B22E7833D001763CE /* scalar_replacement_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F08622E7833C001763CE /* scalar_replacement_pass.cpp */; };
+ A9C2F33C22E7833D001763CE /* scalar_replacement_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F08622E7833C001763CE /* scalar_replacement_pass.cpp */; };
+ A9C2F33D22E7833D001763CE /* simplification_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F08722E7833C001763CE /* simplification_pass.h */; };
+ A9C2F33E22E7833D001763CE /* simplification_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F08722E7833C001763CE /* simplification_pass.h */; };
+ A9C2F33F22E7833D001763CE /* remove_duplicates_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F08822E7833C001763CE /* remove_duplicates_pass.h */; };
+ A9C2F34022E7833D001763CE /* remove_duplicates_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F08822E7833C001763CE /* remove_duplicates_pass.h */; };
+ A9C2F34122E7833D001763CE /* redundancy_elimination.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F08922E7833C001763CE /* redundancy_elimination.cpp */; };
+ A9C2F34222E7833D001763CE /* redundancy_elimination.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F08922E7833C001763CE /* redundancy_elimination.cpp */; };
+ A9C2F34322E7833D001763CE /* reflect.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F08A22E7833C001763CE /* reflect.h */; };
+ A9C2F34422E7833D001763CE /* reflect.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F08A22E7833C001763CE /* reflect.h */; };
+ A9C2F34522E7833D001763CE /* workaround1209.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F08B22E7833C001763CE /* workaround1209.cpp */; };
+ A9C2F34622E7833D001763CE /* workaround1209.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F08B22E7833C001763CE /* workaround1209.cpp */; };
+ A9C2F34722E7833D001763CE /* null_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F08C22E7833C001763CE /* null_pass.h */; };
+ A9C2F34822E7833D001763CE /* null_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F08C22E7833C001763CE /* null_pass.h */; };
+ A9C2F34922E7833D001763CE /* const_folding_rules.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F08D22E7833C001763CE /* const_folding_rules.h */; };
+ A9C2F34A22E7833D001763CE /* const_folding_rules.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F08D22E7833C001763CE /* const_folding_rules.h */; };
+ A9C2F34B22E7833D001763CE /* scalar_replacement_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F08E22E7833C001763CE /* scalar_replacement_pass.h */; };
+ A9C2F34C22E7833D001763CE /* scalar_replacement_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F08E22E7833C001763CE /* scalar_replacement_pass.h */; };
+ A9C2F34D22E7833D001763CE /* instruction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F08F22E7833C001763CE /* instruction.cpp */; };
+ A9C2F34E22E7833D001763CE /* instruction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F08F22E7833C001763CE /* instruction.cpp */; };
+ A9C2F34F22E7833D001763CE /* pch_source_opt.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F09022E7833C001763CE /* pch_source_opt.h */; };
+ A9C2F35022E7833D001763CE /* pch_source_opt.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F09022E7833C001763CE /* pch_source_opt.h */; };
+ A9C2F35122E7833D001763CE /* reduce_load_size.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F09122E7833C001763CE /* reduce_load_size.cpp */; };
+ A9C2F35222E7833D001763CE /* reduce_load_size.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F09122E7833C001763CE /* reduce_load_size.cpp */; };
+ A9C2F35322E7833D001763CE /* redundancy_elimination.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F09222E7833C001763CE /* redundancy_elimination.h */; };
+ A9C2F35422E7833D001763CE /* redundancy_elimination.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F09222E7833C001763CE /* redundancy_elimination.h */; };
+ A9C2F35522E7833D001763CE /* fix_storage_class.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F09322E7833C001763CE /* fix_storage_class.cpp */; };
+ A9C2F35622E7833D001763CE /* fix_storage_class.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F09322E7833C001763CE /* fix_storage_class.cpp */; };
+ A9C2F35722E7833D001763CE /* value_number_table.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F09422E7833C001763CE /* value_number_table.cpp */; };
+ A9C2F35822E7833D001763CE /* value_number_table.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F09422E7833C001763CE /* value_number_table.cpp */; };
+ A9C2F35922E7833D001763CE /* local_ssa_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F09522E7833C001763CE /* local_ssa_elim_pass.h */; };
+ A9C2F35A22E7833D001763CE /* local_ssa_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F09522E7833C001763CE /* local_ssa_elim_pass.h */; };
+ A9C2F35B22E7833D001763CE /* inline_opaque_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F09622E7833C001763CE /* inline_opaque_pass.cpp */; };
+ A9C2F35C22E7833D001763CE /* inline_opaque_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F09622E7833C001763CE /* inline_opaque_pass.cpp */; };
+ A9C2F35D22E7833D001763CE /* replace_invalid_opc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F09722E7833C001763CE /* replace_invalid_opc.cpp */; };
+ A9C2F35E22E7833D001763CE /* replace_invalid_opc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F09722E7833C001763CE /* replace_invalid_opc.cpp */; };
+ A9C2F35F22E7833D001763CE /* loop_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F09822E7833C001763CE /* loop_utils.h */; };
+ A9C2F36022E7833D001763CE /* loop_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F09822E7833C001763CE /* loop_utils.h */; };
+ A9C2F36122E7833D001763CE /* module.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F09922E7833C001763CE /* module.h */; };
+ A9C2F36222E7833D001763CE /* module.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F09922E7833C001763CE /* module.h */; };
+ A9C2F36322E7833D001763CE /* dominator_analysis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F09A22E7833C001763CE /* dominator_analysis.cpp */; };
+ A9C2F36422E7833D001763CE /* dominator_analysis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F09A22E7833C001763CE /* dominator_analysis.cpp */; };
+ A9C2F36522E7833D001763CE /* decompose_initialized_variables_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F09B22E7833C001763CE /* decompose_initialized_variables_pass.cpp */; };
+ A9C2F36622E7833D001763CE /* decompose_initialized_variables_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F09B22E7833C001763CE /* decompose_initialized_variables_pass.cpp */; };
+ A9C2F36722E7833D001763CE /* ir_builder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F09C22E7833C001763CE /* ir_builder.h */; };
+ A9C2F36822E7833D001763CE /* ir_builder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F09C22E7833C001763CE /* ir_builder.h */; };
+ A9C2F36922E7833D001763CE /* loop_unswitch_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F09D22E7833C001763CE /* loop_unswitch_pass.h */; };
+ A9C2F36A22E7833D001763CE /* loop_unswitch_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F09D22E7833C001763CE /* loop_unswitch_pass.h */; };
+ A9C2F36B22E7833D001763CE /* cfg.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F09E22E7833C001763CE /* cfg.h */; };
+ A9C2F36C22E7833D001763CE /* cfg.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F09E22E7833C001763CE /* cfg.h */; };
+ A9C2F36D22E7833D001763CE /* code_sink.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F09F22E7833C001763CE /* code_sink.h */; };
+ A9C2F36E22E7833D001763CE /* code_sink.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F09F22E7833C001763CE /* code_sink.h */; };
+ A9C2F36F22E7833D001763CE /* loop_descriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0A022E7833C001763CE /* loop_descriptor.h */; };
+ A9C2F37022E7833D001763CE /* loop_descriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0A022E7833C001763CE /* loop_descriptor.h */; };
+ A9C2F37122E7833D001763CE /* generate_webgpu_initializers_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0A122E7833C001763CE /* generate_webgpu_initializers_pass.h */; };
+ A9C2F37222E7833D001763CE /* generate_webgpu_initializers_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0A122E7833C001763CE /* generate_webgpu_initializers_pass.h */; };
+ A9C2F37322E7833D001763CE /* instruction.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0A222E7833C001763CE /* instruction.h */; };
+ A9C2F37422E7833D001763CE /* instruction.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0A222E7833C001763CE /* instruction.h */; };
+ A9C2F37522E7833D001763CE /* aggressive_dead_code_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0A322E7833C001763CE /* aggressive_dead_code_elim_pass.h */; };
+ A9C2F37622E7833D001763CE /* aggressive_dead_code_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0A322E7833C001763CE /* aggressive_dead_code_elim_pass.h */; };
+ A9C2F37722E7833D001763CE /* struct_cfg_analysis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0A422E7833C001763CE /* struct_cfg_analysis.cpp */; };
+ A9C2F37822E7833D001763CE /* struct_cfg_analysis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0A422E7833C001763CE /* struct_cfg_analysis.cpp */; };
+ A9C2F37922E7833D001763CE /* vector_dce.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0A522E7833C001763CE /* vector_dce.h */; };
+ A9C2F37A22E7833D001763CE /* vector_dce.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0A522E7833C001763CE /* vector_dce.h */; };
+ A9C2F37B22E7833D001763CE /* combine_access_chains.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0A622E7833C001763CE /* combine_access_chains.h */; };
+ A9C2F37C22E7833D001763CE /* combine_access_chains.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0A622E7833C001763CE /* combine_access_chains.h */; };
+ A9C2F37D22E7833D001763CE /* pass_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0A722E7833C001763CE /* pass_manager.h */; };
+ A9C2F37E22E7833D001763CE /* pass_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0A722E7833C001763CE /* pass_manager.h */; };
+ A9C2F37F22E7833D001763CE /* local_access_chain_convert_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0A822E7833C001763CE /* local_access_chain_convert_pass.cpp */; };
+ A9C2F38022E7833D001763CE /* local_access_chain_convert_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0A822E7833C001763CE /* local_access_chain_convert_pass.cpp */; };
+ A9C2F38122E7833D001763CE /* basic_block.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0A922E7833C001763CE /* basic_block.cpp */; };
+ A9C2F38222E7833D001763CE /* basic_block.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0A922E7833C001763CE /* basic_block.cpp */; };
+ A9C2F38322E7833D001763CE /* iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0AA22E7833C001763CE /* iterator.h */; };
+ A9C2F38422E7833D001763CE /* iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0AA22E7833C001763CE /* iterator.h */; };
+ A9C2F38522E7833D001763CE /* licm_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0AB22E7833C001763CE /* licm_pass.h */; };
+ A9C2F38622E7833D001763CE /* licm_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0AB22E7833C001763CE /* licm_pass.h */; };
+ A9C2F38722E7833D001763CE /* build_module.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0AC22E7833C001763CE /* build_module.h */; };
+ A9C2F38822E7833D001763CE /* build_module.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0AC22E7833C001763CE /* build_module.h */; };
+ A9C2F38922E7833D001763CE /* ccp_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0AD22E7833C001763CE /* ccp_pass.h */; };
+ A9C2F38A22E7833D001763CE /* ccp_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0AD22E7833C001763CE /* ccp_pass.h */; };
+ A9C2F38B22E7833D001763CE /* decompose_initialized_variables_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0AE22E7833C001763CE /* decompose_initialized_variables_pass.h */; };
+ A9C2F38C22E7833D001763CE /* decompose_initialized_variables_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0AE22E7833C001763CE /* decompose_initialized_variables_pass.h */; };
+ A9C2F38D22E7833D001763CE /* function.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0AF22E7833C001763CE /* function.h */; };
+ A9C2F38E22E7833D001763CE /* function.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0AF22E7833C001763CE /* function.h */; };
+ A9C2F38F22E7833D001763CE /* loop_fusion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0B022E7833C001763CE /* loop_fusion.cpp */; };
+ A9C2F39022E7833D001763CE /* loop_fusion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0B022E7833C001763CE /* loop_fusion.cpp */; };
+ A9C2F39122E7833D001763CE /* upgrade_memory_model.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0B122E7833C001763CE /* upgrade_memory_model.cpp */; };
+ A9C2F39222E7833D001763CE /* upgrade_memory_model.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0B122E7833C001763CE /* upgrade_memory_model.cpp */; };
+ A9C2F39322E7833D001763CE /* feature_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0B222E7833C001763CE /* feature_manager.h */; };
+ A9C2F39422E7833D001763CE /* feature_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0B222E7833C001763CE /* feature_manager.h */; };
+ A9C2F39522E7833D001763CE /* inst_bindless_check_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0B322E7833C001763CE /* inst_bindless_check_pass.h */; };
+ A9C2F39622E7833D001763CE /* inst_bindless_check_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0B322E7833C001763CE /* inst_bindless_check_pass.h */; };
+ A9C2F39722E7833D001763CE /* scalar_analysis_simplification.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0B422E7833C001763CE /* scalar_analysis_simplification.cpp */; };
+ A9C2F39822E7833D001763CE /* scalar_analysis_simplification.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0B422E7833C001763CE /* scalar_analysis_simplification.cpp */; };
+ A9C2F39922E7833D001763CE /* set_spec_constant_default_value_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0B522E7833C001763CE /* set_spec_constant_default_value_pass.h */; };
+ A9C2F39A22E7833D001763CE /* set_spec_constant_default_value_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0B522E7833C001763CE /* set_spec_constant_default_value_pass.h */; };
+ A9C2F39B22E7833D001763CE /* dominator_tree.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0B622E7833C001763CE /* dominator_tree.h */; };
+ A9C2F39C22E7833D001763CE /* dominator_tree.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0B622E7833C001763CE /* dominator_tree.h */; };
+ A9C2F39D22E7833D001763CE /* legalize_vector_shuffle_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0B722E7833C001763CE /* legalize_vector_shuffle_pass.cpp */; };
+ A9C2F39E22E7833D001763CE /* legalize_vector_shuffle_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0B722E7833C001763CE /* legalize_vector_shuffle_pass.cpp */; };
+ A9C2F39F22E7833D001763CE /* type_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0B822E7833C001763CE /* type_manager.h */; };
+ A9C2F3A022E7833D001763CE /* type_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0B822E7833C001763CE /* type_manager.h */; };
+ A9C2F3A122E7833D001763CE /* compact_ids_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0B922E7833C001763CE /* compact_ids_pass.cpp */; };
+ A9C2F3A222E7833D001763CE /* compact_ids_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0B922E7833C001763CE /* compact_ids_pass.cpp */; };
+ A9C2F3A322E7833D001763CE /* loop_peeling.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0BA22E7833C001763CE /* loop_peeling.cpp */; };
+ A9C2F3A422E7833D001763CE /* loop_peeling.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0BA22E7833C001763CE /* loop_peeling.cpp */; };
+ A9C2F3A522E7833D001763CE /* table.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0BB22E7833C001763CE /* table.h */; };
+ A9C2F3A622E7833D001763CE /* table.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0BB22E7833C001763CE /* table.h */; };
+ A9C2F41B22E7833D001763CE /* ext_inst.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0F922E7833D001763CE /* ext_inst.h */; };
+ A9C2F41C22E7833D001763CE /* ext_inst.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0F922E7833D001763CE /* ext_inst.h */; };
+ A9C2F41D22E7833D001763CE /* diagnostic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0FA22E7833D001763CE /* diagnostic.cpp */; };
+ A9C2F41E22E7833D001763CE /* diagnostic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0FA22E7833D001763CE /* diagnostic.cpp */; };
+ A9C2F41F22E7833D001763CE /* latest_version_spirv_header.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0FB22E7833D001763CE /* latest_version_spirv_header.h */; };
+ A9C2F42022E7833D001763CE /* latest_version_spirv_header.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0FB22E7833D001763CE /* latest_version_spirv_header.h */; };
+ A9C2F42122E7833D001763CE /* libspirv.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0FC22E7833D001763CE /* libspirv.cpp */; };
+ A9C2F42222E7833D001763CE /* libspirv.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0FC22E7833D001763CE /* libspirv.cpp */; };
+ A9C2F42322E7833D001763CE /* instruction.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0FD22E7833D001763CE /* instruction.h */; };
+ A9C2F42422E7833D001763CE /* instruction.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0FD22E7833D001763CE /* instruction.h */; };
+ A9C2F42522E7833D001763CE /* spirv_optimizer_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0FE22E7833D001763CE /* spirv_optimizer_options.h */; };
+ A9C2F42622E7833D001763CE /* spirv_optimizer_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0FE22E7833D001763CE /* spirv_optimizer_options.h */; };
+ A9C2F42722E7833D001763CE /* opcode.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0FF22E7833D001763CE /* opcode.h */; };
+ A9C2F42822E7833D001763CE /* opcode.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0FF22E7833D001763CE /* opcode.h */; };
+ A9C2F42922E7833D001763CE /* operand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10022E7833D001763CE /* operand.cpp */; };
+ A9C2F42A22E7833D001763CE /* operand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10022E7833D001763CE /* operand.cpp */; };
+ A9C2F42B22E7833D001763CE /* latest_version_glsl_std_450_header.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F10122E7833D001763CE /* latest_version_glsl_std_450_header.h */; };
+ A9C2F42C22E7833D001763CE /* latest_version_glsl_std_450_header.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F10122E7833D001763CE /* latest_version_glsl_std_450_header.h */; };
+ A9C2F42D22E7833D001763CE /* extensions.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F10222E7833D001763CE /* extensions.h */; };
+ A9C2F42E22E7833D001763CE /* extensions.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F10222E7833D001763CE /* extensions.h */; };
+ A9C2F42F22E7833D001763CE /* disassemble.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10322E7833D001763CE /* disassemble.cpp */; };
+ A9C2F43022E7833D001763CE /* disassemble.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10322E7833D001763CE /* disassemble.cpp */; };
+ A9C2F43122E7833D001763CE /* binary.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F10422E7833D001763CE /* binary.h */; };
+ A9C2F43222E7833D001763CE /* binary.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F10422E7833D001763CE /* binary.h */; };
+ A9C2F43322E7833D001763CE /* text_handler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10522E7833D001763CE /* text_handler.cpp */; };
+ A9C2F43422E7833D001763CE /* text_handler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10522E7833D001763CE /* text_handler.cpp */; };
+ A9C2F43522E7833D001763CE /* validate_annotation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10722E7833D001763CE /* validate_annotation.cpp */; };
+ A9C2F43622E7833D001763CE /* validate_annotation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10722E7833D001763CE /* validate_annotation.cpp */; };
+ A9C2F43722E7833D001763CE /* validate_misc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10822E7833D001763CE /* validate_misc.cpp */; };
+ A9C2F43822E7833D001763CE /* validate_misc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10822E7833D001763CE /* validate_misc.cpp */; };
+ A9C2F43922E7833D001763CE /* validate_cfg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10922E7833D001763CE /* validate_cfg.cpp */; };
+ A9C2F43A22E7833D001763CE /* validate_cfg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10922E7833D001763CE /* validate_cfg.cpp */; };
+ A9C2F43B22E7833D001763CE /* validate_capability.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10A22E7833D001763CE /* validate_capability.cpp */; };
+ A9C2F43C22E7833D001763CE /* validate_capability.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10A22E7833D001763CE /* validate_capability.cpp */; };
+ A9C2F43D22E7833D001763CE /* construct.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F10B22E7833D001763CE /* construct.h */; };
+ A9C2F43E22E7833D001763CE /* construct.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F10B22E7833D001763CE /* construct.h */; };
+ A9C2F43F22E7833D001763CE /* validate_barriers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10C22E7833D001763CE /* validate_barriers.cpp */; };
+ A9C2F44022E7833D001763CE /* validate_barriers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10C22E7833D001763CE /* validate_barriers.cpp */; };
+ A9C2F44122E7833D001763CE /* validate_non_uniform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10D22E7833D001763CE /* validate_non_uniform.cpp */; };
+ A9C2F44222E7833D001763CE /* validate_non_uniform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10D22E7833D001763CE /* validate_non_uniform.cpp */; };
+ A9C2F44322E7833D001763CE /* validate_scopes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10E22E7833D001763CE /* validate_scopes.cpp */; };
+ A9C2F44422E7833D001763CE /* validate_scopes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10E22E7833D001763CE /* validate_scopes.cpp */; };
+ A9C2F44522E7833D001763CE /* validate_atomics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10F22E7833D001763CE /* validate_atomics.cpp */; };
+ A9C2F44622E7833D001763CE /* validate_atomics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10F22E7833D001763CE /* validate_atomics.cpp */; };
+ A9C2F44722E7833D001763CE /* basic_block.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F11022E7833D001763CE /* basic_block.h */; };
+ A9C2F44822E7833D001763CE /* basic_block.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F11022E7833D001763CE /* basic_block.h */; };
+ A9C2F44922E7833D001763CE /* validate_instruction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11122E7833D001763CE /* validate_instruction.cpp */; };
+ A9C2F44A22E7833D001763CE /* validate_instruction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11122E7833D001763CE /* validate_instruction.cpp */; };
+ A9C2F44B22E7833D001763CE /* validate_decorations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11222E7833D001763CE /* validate_decorations.cpp */; };
+ A9C2F44C22E7833D001763CE /* validate_decorations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11222E7833D001763CE /* validate_decorations.cpp */; };
+ A9C2F44D22E7833D001763CE /* validate_debug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11322E7833D001763CE /* validate_debug.cpp */; };
+ A9C2F44E22E7833D001763CE /* validate_debug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11322E7833D001763CE /* validate_debug.cpp */; };
+ A9C2F44F22E7833D001763CE /* validate_builtins.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11422E7833D001763CE /* validate_builtins.cpp */; };
+ A9C2F45022E7833D001763CE /* validate_builtins.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11422E7833D001763CE /* validate_builtins.cpp */; };
+ A9C2F45122E7833D001763CE /* validate_interfaces.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11522E7833D001763CE /* validate_interfaces.cpp */; };
+ A9C2F45222E7833D001763CE /* validate_interfaces.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11522E7833D001763CE /* validate_interfaces.cpp */; };
+ A9C2F45322E7833D001763CE /* validate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11622E7833D001763CE /* validate.cpp */; };
+ A9C2F45422E7833D001763CE /* validate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11622E7833D001763CE /* validate.cpp */; };
+ A9C2F45522E7833D001763CE /* validation_state.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F11722E7833D001763CE /* validation_state.h */; };
+ A9C2F45622E7833D001763CE /* validation_state.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F11722E7833D001763CE /* validation_state.h */; };
+ A9C2F45722E7833D001763CE /* validate_constants.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11822E7833D001763CE /* validate_constants.cpp */; };
+ A9C2F45822E7833D001763CE /* validate_constants.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11822E7833D001763CE /* validate_constants.cpp */; };
+ A9C2F45922E7833D001763CE /* validate_bitwise.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11922E7833D001763CE /* validate_bitwise.cpp */; };
+ A9C2F45A22E7833D001763CE /* validate_bitwise.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11922E7833D001763CE /* validate_bitwise.cpp */; };
+ A9C2F45B22E7833D001763CE /* validate_extensions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11A22E7833D001763CE /* validate_extensions.cpp */; };
+ A9C2F45C22E7833D001763CE /* validate_extensions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11A22E7833D001763CE /* validate_extensions.cpp */; };
+ A9C2F45D22E7833D001763CE /* construct.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11B22E7833D001763CE /* construct.cpp */; };
+ A9C2F45E22E7833D001763CE /* construct.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11B22E7833D001763CE /* construct.cpp */; };
+ A9C2F45F22E7833D001763CE /* function.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11C22E7833D001763CE /* function.cpp */; };
+ A9C2F46022E7833D001763CE /* function.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11C22E7833D001763CE /* function.cpp */; };
+ A9C2F46122E7833D001763CE /* validate.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F11D22E7833D001763CE /* validate.h */; };
+ A9C2F46222E7833D001763CE /* validate.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F11D22E7833D001763CE /* validate.h */; };
+ A9C2F46322E7833D001763CE /* validate_adjacency.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11E22E7833D001763CE /* validate_adjacency.cpp */; };
+ A9C2F46422E7833D001763CE /* validate_adjacency.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11E22E7833D001763CE /* validate_adjacency.cpp */; };
+ A9C2F46522E7833D001763CE /* validate_conversion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11F22E7833D001763CE /* validate_conversion.cpp */; };
+ A9C2F46622E7833D001763CE /* validate_conversion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11F22E7833D001763CE /* validate_conversion.cpp */; };
+ A9C2F46722E7833D001763CE /* validate_small_type_uses.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12022E7833D001763CE /* validate_small_type_uses.cpp */; };
+ A9C2F46822E7833D001763CE /* validate_small_type_uses.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12022E7833D001763CE /* validate_small_type_uses.cpp */; };
+ A9C2F46922E7833D001763CE /* validate_datarules.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12122E7833D001763CE /* validate_datarules.cpp */; };
+ A9C2F46A22E7833D001763CE /* validate_datarules.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12122E7833D001763CE /* validate_datarules.cpp */; };
+ A9C2F46B22E7833D001763CE /* validate_scopes.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F12222E7833D001763CE /* validate_scopes.h */; };
+ A9C2F46C22E7833D001763CE /* validate_scopes.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F12222E7833D001763CE /* validate_scopes.h */; };
+ A9C2F46D22E7833D001763CE /* validate_id.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12322E7833D001763CE /* validate_id.cpp */; };
+ A9C2F46E22E7833D001763CE /* validate_id.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12322E7833D001763CE /* validate_id.cpp */; };
+ A9C2F46F22E7833D001763CE /* validate_memory_semantics.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F12422E7833D001763CE /* validate_memory_semantics.h */; };
+ A9C2F47022E7833D001763CE /* validate_memory_semantics.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F12422E7833D001763CE /* validate_memory_semantics.h */; };
+ A9C2F47122E7833D001763CE /* validate_arithmetics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12522E7833D001763CE /* validate_arithmetics.cpp */; };
+ A9C2F47222E7833D001763CE /* validate_arithmetics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12522E7833D001763CE /* validate_arithmetics.cpp */; };
+ A9C2F47322E7833D001763CE /* validate_mode_setting.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12622E7833D001763CE /* validate_mode_setting.cpp */; };
+ A9C2F47422E7833D001763CE /* validate_mode_setting.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12622E7833D001763CE /* validate_mode_setting.cpp */; };
+ A9C2F47522E7833D001763CE /* validate_memory_semantics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12722E7833D001763CE /* validate_memory_semantics.cpp */; };
+ A9C2F47622E7833D001763CE /* validate_memory_semantics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12722E7833D001763CE /* validate_memory_semantics.cpp */; };
+ A9C2F47722E7833D001763CE /* validate_logicals.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12822E7833D001763CE /* validate_logicals.cpp */; };
+ A9C2F47822E7833D001763CE /* validate_logicals.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12822E7833D001763CE /* validate_logicals.cpp */; };
+ A9C2F47922E7833D001763CE /* validate_derivatives.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12922E7833D001763CE /* validate_derivatives.cpp */; };
+ A9C2F47A22E7833D001763CE /* validate_derivatives.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12922E7833D001763CE /* validate_derivatives.cpp */; };
+ A9C2F47B22E7833D001763CE /* validate_memory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12A22E7833D001763CE /* validate_memory.cpp */; };
+ A9C2F47C22E7833D001763CE /* validate_memory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12A22E7833D001763CE /* validate_memory.cpp */; };
+ A9C2F47D22E7833D001763CE /* validate_image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12B22E7833D001763CE /* validate_image.cpp */; };
+ A9C2F47E22E7833D001763CE /* validate_image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12B22E7833D001763CE /* validate_image.cpp */; };
+ A9C2F47F22E7833D001763CE /* validate_literals.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12C22E7833D001763CE /* validate_literals.cpp */; };
+ A9C2F48022E7833D001763CE /* validate_literals.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12C22E7833D001763CE /* validate_literals.cpp */; };
+ A9C2F48122E7833D001763CE /* instruction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12D22E7833D001763CE /* instruction.cpp */; };
+ A9C2F48222E7833D001763CE /* instruction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12D22E7833D001763CE /* instruction.cpp */; };
+ A9C2F48322E7833D001763CE /* validate_type.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12E22E7833D001763CE /* validate_type.cpp */; };
+ A9C2F48422E7833D001763CE /* validate_type.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12E22E7833D001763CE /* validate_type.cpp */; };
+ A9C2F48522E7833D001763CE /* instruction.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F12F22E7833D001763CE /* instruction.h */; };
+ A9C2F48622E7833D001763CE /* instruction.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F12F22E7833D001763CE /* instruction.h */; };
+ A9C2F48722E7833D001763CE /* validate_execution_limitations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F13022E7833D001763CE /* validate_execution_limitations.cpp */; };
+ A9C2F48822E7833D001763CE /* validate_execution_limitations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F13022E7833D001763CE /* validate_execution_limitations.cpp */; };
+ A9C2F48922E7833D001763CE /* validate_layout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F13122E7833D001763CE /* validate_layout.cpp */; };
+ A9C2F48A22E7833D001763CE /* validate_layout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F13122E7833D001763CE /* validate_layout.cpp */; };
+ A9C2F48B22E7833D001763CE /* basic_block.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F13222E7833D001763CE /* basic_block.cpp */; };
+ A9C2F48C22E7833D001763CE /* basic_block.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F13222E7833D001763CE /* basic_block.cpp */; };
+ A9C2F48D22E7833D001763CE /* validate_function.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F13322E7833D001763CE /* validate_function.cpp */; };
+ A9C2F48E22E7833D001763CE /* validate_function.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F13322E7833D001763CE /* validate_function.cpp */; };
+ A9C2F48F22E7833D001763CE /* function.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F13422E7833D001763CE /* function.h */; };
+ A9C2F49022E7833D001763CE /* function.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F13422E7833D001763CE /* function.h */; };
+ A9C2F49122E7833D001763CE /* validate_composites.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F13522E7833D001763CE /* validate_composites.cpp */; };
+ A9C2F49222E7833D001763CE /* validate_composites.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F13522E7833D001763CE /* validate_composites.cpp */; };
+ A9C2F49322E7833D001763CE /* validation_state.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F13622E7833D001763CE /* validation_state.cpp */; };
+ A9C2F49422E7833D001763CE /* validation_state.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F13622E7833D001763CE /* validation_state.cpp */; };
+ A9C2F49522E7833D001763CE /* validate_primitives.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F13722E7833D001763CE /* validate_primitives.cpp */; };
+ A9C2F49622E7833D001763CE /* validate_primitives.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F13722E7833D001763CE /* validate_primitives.cpp */; };
+ A9C2F49722E7833D001763CE /* decoration.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F13822E7833D001763CE /* decoration.h */; };
+ A9C2F49822E7833D001763CE /* decoration.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F13822E7833D001763CE /* decoration.h */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -1078,390 +1076,6 @@
450A4F64221C5A95007203D7 /* spirv_reflect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_reflect.cpp; sourceTree = "<group>"; };
A90FD89F21CC4EAB00B92BB2 /* libSPIRVCross.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libSPIRVCross.a; sourceTree = BUILT_PRODUCTS_DIR; };
A90FD9E421CC4EB900B92BB2 /* libSPIRVCross.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libSPIRVCross.a; sourceTree = BUILT_PRODUCTS_DIR; };
- A94A673E22B17BBB00C661C6 /* spirv_target_env.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_target_env.cpp; sourceTree = "<group>"; };
- A94A673F22B17BBB00C661C6 /* extinst.spv-amd-shader-explicit-vertex-parameter.grammar.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "extinst.spv-amd-shader-explicit-vertex-parameter.grammar.json"; sourceTree = "<group>"; };
- A94A674022B17BBB00C661C6 /* spirv_fuzzer_options.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_fuzzer_options.h; sourceTree = "<group>"; };
- A94A674122B17BBB00C661C6 /* assembly_grammar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = assembly_grammar.h; sourceTree = "<group>"; };
- A94A674222B17BBB00C661C6 /* enum_set.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = enum_set.h; sourceTree = "<group>"; };
- A94A674322B17BBB00C661C6 /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; };
- A94A674422B17BBB00C661C6 /* extinst.spv-amd-shader-ballot.grammar.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "extinst.spv-amd-shader-ballot.grammar.json"; sourceTree = "<group>"; };
- A94A674522B17BBB00C661C6 /* text.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = text.cpp; sourceTree = "<group>"; };
- A94A674622B17BBB00C661C6 /* assembly_grammar.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = assembly_grammar.cpp; sourceTree = "<group>"; };
- A94A674722B17BBB00C661C6 /* text.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = text.h; sourceTree = "<group>"; };
- A94A674822B17BBB00C661C6 /* extensions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = extensions.cpp; sourceTree = "<group>"; };
- A94A674922B17BBB00C661C6 /* pch_source.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pch_source.cpp; sourceTree = "<group>"; };
- A94A674B22B17BBB00C661C6 /* parse_number.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = parse_number.h; sourceTree = "<group>"; };
- A94A674C22B17BBB00C661C6 /* ilist_node.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ilist_node.h; sourceTree = "<group>"; };
- A94A674D22B17BBB00C661C6 /* make_unique.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = make_unique.h; sourceTree = "<group>"; };
- A94A674E22B17BBB00C661C6 /* string_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = string_utils.h; sourceTree = "<group>"; };
- A94A674F22B17BBB00C661C6 /* small_vector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = small_vector.h; sourceTree = "<group>"; };
- A94A675022B17BBB00C661C6 /* timer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = timer.cpp; sourceTree = "<group>"; };
- A94A675122B17BBB00C661C6 /* timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = timer.h; sourceTree = "<group>"; };
- A94A675222B17BBB00C661C6 /* string_utils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = string_utils.cpp; sourceTree = "<group>"; };
- A94A675322B17BBB00C661C6 /* bit_vector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bit_vector.h; sourceTree = "<group>"; };
- A94A675422B17BBB00C661C6 /* bitutils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bitutils.h; sourceTree = "<group>"; };
- A94A675522B17BBB00C661C6 /* hex_float.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hex_float.h; sourceTree = "<group>"; };
- A94A675622B17BBB00C661C6 /* parse_number.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = parse_number.cpp; sourceTree = "<group>"; };
- A94A675722B17BBB00C661C6 /* bit_vector.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bit_vector.cpp; sourceTree = "<group>"; };
- A94A675822B17BBB00C661C6 /* ilist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ilist.h; sourceTree = "<group>"; };
- A94A675922B17BBB00C661C6 /* spirv_target_env.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_target_env.h; sourceTree = "<group>"; };
- A94A675A22B17BBB00C661C6 /* table.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = table.cpp; sourceTree = "<group>"; };
- A94A675C22B17BBB00C661C6 /* operand_to_undef_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = operand_to_undef_reduction_opportunity_finder.h; sourceTree = "<group>"; };
- A94A675D22B17BBB00C661C6 /* remove_selection_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_selection_reduction_opportunity.cpp; sourceTree = "<group>"; };
- A94A675E22B17BBB00C661C6 /* remove_block_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_block_reduction_opportunity.h; sourceTree = "<group>"; };
- A94A675F22B17BBB00C661C6 /* operand_to_dominating_id_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = operand_to_dominating_id_reduction_opportunity_finder.h; sourceTree = "<group>"; };
- A94A676022B17BBB00C661C6 /* reduction_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = reduction_pass.cpp; sourceTree = "<group>"; };
- A94A676122B17BBB00C661C6 /* operand_to_const_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = operand_to_const_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
- A94A676222B17BBB00C661C6 /* operand_to_const_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = operand_to_const_reduction_opportunity_finder.h; sourceTree = "<group>"; };
- A94A676322B17BBB00C661C6 /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; };
- A94A676422B17BBB00C661C6 /* reduction_util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = reduction_util.cpp; sourceTree = "<group>"; };
- A94A676522B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = structured_loop_to_selection_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
- A94A676622B17BBB00C661C6 /* simple_conditional_branch_to_branch_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = simple_conditional_branch_to_branch_reduction_opportunity.h; sourceTree = "<group>"; };
- A94A676722B17BBB00C661C6 /* remove_function_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_function_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
- A94A676822B17BBB00C661C6 /* remove_instruction_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_instruction_reduction_opportunity.h; sourceTree = "<group>"; };
- A94A676922B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = conditional_branch_to_simple_conditional_branch_reduction_opportunity.h; sourceTree = "<group>"; };
- A94A676A22B17BBB00C661C6 /* simple_conditional_branch_to_branch_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = simple_conditional_branch_to_branch_reduction_opportunity.cpp; sourceTree = "<group>"; };
- A94A676B22B17BBB00C661C6 /* remove_function_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_function_reduction_opportunity.cpp; sourceTree = "<group>"; };
- A94A676C22B17BBB00C661C6 /* remove_opname_instruction_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_opname_instruction_reduction_opportunity_finder.h; sourceTree = "<group>"; };
- A94A676D22B17BBB00C661C6 /* simple_conditional_branch_to_branch_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = simple_conditional_branch_to_branch_opportunity_finder.cpp; sourceTree = "<group>"; };
- A94A676E22B17BBB00C661C6 /* remove_selection_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_selection_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
- A94A676F22B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp; sourceTree = "<group>"; };
- A94A677022B17BBB00C661C6 /* simple_conditional_branch_to_branch_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = simple_conditional_branch_to_branch_opportunity_finder.h; sourceTree = "<group>"; };
- A94A677122B17BBB00C661C6 /* merge_blocks_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = merge_blocks_reduction_opportunity.cpp; sourceTree = "<group>"; };
- A94A677222B17BBB00C661C6 /* change_operand_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = change_operand_reduction_opportunity.cpp; sourceTree = "<group>"; };
- A94A677322B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = structured_loop_to_selection_reduction_opportunity.h; sourceTree = "<group>"; };
- A94A677422B17BBB00C661C6 /* remove_function_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_function_reduction_opportunity.h; sourceTree = "<group>"; };
- A94A677522B17BBB00C661C6 /* change_operand_to_undef_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = change_operand_to_undef_reduction_opportunity.h; sourceTree = "<group>"; };
- A94A677622B17BBB00C661C6 /* remove_unreferenced_instruction_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_unreferenced_instruction_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
- A94A677722B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = structured_loop_to_selection_reduction_opportunity_finder.h; sourceTree = "<group>"; };
- A94A677822B17BBB00C661C6 /* remove_selection_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_selection_reduction_opportunity.h; sourceTree = "<group>"; };
- A94A677922B17BBB00C661C6 /* remove_instruction_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_instruction_reduction_opportunity.cpp; sourceTree = "<group>"; };
- A94A677A22B17BBB00C661C6 /* remove_selection_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_selection_reduction_opportunity_finder.h; sourceTree = "<group>"; };
- A94A677B22B17BBB00C661C6 /* merge_blocks_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = merge_blocks_reduction_opportunity_finder.h; sourceTree = "<group>"; };
- A94A677C22B17BBB00C661C6 /* remove_opname_instruction_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_opname_instruction_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
- A94A677D22B17BBB00C661C6 /* pch_source_reduce.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pch_source_reduce.cpp; sourceTree = "<group>"; };
- A94A677E22B17BBB00C661C6 /* reducer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = reducer.cpp; sourceTree = "<group>"; };
- A94A677F22B17BBB00C661C6 /* operand_to_undef_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = operand_to_undef_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
- A94A678022B17BBB00C661C6 /* remove_function_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_function_reduction_opportunity_finder.h; sourceTree = "<group>"; };
- A94A678122B17BBB00C661C6 /* pch_source_reduce.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pch_source_reduce.h; sourceTree = "<group>"; };
- A94A678222B17BBB00C661C6 /* remove_unreferenced_instruction_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_unreferenced_instruction_reduction_opportunity_finder.h; sourceTree = "<group>"; };
- A94A678322B17BBB00C661C6 /* merge_blocks_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = merge_blocks_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
- A94A678422B17BBB00C661C6 /* reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = reduction_opportunity.cpp; sourceTree = "<group>"; };
- A94A678522B17BBB00C661C6 /* reducer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reducer.h; sourceTree = "<group>"; };
- A94A678622B17BBB00C661C6 /* change_operand_to_undef_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = change_operand_to_undef_reduction_opportunity.cpp; sourceTree = "<group>"; };
- A94A678722B17BBB00C661C6 /* reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reduction_opportunity.h; sourceTree = "<group>"; };
- A94A678822B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = conditional_branch_to_simple_conditional_branch_opportunity_finder.h; sourceTree = "<group>"; };
- A94A678922B17BBB00C661C6 /* operand_to_dominating_id_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = operand_to_dominating_id_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
- A94A678A22B17BBB00C661C6 /* reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reduction_opportunity_finder.h; sourceTree = "<group>"; };
- A94A678B22B17BBB00C661C6 /* change_operand_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = change_operand_reduction_opportunity.h; sourceTree = "<group>"; };
- A94A678C22B17BBB00C661C6 /* remove_block_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_block_reduction_opportunity_finder.h; sourceTree = "<group>"; };
- A94A678D22B17BBB00C661C6 /* remove_block_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_block_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
- A94A678E22B17BBB00C661C6 /* reduction_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reduction_util.h; sourceTree = "<group>"; };
- A94A678F22B17BBB00C661C6 /* merge_blocks_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = merge_blocks_reduction_opportunity.h; sourceTree = "<group>"; };
- A94A679022B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp; sourceTree = "<group>"; };
- A94A679122B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = structured_loop_to_selection_reduction_opportunity.cpp; sourceTree = "<group>"; };
- A94A679222B17BBB00C661C6 /* remove_block_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_block_reduction_opportunity.cpp; sourceTree = "<group>"; };
- A94A679322B17BBB00C661C6 /* reduction_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reduction_pass.h; sourceTree = "<group>"; };
- A94A679422B17BBB00C661C6 /* latest_version_opencl_std_header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = latest_version_opencl_std_header.h; sourceTree = "<group>"; };
- A94A679522B17BBB00C661C6 /* spirv_optimizer_options.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_optimizer_options.cpp; sourceTree = "<group>"; };
- A94A679622B17BBB00C661C6 /* cfa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cfa.h; sourceTree = "<group>"; };
- A94A679722B17BBB00C661C6 /* pch_source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pch_source.h; sourceTree = "<group>"; };
- A94A679822B17BBB00C661C6 /* enum_string_mapping.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = enum_string_mapping.h; sourceTree = "<group>"; };
- A94A679922B17BBB00C661C6 /* spirv_fuzzer_options.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_fuzzer_options.cpp; sourceTree = "<group>"; };
- A94A679A22B17BBB00C661C6 /* spirv_reducer_options.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_reducer_options.h; sourceTree = "<group>"; };
- A94A679B22B17BBB00C661C6 /* spirv_validator_options.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_validator_options.cpp; sourceTree = "<group>"; };
- A94A679C22B17BBB00C661C6 /* extinst.spv-amd-shader-trinary-minmax.grammar.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "extinst.spv-amd-shader-trinary-minmax.grammar.json"; sourceTree = "<group>"; };
- A94A679D22B17BBB00C661C6 /* print.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = print.cpp; sourceTree = "<group>"; };
- A94A679E22B17BBB00C661C6 /* spirv_definition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_definition.h; sourceTree = "<group>"; };
- A94A679F22B17BBB00C661C6 /* operand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = operand.h; sourceTree = "<group>"; };
- A94A67A022B17BBB00C661C6 /* spirv_endian.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_endian.cpp; sourceTree = "<group>"; };
- A94A67A122B17BBB00C661C6 /* macro.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = macro.h; sourceTree = "<group>"; };
- A94A67A222B17BBB00C661C6 /* spirv_constant.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_constant.h; sourceTree = "<group>"; };
- A94A67A322B17BBB00C661C6 /* extinst.spv-amd-gcn-shader.grammar.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "extinst.spv-amd-gcn-shader.grammar.json"; sourceTree = "<group>"; };
- A94A67A422B17BBB00C661C6 /* binary.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = binary.cpp; sourceTree = "<group>"; };
- A94A67A522B17BBB00C661C6 /* spirv_validator_options.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_validator_options.h; sourceTree = "<group>"; };
- A94A67A622B17BBB00C661C6 /* enum_string_mapping.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = enum_string_mapping.cpp; sourceTree = "<group>"; };
- A94A67A722B17BBB00C661C6 /* text_handler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = text_handler.h; sourceTree = "<group>"; };
- A94A67A822B17BBB00C661C6 /* parsed_operand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = parsed_operand.h; sourceTree = "<group>"; };
- A94A67A922B17BBB00C661C6 /* name_mapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = name_mapper.h; sourceTree = "<group>"; };
- A94A67AA22B17BBB00C661C6 /* spirv_reducer_options.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_reducer_options.cpp; sourceTree = "<group>"; };
- A94A67AB22B17BBB00C661C6 /* parsed_operand.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = parsed_operand.cpp; sourceTree = "<group>"; };
- A94A67AC22B17BBB00C661C6 /* diagnostic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = diagnostic.h; sourceTree = "<group>"; };
- A94A67AD22B17BBB00C661C6 /* spirv_endian.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_endian.h; sourceTree = "<group>"; };
- A94A67AE22B17BBB00C661C6 /* name_mapper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = name_mapper.cpp; sourceTree = "<group>"; };
- A94A67AF22B17BBB00C661C6 /* extinst.debuginfo.grammar.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = extinst.debuginfo.grammar.json; sourceTree = "<group>"; };
- A94A67B122B17BBB00C661C6 /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; };
- A94A67B222B17BBB00C661C6 /* linker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = linker.cpp; sourceTree = "<group>"; };
- A94A67B322B17BBB00C661C6 /* software_version.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = software_version.cpp; sourceTree = "<group>"; };
- A94A67B422B17BBB00C661C6 /* opcode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = opcode.cpp; sourceTree = "<group>"; };
- A94A67B522B17BBB00C661C6 /* print.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = print.h; sourceTree = "<group>"; };
- A94A67B622B17BBB00C661C6 /* ext_inst.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ext_inst.cpp; sourceTree = "<group>"; };
- A94A67B722B17BBB00C661C6 /* disassemble.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = disassemble.h; sourceTree = "<group>"; };
- A94A67B922B17BBB00C661C6 /* optimizer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = optimizer.cpp; sourceTree = "<group>"; };
- A94A67BA22B17BBB00C661C6 /* if_conversion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = if_conversion.h; sourceTree = "<group>"; };
- A94A67BB22B17BBB00C661C6 /* register_pressure.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = register_pressure.cpp; sourceTree = "<group>"; };
- A94A67BC22B17BBB00C661C6 /* loop_utils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_utils.cpp; sourceTree = "<group>"; };
- A94A67BD22B17BBB00C661C6 /* merge_return_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = merge_return_pass.h; sourceTree = "<group>"; };
- A94A67BE22B17BBB00C661C6 /* inline_opaque_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = inline_opaque_pass.h; sourceTree = "<group>"; };
- A94A67BF22B17BBB00C661C6 /* loop_fusion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_fusion.h; sourceTree = "<group>"; };
- A94A67C022B17BBB00C661C6 /* combine_access_chains.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = combine_access_chains.cpp; sourceTree = "<group>"; };
- A94A67C122B17BBB00C661C6 /* build_module.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = build_module.cpp; sourceTree = "<group>"; };
- A94A67C222B17BBB00C661C6 /* composite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = composite.h; sourceTree = "<group>"; };
- A94A67C322B17BBB00C661C6 /* compact_ids_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = compact_ids_pass.h; sourceTree = "<group>"; };
- A94A67C422B17BBB00C661C6 /* register_pressure.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = register_pressure.h; sourceTree = "<group>"; };
- A94A67C522B17BBB00C661C6 /* tree_iterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tree_iterator.h; sourceTree = "<group>"; };
- A94A67C622B17BBB00C661C6 /* strip_atomic_counter_memory_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = strip_atomic_counter_memory_pass.h; sourceTree = "<group>"; };
- A94A67C722B17BBB00C661C6 /* legalize_vector_shuffle_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = legalize_vector_shuffle_pass.h; sourceTree = "<group>"; };
- A94A67C822B17BBB00C661C6 /* local_single_store_elim_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = local_single_store_elim_pass.h; sourceTree = "<group>"; };
- A94A67C922B17BBB00C661C6 /* reduce_load_size.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reduce_load_size.h; sourceTree = "<group>"; };
- A94A67CA22B17BBB00C661C6 /* code_sink.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = code_sink.cpp; sourceTree = "<group>"; };
- A94A67CB22B17BBB00C661C6 /* types.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = types.cpp; sourceTree = "<group>"; };
- A94A67CC22B17BBB00C661C6 /* scalar_analysis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scalar_analysis.h; sourceTree = "<group>"; };
- A94A67CD22B17BBB00C661C6 /* strip_debug_info_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = strip_debug_info_pass.h; sourceTree = "<group>"; };
- A94A67CE22B17BBB00C661C6 /* cfg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cfg.cpp; sourceTree = "<group>"; };
- A94A67CF22B17BBB00C661C6 /* strip_atomic_counter_memory_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = strip_atomic_counter_memory_pass.cpp; sourceTree = "<group>"; };
- A94A67D022B17BBB00C661C6 /* decoration_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = decoration_manager.cpp; sourceTree = "<group>"; };
- A94A67D122B17BBB00C661C6 /* local_single_block_elim_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = local_single_block_elim_pass.cpp; sourceTree = "<group>"; };
- A94A67D222B17BBB00C661C6 /* freeze_spec_constant_value_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = freeze_spec_constant_value_pass.cpp; sourceTree = "<group>"; };
- A94A67D322B17BBB00C661C6 /* replace_invalid_opc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = replace_invalid_opc.h; sourceTree = "<group>"; };
- A94A67D422B17BBB00C661C6 /* local_access_chain_convert_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = local_access_chain_convert_pass.h; sourceTree = "<group>"; };
- A94A67D522B17BBB00C661C6 /* inst_bindless_check_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = inst_bindless_check_pass.cpp; sourceTree = "<group>"; };
- A94A67D622B17BBB00C661C6 /* local_redundancy_elimination.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = local_redundancy_elimination.cpp; sourceTree = "<group>"; };
- A94A67D722B17BBB00C661C6 /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; };
- A94A67D822B17BBB00C661C6 /* instrument_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = instrument_pass.cpp; sourceTree = "<group>"; };
- A94A67D922B17BBB00C661C6 /* propagator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = propagator.h; sourceTree = "<group>"; };
- A94A67DA22B17BBB00C661C6 /* instruction_list.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = instruction_list.h; sourceTree = "<group>"; };
- A94A67DB22B17BBB00C661C6 /* feature_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = feature_manager.cpp; sourceTree = "<group>"; };
- A94A67DC22B17BBB00C661C6 /* pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pass.cpp; sourceTree = "<group>"; };
- A94A67DD22B17BBB00C661C6 /* loop_fission.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_fission.cpp; sourceTree = "<group>"; };
- A94A67DE22B17BBB00C661C6 /* dominator_tree.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dominator_tree.cpp; sourceTree = "<group>"; };
- A94A67DF22B17BBB00C661C6 /* merge_return_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = merge_return_pass.cpp; sourceTree = "<group>"; };
- A94A67E022B17BBB00C661C6 /* ir_context.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ir_context.h; sourceTree = "<group>"; };
- A94A67E122B17BBB00C661C6 /* eliminate_dead_constant_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = eliminate_dead_constant_pass.cpp; sourceTree = "<group>"; };
- A94A67E222B17BBB00C661C6 /* cfg_cleanup_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cfg_cleanup_pass.cpp; sourceTree = "<group>"; };
- A94A67E322B17BBB00C661C6 /* const_folding_rules.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = const_folding_rules.cpp; sourceTree = "<group>"; };
- A94A67E422B17BBB00C661C6 /* loop_unroller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_unroller.h; sourceTree = "<group>"; };
- A94A67E522B17BBB00C661C6 /* strip_debug_info_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = strip_debug_info_pass.cpp; sourceTree = "<group>"; };
- A94A67E622B17BBB00C661C6 /* ssa_rewrite_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ssa_rewrite_pass.cpp; sourceTree = "<group>"; };
- A94A67E722B17BBB00C661C6 /* loop_dependence.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_dependence.cpp; sourceTree = "<group>"; };
- A94A67E822B17BBB00C661C6 /* unify_const_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = unify_const_pass.h; sourceTree = "<group>"; };
- A94A67E922B17BBB00C661C6 /* ir_loader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ir_loader.h; sourceTree = "<group>"; };
- A94A67EA22B17BBB00C661C6 /* types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = types.h; sourceTree = "<group>"; };
- A94A67EB22B17BBB00C661C6 /* fold_spec_constant_op_and_composite_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fold_spec_constant_op_and_composite_pass.h; sourceTree = "<group>"; };
- A94A67EC22B17BBB00C661C6 /* mem_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mem_pass.cpp; sourceTree = "<group>"; };
- A94A67ED22B17BBB00C661C6 /* basic_block.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = basic_block.h; sourceTree = "<group>"; };
- A94A67EE22B17BBB00C661C6 /* remove_duplicates_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_duplicates_pass.cpp; sourceTree = "<group>"; };
- A94A67EF22B17BBB00C661C6 /* dead_variable_elimination.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dead_variable_elimination.cpp; sourceTree = "<group>"; };
- A94A67F022B17BBB00C661C6 /* block_merge_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = block_merge_pass.h; sourceTree = "<group>"; };
- A94A67F122B17BBB00C661C6 /* module.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = module.cpp; sourceTree = "<group>"; };
- A94A67F222B17BBB00C661C6 /* fold_spec_constant_op_and_composite_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fold_spec_constant_op_and_composite_pass.cpp; sourceTree = "<group>"; };
- A94A67F322B17BBB00C661C6 /* loop_unswitch_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_unswitch_pass.cpp; sourceTree = "<group>"; };
- A94A67F422B17BBB00C661C6 /* unify_const_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = unify_const_pass.cpp; sourceTree = "<group>"; };
- A94A67F522B17BBB00C661C6 /* type_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = type_manager.cpp; sourceTree = "<group>"; };
- A94A67F622B17BBB00C661C6 /* generate_webgpu_initializers_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = generate_webgpu_initializers_pass.cpp; sourceTree = "<group>"; };
- A94A67F722B17BBB00C661C6 /* private_to_local_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = private_to_local_pass.h; sourceTree = "<group>"; };
- A94A67F822B17BBB00C661C6 /* inline_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = inline_pass.cpp; sourceTree = "<group>"; };
- A94A67F922B17BBB00C661C6 /* def_use_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = def_use_manager.h; sourceTree = "<group>"; };
- A94A67FA22B17BBB00C661C6 /* ir_loader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ir_loader.cpp; sourceTree = "<group>"; };
- A94A67FB22B17BBB00C661C6 /* cfg_cleanup_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cfg_cleanup_pass.h; sourceTree = "<group>"; };
- A94A67FC22B17BBB00C661C6 /* licm_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = licm_pass.cpp; sourceTree = "<group>"; };
- A94A67FD22B17BBB00C661C6 /* eliminate_dead_functions_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = eliminate_dead_functions_pass.cpp; sourceTree = "<group>"; };
- A94A67FE22B17BBB00C661C6 /* local_redundancy_elimination.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = local_redundancy_elimination.h; sourceTree = "<group>"; };
- A94A67FF22B17BBB00C661C6 /* split_invalid_unreachable_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = split_invalid_unreachable_pass.cpp; sourceTree = "<group>"; };
- A94A680022B17BBB00C661C6 /* loop_peeling.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_peeling.h; sourceTree = "<group>"; };
- A94A680122B17BBB00C661C6 /* vector_dce.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vector_dce.cpp; sourceTree = "<group>"; };
- A94A680222B17BBB00C661C6 /* block_merge_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = block_merge_util.h; sourceTree = "<group>"; };
- A94A680322B17BBB00C661C6 /* loop_unroller.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_unroller.cpp; sourceTree = "<group>"; };
- A94A680422B17BBB00C661C6 /* constants.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = constants.cpp; sourceTree = "<group>"; };
- A94A680522B17BBB00C661C6 /* loop_fusion_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_fusion_pass.h; sourceTree = "<group>"; };
- A94A680622B17BBB00C661C6 /* struct_cfg_analysis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = struct_cfg_analysis.h; sourceTree = "<group>"; };
- A94A680722B17BBB00C661C6 /* common_uniform_elim_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = common_uniform_elim_pass.cpp; sourceTree = "<group>"; };
- A94A680822B17BBB00C661C6 /* def_use_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = def_use_manager.cpp; sourceTree = "<group>"; };
- A94A680922B17BBB00C661C6 /* strip_reflect_info_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = strip_reflect_info_pass.cpp; sourceTree = "<group>"; };
- A94A680A22B17BBB00C661C6 /* decoration_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = decoration_manager.h; sourceTree = "<group>"; };
- A94A680B22B17BBB00C661C6 /* ccp_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ccp_pass.cpp; sourceTree = "<group>"; };
- A94A680C22B17BBB00C661C6 /* process_lines_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = process_lines_pass.h; sourceTree = "<group>"; };
- A94A680D22B17BBB00C661C6 /* local_single_block_elim_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = local_single_block_elim_pass.h; sourceTree = "<group>"; };
- A94A680E22B17BBB00C661C6 /* pch_source_opt.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pch_source_opt.cpp; sourceTree = "<group>"; };
- A94A680F22B17BBB00C661C6 /* strength_reduction_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = strength_reduction_pass.h; sourceTree = "<group>"; };
- A94A681022B17BBB00C661C6 /* aggressive_dead_code_elim_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aggressive_dead_code_elim_pass.cpp; sourceTree = "<group>"; };
- A94A681122B17BBB00C661C6 /* eliminate_dead_functions_util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = eliminate_dead_functions_util.cpp; sourceTree = "<group>"; };
- A94A681222B17BBB00C661C6 /* simplification_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = simplification_pass.cpp; sourceTree = "<group>"; };
- A94A681322B17BBB00C661C6 /* dead_branch_elim_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dead_branch_elim_pass.cpp; sourceTree = "<group>"; };
- A94A681422B17BBB00C661C6 /* flatten_decoration_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = flatten_decoration_pass.cpp; sourceTree = "<group>"; };
- A94A681522B17BBB00C661C6 /* dead_insert_elim_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dead_insert_elim_pass.h; sourceTree = "<group>"; };
- A94A681622B17BBB00C661C6 /* folding_rules.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = folding_rules.cpp; sourceTree = "<group>"; };
- A94A681722B17BBB00C661C6 /* freeze_spec_constant_value_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = freeze_spec_constant_value_pass.h; sourceTree = "<group>"; };
- A94A681822B17BBB00C661C6 /* ir_context.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ir_context.cpp; sourceTree = "<group>"; };
- A94A681922B17BBB00C661C6 /* instrument_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = instrument_pass.h; sourceTree = "<group>"; };
- A94A681A22B17BBB00C661C6 /* mem_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mem_pass.h; sourceTree = "<group>"; };
- A94A681B22B17BBB00C661C6 /* loop_descriptor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_descriptor.cpp; sourceTree = "<group>"; };
- A94A681C22B17BBB00C661C6 /* local_ssa_elim_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = local_ssa_elim_pass.cpp; sourceTree = "<group>"; };
- A94A681D22B17BBB00C661C6 /* eliminate_dead_members_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eliminate_dead_members_pass.h; sourceTree = "<group>"; };
- A94A681E22B17BBB00C661C6 /* function.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = function.cpp; sourceTree = "<group>"; };
- A94A681F22B17BBB00C661C6 /* instruction_list.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = instruction_list.cpp; sourceTree = "<group>"; };
- A94A682022B17BBB00C661C6 /* composite.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = composite.cpp; sourceTree = "<group>"; };
- A94A682122B17BBB00C661C6 /* process_lines_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = process_lines_pass.cpp; sourceTree = "<group>"; };
- A94A682222B17BBB00C661C6 /* inline_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = inline_pass.h; sourceTree = "<group>"; };
- A94A682322B17BBB00C661C6 /* loop_dependence.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_dependence.h; sourceTree = "<group>"; };
- A94A682422B17BBB00C661C6 /* value_number_table.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = value_number_table.h; sourceTree = "<group>"; };
- A94A682522B17BBB00C661C6 /* flatten_decoration_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = flatten_decoration_pass.h; sourceTree = "<group>"; };
- A94A682622B17BBB00C661C6 /* if_conversion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = if_conversion.cpp; sourceTree = "<group>"; };
- A94A682722B17BBB00C661C6 /* inline_exhaustive_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = inline_exhaustive_pass.h; sourceTree = "<group>"; };
- A94A682822B17BBB00C661C6 /* constants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = constants.h; sourceTree = "<group>"; };
- A94A682922B17BBB00C661C6 /* eliminate_dead_members_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = eliminate_dead_members_pass.cpp; sourceTree = "<group>"; };
- A94A682A22B17BBB00C661C6 /* strength_reduction_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = strength_reduction_pass.cpp; sourceTree = "<group>"; };
- A94A682B22B17BBB00C661C6 /* block_merge_util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = block_merge_util.cpp; sourceTree = "<group>"; };
- A94A682C22B17BBB00C661C6 /* upgrade_memory_model.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = upgrade_memory_model.h; sourceTree = "<group>"; };
- A94A682D22B17BBB00C661C6 /* copy_prop_arrays.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = copy_prop_arrays.cpp; sourceTree = "<group>"; };
- A94A682E22B17BBB00C661C6 /* pass_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pass_manager.cpp; sourceTree = "<group>"; };
- A94A682F22B17BBB00C661C6 /* inline_exhaustive_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = inline_exhaustive_pass.cpp; sourceTree = "<group>"; };
- A94A683022B17BBB00C661C6 /* loop_fission.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_fission.h; sourceTree = "<group>"; };
- A94A683122B17BBB00C661C6 /* workaround1209.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = workaround1209.h; sourceTree = "<group>"; };
- A94A683222B17BBB00C661C6 /* loop_fusion_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_fusion_pass.cpp; sourceTree = "<group>"; };
- A94A683322B17BBB00C661C6 /* log.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = log.h; sourceTree = "<group>"; };
- A94A683422B17BBB00C661C6 /* split_invalid_unreachable_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = split_invalid_unreachable_pass.h; sourceTree = "<group>"; };
- A94A683522B17BBB00C661C6 /* copy_prop_arrays.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = copy_prop_arrays.h; sourceTree = "<group>"; };
- A94A683622B17BBB00C661C6 /* eliminate_dead_constant_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eliminate_dead_constant_pass.h; sourceTree = "<group>"; };
- A94A683722B17BBB00C661C6 /* dead_insert_elim_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dead_insert_elim_pass.cpp; sourceTree = "<group>"; };
- A94A683822B17BBB00C661C6 /* ssa_rewrite_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ssa_rewrite_pass.h; sourceTree = "<group>"; };
- A94A683922B17BBB00C661C6 /* scalar_analysis.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scalar_analysis.cpp; sourceTree = "<group>"; };
- A94A683A22B17BBB00C661C6 /* dead_variable_elimination.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dead_variable_elimination.h; sourceTree = "<group>"; };
- A94A683B22B17BBB00C661C6 /* block_merge_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = block_merge_pass.cpp; sourceTree = "<group>"; };
- A94A683C22B17BBB00C661C6 /* dominator_analysis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dominator_analysis.h; sourceTree = "<group>"; };
- A94A683D22B17BBB00C661C6 /* pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pass.h; sourceTree = "<group>"; };
- A94A683E22B17BBB00C661C6 /* folding_rules.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = folding_rules.h; sourceTree = "<group>"; };
- A94A683F22B17BBB00C661C6 /* eliminate_dead_functions_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eliminate_dead_functions_pass.h; sourceTree = "<group>"; };
- A94A684022B17BBB00C661C6 /* common_uniform_elim_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = common_uniform_elim_pass.h; sourceTree = "<group>"; };
- A94A684122B17BBB00C661C6 /* eliminate_dead_functions_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eliminate_dead_functions_util.h; sourceTree = "<group>"; };
- A94A684222B17BBB00C661C6 /* fold.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fold.h; sourceTree = "<group>"; };
- A94A684322B17BBB00C661C6 /* local_single_store_elim_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = local_single_store_elim_pass.cpp; sourceTree = "<group>"; };
- A94A684422B17BBB00C661C6 /* dead_branch_elim_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dead_branch_elim_pass.h; sourceTree = "<group>"; };
- A94A684522B17BBB00C661C6 /* private_to_local_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = private_to_local_pass.cpp; sourceTree = "<group>"; };
- A94A684622B17BBB00C661C6 /* scalar_analysis_nodes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scalar_analysis_nodes.h; sourceTree = "<group>"; };
- A94A684722B17BBB00C661C6 /* propagator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = propagator.cpp; sourceTree = "<group>"; };
- A94A684822B17BBB00C661C6 /* fix_storage_class.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fix_storage_class.h; sourceTree = "<group>"; };
- A94A684922B17BBB00C661C6 /* loop_dependence_helpers.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_dependence_helpers.cpp; sourceTree = "<group>"; };
- A94A684A22B17BBB00C661C6 /* set_spec_constant_default_value_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = set_spec_constant_default_value_pass.cpp; sourceTree = "<group>"; };
- A94A684B22B17BBB00C661C6 /* passes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = passes.h; sourceTree = "<group>"; };
- A94A684C22B17BBB00C661C6 /* fold.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fold.cpp; sourceTree = "<group>"; };
- A94A684D22B17BBB00C661C6 /* strip_reflect_info_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = strip_reflect_info_pass.h; sourceTree = "<group>"; };
- A94A684E22B17BBB00C661C6 /* scalar_replacement_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scalar_replacement_pass.cpp; sourceTree = "<group>"; };
- A94A684F22B17BBB00C661C6 /* simplification_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = simplification_pass.h; sourceTree = "<group>"; };
- A94A685022B17BBB00C661C6 /* remove_duplicates_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_duplicates_pass.h; sourceTree = "<group>"; };
- A94A685122B17BBB00C661C6 /* redundancy_elimination.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = redundancy_elimination.cpp; sourceTree = "<group>"; };
- A94A685222B17BBB00C661C6 /* reflect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reflect.h; sourceTree = "<group>"; };
- A94A685322B17BBB00C661C6 /* workaround1209.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = workaround1209.cpp; sourceTree = "<group>"; };
- A94A685422B17BBB00C661C6 /* null_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = null_pass.h; sourceTree = "<group>"; };
- A94A685522B17BBB00C661C6 /* const_folding_rules.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = const_folding_rules.h; sourceTree = "<group>"; };
- A94A685622B17BBB00C661C6 /* scalar_replacement_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scalar_replacement_pass.h; sourceTree = "<group>"; };
- A94A685722B17BBB00C661C6 /* instruction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = instruction.cpp; sourceTree = "<group>"; };
- A94A685822B17BBB00C661C6 /* pch_source_opt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pch_source_opt.h; sourceTree = "<group>"; };
- A94A685922B17BBB00C661C6 /* reduce_load_size.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = reduce_load_size.cpp; sourceTree = "<group>"; };
- A94A685A22B17BBB00C661C6 /* redundancy_elimination.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = redundancy_elimination.h; sourceTree = "<group>"; };
- A94A685B22B17BBB00C661C6 /* fix_storage_class.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fix_storage_class.cpp; sourceTree = "<group>"; };
- A94A685C22B17BBB00C661C6 /* value_number_table.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = value_number_table.cpp; sourceTree = "<group>"; };
- A94A685D22B17BBB00C661C6 /* local_ssa_elim_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = local_ssa_elim_pass.h; sourceTree = "<group>"; };
- A94A685E22B17BBB00C661C6 /* inline_opaque_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = inline_opaque_pass.cpp; sourceTree = "<group>"; };
- A94A685F22B17BBB00C661C6 /* replace_invalid_opc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = replace_invalid_opc.cpp; sourceTree = "<group>"; };
- A94A686022B17BBB00C661C6 /* loop_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_utils.h; sourceTree = "<group>"; };
- A94A686122B17BBB00C661C6 /* module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = module.h; sourceTree = "<group>"; };
- A94A686222B17BBB00C661C6 /* dominator_analysis.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dominator_analysis.cpp; sourceTree = "<group>"; };
- A94A686322B17BBB00C661C6 /* decompose_initialized_variables_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = decompose_initialized_variables_pass.cpp; sourceTree = "<group>"; };
- A94A686422B17BBB00C661C6 /* ir_builder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ir_builder.h; sourceTree = "<group>"; };
- A94A686522B17BBB00C661C6 /* loop_unswitch_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_unswitch_pass.h; sourceTree = "<group>"; };
- A94A686622B17BBB00C661C6 /* cfg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cfg.h; sourceTree = "<group>"; };
- A94A686722B17BBB00C661C6 /* code_sink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = code_sink.h; sourceTree = "<group>"; };
- A94A686822B17BBB00C661C6 /* loop_descriptor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_descriptor.h; sourceTree = "<group>"; };
- A94A686922B17BBB00C661C6 /* generate_webgpu_initializers_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = generate_webgpu_initializers_pass.h; sourceTree = "<group>"; };
- A94A686A22B17BBB00C661C6 /* instruction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = instruction.h; sourceTree = "<group>"; };
- A94A686B22B17BBB00C661C6 /* aggressive_dead_code_elim_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aggressive_dead_code_elim_pass.h; sourceTree = "<group>"; };
- A94A686C22B17BBB00C661C6 /* struct_cfg_analysis.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = struct_cfg_analysis.cpp; sourceTree = "<group>"; };
- A94A686D22B17BBB00C661C6 /* vector_dce.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vector_dce.h; sourceTree = "<group>"; };
- A94A686E22B17BBB00C661C6 /* combine_access_chains.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = combine_access_chains.h; sourceTree = "<group>"; };
- A94A686F22B17BBB00C661C6 /* pass_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pass_manager.h; sourceTree = "<group>"; };
- A94A687022B17BBB00C661C6 /* local_access_chain_convert_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = local_access_chain_convert_pass.cpp; sourceTree = "<group>"; };
- A94A687122B17BBB00C661C6 /* basic_block.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = basic_block.cpp; sourceTree = "<group>"; };
- A94A687222B17BBB00C661C6 /* iterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iterator.h; sourceTree = "<group>"; };
- A94A687322B17BBB00C661C6 /* licm_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = licm_pass.h; sourceTree = "<group>"; };
- A94A687422B17BBB00C661C6 /* build_module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = build_module.h; sourceTree = "<group>"; };
- A94A687522B17BBB00C661C6 /* ccp_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ccp_pass.h; sourceTree = "<group>"; };
- A94A687622B17BBB00C661C6 /* decompose_initialized_variables_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = decompose_initialized_variables_pass.h; sourceTree = "<group>"; };
- A94A687722B17BBB00C661C6 /* function.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = function.h; sourceTree = "<group>"; };
- A94A687822B17BBB00C661C6 /* loop_fusion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_fusion.cpp; sourceTree = "<group>"; };
- A94A687922B17BBB00C661C6 /* upgrade_memory_model.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = upgrade_memory_model.cpp; sourceTree = "<group>"; };
- A94A687A22B17BBB00C661C6 /* feature_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = feature_manager.h; sourceTree = "<group>"; };
- A94A687B22B17BBB00C661C6 /* inst_bindless_check_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = inst_bindless_check_pass.h; sourceTree = "<group>"; };
- A94A687C22B17BBB00C661C6 /* scalar_analysis_simplification.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scalar_analysis_simplification.cpp; sourceTree = "<group>"; };
- A94A687D22B17BBB00C661C6 /* set_spec_constant_default_value_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = set_spec_constant_default_value_pass.h; sourceTree = "<group>"; };
- A94A687E22B17BBB00C661C6 /* dominator_tree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dominator_tree.h; sourceTree = "<group>"; };
- A94A687F22B17BBB00C661C6 /* legalize_vector_shuffle_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = legalize_vector_shuffle_pass.cpp; sourceTree = "<group>"; };
- A94A688022B17BBB00C661C6 /* type_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = type_manager.h; sourceTree = "<group>"; };
- A94A688122B17BBB00C661C6 /* compact_ids_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = compact_ids_pass.cpp; sourceTree = "<group>"; };
- A94A688222B17BBB00C661C6 /* loop_peeling.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_peeling.cpp; sourceTree = "<group>"; };
- A94A688322B17BBB00C661C6 /* table.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = table.h; sourceTree = "<group>"; };
- A94A68AF22B17BBB00C661C6 /* ext_inst.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ext_inst.h; sourceTree = "<group>"; };
- A94A68B022B17BBB00C661C6 /* diagnostic.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = diagnostic.cpp; sourceTree = "<group>"; };
- A94A68B122B17BBB00C661C6 /* latest_version_spirv_header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = latest_version_spirv_header.h; sourceTree = "<group>"; };
- A94A68B222B17BBB00C661C6 /* libspirv.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = libspirv.cpp; sourceTree = "<group>"; };
- A94A68B322B17BBB00C661C6 /* instruction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = instruction.h; sourceTree = "<group>"; };
- A94A68B422B17BBB00C661C6 /* spirv_optimizer_options.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_optimizer_options.h; sourceTree = "<group>"; };
- A94A68B522B17BBB00C661C6 /* opcode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = opcode.h; sourceTree = "<group>"; };
- A94A68B622B17BBB00C661C6 /* operand.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = operand.cpp; sourceTree = "<group>"; };
- A94A68B722B17BBB00C661C6 /* latest_version_glsl_std_450_header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = latest_version_glsl_std_450_header.h; sourceTree = "<group>"; };
- A94A68B822B17BBB00C661C6 /* extensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = extensions.h; sourceTree = "<group>"; };
- A94A68B922B17BBB00C661C6 /* disassemble.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = disassemble.cpp; sourceTree = "<group>"; };
- A94A68BA22B17BBB00C661C6 /* binary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = binary.h; sourceTree = "<group>"; };
- A94A68BB22B17BBB00C661C6 /* text_handler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = text_handler.cpp; sourceTree = "<group>"; };
- A94A68BD22B17BBB00C661C6 /* validate_annotation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_annotation.cpp; sourceTree = "<group>"; };
- A94A68BE22B17BBB00C661C6 /* validate_misc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_misc.cpp; sourceTree = "<group>"; };
- A94A68BF22B17BBB00C661C6 /* validate_cfg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_cfg.cpp; sourceTree = "<group>"; };
- A94A68C022B17BBB00C661C6 /* validate_capability.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_capability.cpp; sourceTree = "<group>"; };
- A94A68C122B17BBB00C661C6 /* construct.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = construct.h; sourceTree = "<group>"; };
- A94A68C222B17BBB00C661C6 /* validate_barriers.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_barriers.cpp; sourceTree = "<group>"; };
- A94A68C322B17BBB00C661C6 /* validate_non_uniform.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_non_uniform.cpp; sourceTree = "<group>"; };
- A94A68C422B17BBB00C661C6 /* validate_scopes.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_scopes.cpp; sourceTree = "<group>"; };
- A94A68C522B17BBB00C661C6 /* validate_atomics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_atomics.cpp; sourceTree = "<group>"; };
- A94A68C622B17BBB00C661C6 /* basic_block.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = basic_block.h; sourceTree = "<group>"; };
- A94A68C722B17BBB00C661C6 /* validate_instruction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_instruction.cpp; sourceTree = "<group>"; };
- A94A68C822B17BBB00C661C6 /* validate_decorations.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_decorations.cpp; sourceTree = "<group>"; };
- A94A68C922B17BBB00C661C6 /* validate_debug.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_debug.cpp; sourceTree = "<group>"; };
- A94A68CA22B17BBB00C661C6 /* validate_builtins.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_builtins.cpp; sourceTree = "<group>"; };
- A94A68CB22B17BBB00C661C6 /* validate_interfaces.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_interfaces.cpp; sourceTree = "<group>"; };
- A94A68CC22B17BBB00C661C6 /* validate.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate.cpp; sourceTree = "<group>"; };
- A94A68CD22B17BBB00C661C6 /* validation_state.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = validation_state.h; sourceTree = "<group>"; };
- A94A68CE22B17BBB00C661C6 /* validate_constants.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_constants.cpp; sourceTree = "<group>"; };
- A94A68CF22B17BBB00C661C6 /* validate_bitwise.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_bitwise.cpp; sourceTree = "<group>"; };
- A94A68D022B17BBB00C661C6 /* validate_extensions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_extensions.cpp; sourceTree = "<group>"; };
- A94A68D122B17BBB00C661C6 /* construct.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = construct.cpp; sourceTree = "<group>"; };
- A94A68D222B17BBB00C661C6 /* function.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = function.cpp; sourceTree = "<group>"; };
- A94A68D322B17BBB00C661C6 /* validate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = validate.h; sourceTree = "<group>"; };
- A94A68D422B17BBB00C661C6 /* validate_adjacency.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_adjacency.cpp; sourceTree = "<group>"; };
- A94A68D522B17BBB00C661C6 /* validate_conversion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_conversion.cpp; sourceTree = "<group>"; };
- A94A68D622B17BBB00C661C6 /* validate_datarules.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_datarules.cpp; sourceTree = "<group>"; };
- A94A68D722B17BBB00C661C6 /* validate_scopes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = validate_scopes.h; sourceTree = "<group>"; };
- A94A68D822B17BBB00C661C6 /* validate_id.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_id.cpp; sourceTree = "<group>"; };
- A94A68D922B17BBB00C661C6 /* validate_memory_semantics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = validate_memory_semantics.h; sourceTree = "<group>"; };
- A94A68DA22B17BBB00C661C6 /* validate_arithmetics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_arithmetics.cpp; sourceTree = "<group>"; };
- A94A68DB22B17BBB00C661C6 /* validate_mode_setting.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_mode_setting.cpp; sourceTree = "<group>"; };
- A94A68DC22B17BBB00C661C6 /* validate_memory_semantics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_memory_semantics.cpp; sourceTree = "<group>"; };
- A94A68DD22B17BBB00C661C6 /* validate_logicals.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_logicals.cpp; sourceTree = "<group>"; };
- A94A68DE22B17BBB00C661C6 /* validate_derivatives.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_derivatives.cpp; sourceTree = "<group>"; };
- A94A68DF22B17BBB00C661C6 /* validate_memory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_memory.cpp; sourceTree = "<group>"; };
- A94A68E022B17BBB00C661C6 /* validate_image.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_image.cpp; sourceTree = "<group>"; };
- A94A68E122B17BBB00C661C6 /* validate_literals.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_literals.cpp; sourceTree = "<group>"; };
- A94A68E222B17BBB00C661C6 /* instruction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = instruction.cpp; sourceTree = "<group>"; };
- A94A68E322B17BBB00C661C6 /* validate_type.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_type.cpp; sourceTree = "<group>"; };
- A94A68E422B17BBB00C661C6 /* instruction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = instruction.h; sourceTree = "<group>"; };
- A94A68E522B17BBB00C661C6 /* validate_execution_limitations.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_execution_limitations.cpp; sourceTree = "<group>"; };
- A94A68E622B17BBB00C661C6 /* validate_layout.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_layout.cpp; sourceTree = "<group>"; };
- A94A68E722B17BBB00C661C6 /* basic_block.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = basic_block.cpp; sourceTree = "<group>"; };
- A94A68E822B17BBB00C661C6 /* validate_function.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_function.cpp; sourceTree = "<group>"; };
- A94A68E922B17BBB00C661C6 /* function.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = function.h; sourceTree = "<group>"; };
- A94A68EA22B17BBB00C661C6 /* validate_composites.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_composites.cpp; sourceTree = "<group>"; };
- A94A68EB22B17BBB00C661C6 /* validation_state.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validation_state.cpp; sourceTree = "<group>"; };
- A94A68EC22B17BBB00C661C6 /* validate_primitives.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_primitives.cpp; sourceTree = "<group>"; };
- A94A68ED22B17BBB00C661C6 /* decoration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = decoration.h; sourceTree = "<group>"; };
A9679AAC21D269D900856BF7 /* package_ext_libs_macos.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = package_ext_libs_macos.sh; sourceTree = "<group>"; };
A9679AAD21D269D900856BF7 /* package_ext_libs_ios.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = package_ext_libs_ios.sh; sourceTree = "<group>"; };
A9679AAE21D269D900856BF7 /* package_ext_libs.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = package_ext_libs.sh; sourceTree = "<group>"; };
@@ -1581,6 +1195,389 @@
A976290E21CC60BC00B52A68 /* spirv_cross_parsed_ir.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_cross_parsed_ir.cpp; sourceTree = "<group>"; };
A9C2104521D14FD7006BA2D3 /* fetchDependencies */ = {isa = PBXFileReference; lastKnownFileType = text; path = fetchDependencies; sourceTree = "<group>"; };
A9C2104721D15843006BA2D3 /* ExternalRevisions */ = {isa = PBXFileReference; lastKnownFileType = folder; path = ExternalRevisions; sourceTree = "<group>"; };
+ A9C2EF7822E7833C001763CE /* spirv_target_env.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_target_env.cpp; sourceTree = "<group>"; };
+ A9C2EF7922E7833C001763CE /* extinst.spv-amd-shader-explicit-vertex-parameter.grammar.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "extinst.spv-amd-shader-explicit-vertex-parameter.grammar.json"; sourceTree = "<group>"; };
+ A9C2EF7A22E7833C001763CE /* spirv_fuzzer_options.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_fuzzer_options.h; sourceTree = "<group>"; };
+ A9C2EF7B22E7833C001763CE /* assembly_grammar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = assembly_grammar.h; sourceTree = "<group>"; };
+ A9C2EF7C22E7833C001763CE /* enum_set.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = enum_set.h; sourceTree = "<group>"; };
+ A9C2EF7D22E7833C001763CE /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; };
+ A9C2EF7E22E7833C001763CE /* extinst.spv-amd-shader-ballot.grammar.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "extinst.spv-amd-shader-ballot.grammar.json"; sourceTree = "<group>"; };
+ A9C2EF7F22E7833C001763CE /* text.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = text.cpp; sourceTree = "<group>"; };
+ A9C2EF8022E7833C001763CE /* assembly_grammar.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = assembly_grammar.cpp; sourceTree = "<group>"; };
+ A9C2EF8122E7833C001763CE /* text.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = text.h; sourceTree = "<group>"; };
+ A9C2EF8222E7833C001763CE /* extensions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = extensions.cpp; sourceTree = "<group>"; };
+ A9C2EF8322E7833C001763CE /* pch_source.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pch_source.cpp; sourceTree = "<group>"; };
+ A9C2EF8522E7833C001763CE /* parse_number.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = parse_number.h; sourceTree = "<group>"; };
+ A9C2EF8622E7833C001763CE /* ilist_node.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ilist_node.h; sourceTree = "<group>"; };
+ A9C2EF8722E7833C001763CE /* make_unique.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = make_unique.h; sourceTree = "<group>"; };
+ A9C2EF8822E7833C001763CE /* string_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = string_utils.h; sourceTree = "<group>"; };
+ A9C2EF8922E7833C001763CE /* small_vector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = small_vector.h; sourceTree = "<group>"; };
+ A9C2EF8A22E7833C001763CE /* timer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = timer.cpp; sourceTree = "<group>"; };
+ A9C2EF8B22E7833C001763CE /* timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = timer.h; sourceTree = "<group>"; };
+ A9C2EF8C22E7833C001763CE /* string_utils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = string_utils.cpp; sourceTree = "<group>"; };
+ A9C2EF8D22E7833C001763CE /* bit_vector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bit_vector.h; sourceTree = "<group>"; };
+ A9C2EF8E22E7833C001763CE /* bitutils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bitutils.h; sourceTree = "<group>"; };
+ A9C2EF8F22E7833C001763CE /* hex_float.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hex_float.h; sourceTree = "<group>"; };
+ A9C2EF9022E7833C001763CE /* parse_number.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = parse_number.cpp; sourceTree = "<group>"; };
+ A9C2EF9122E7833C001763CE /* bit_vector.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bit_vector.cpp; sourceTree = "<group>"; };
+ A9C2EF9222E7833C001763CE /* ilist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ilist.h; sourceTree = "<group>"; };
+ A9C2EF9322E7833C001763CE /* spirv_target_env.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_target_env.h; sourceTree = "<group>"; };
+ A9C2EF9422E7833C001763CE /* table.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = table.cpp; sourceTree = "<group>"; };
+ A9C2EF9622E7833C001763CE /* operand_to_undef_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = operand_to_undef_reduction_opportunity_finder.h; sourceTree = "<group>"; };
+ A9C2EF9722E7833C001763CE /* remove_selection_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_selection_reduction_opportunity.cpp; sourceTree = "<group>"; };
+ A9C2EF9822E7833C001763CE /* remove_block_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_block_reduction_opportunity.h; sourceTree = "<group>"; };
+ A9C2EF9922E7833C001763CE /* operand_to_dominating_id_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = operand_to_dominating_id_reduction_opportunity_finder.h; sourceTree = "<group>"; };
+ A9C2EF9A22E7833C001763CE /* reduction_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = reduction_pass.cpp; sourceTree = "<group>"; };
+ A9C2EF9B22E7833C001763CE /* operand_to_const_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = operand_to_const_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
+ A9C2EF9C22E7833C001763CE /* operand_to_const_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = operand_to_const_reduction_opportunity_finder.h; sourceTree = "<group>"; };
+ A9C2EF9D22E7833C001763CE /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; };
+ A9C2EF9E22E7833C001763CE /* reduction_util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = reduction_util.cpp; sourceTree = "<group>"; };
+ A9C2EF9F22E7833C001763CE /* structured_loop_to_selection_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = structured_loop_to_selection_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
+ A9C2EFA022E7833C001763CE /* simple_conditional_branch_to_branch_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = simple_conditional_branch_to_branch_reduction_opportunity.h; sourceTree = "<group>"; };
+ A9C2EFA122E7833C001763CE /* remove_function_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_function_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
+ A9C2EFA222E7833C001763CE /* remove_instruction_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_instruction_reduction_opportunity.h; sourceTree = "<group>"; };
+ A9C2EFA322E7833C001763CE /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = conditional_branch_to_simple_conditional_branch_reduction_opportunity.h; sourceTree = "<group>"; };
+ A9C2EFA422E7833C001763CE /* simple_conditional_branch_to_branch_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = simple_conditional_branch_to_branch_reduction_opportunity.cpp; sourceTree = "<group>"; };
+ A9C2EFA522E7833C001763CE /* remove_function_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_function_reduction_opportunity.cpp; sourceTree = "<group>"; };
+ A9C2EFA622E7833C001763CE /* remove_opname_instruction_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_opname_instruction_reduction_opportunity_finder.h; sourceTree = "<group>"; };
+ A9C2EFA722E7833C001763CE /* simple_conditional_branch_to_branch_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = simple_conditional_branch_to_branch_opportunity_finder.cpp; sourceTree = "<group>"; };
+ A9C2EFA822E7833C001763CE /* remove_selection_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_selection_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
+ A9C2EFA922E7833C001763CE /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp; sourceTree = "<group>"; };
+ A9C2EFAA22E7833C001763CE /* simple_conditional_branch_to_branch_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = simple_conditional_branch_to_branch_opportunity_finder.h; sourceTree = "<group>"; };
+ A9C2EFAB22E7833C001763CE /* merge_blocks_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = merge_blocks_reduction_opportunity.cpp; sourceTree = "<group>"; };
+ A9C2EFAC22E7833C001763CE /* change_operand_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = change_operand_reduction_opportunity.cpp; sourceTree = "<group>"; };
+ A9C2EFAD22E7833C001763CE /* structured_loop_to_selection_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = structured_loop_to_selection_reduction_opportunity.h; sourceTree = "<group>"; };
+ A9C2EFAE22E7833C001763CE /* remove_function_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_function_reduction_opportunity.h; sourceTree = "<group>"; };
+ A9C2EFAF22E7833C001763CE /* change_operand_to_undef_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = change_operand_to_undef_reduction_opportunity.h; sourceTree = "<group>"; };
+ A9C2EFB022E7833C001763CE /* remove_unreferenced_instruction_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_unreferenced_instruction_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
+ A9C2EFB122E7833C001763CE /* structured_loop_to_selection_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = structured_loop_to_selection_reduction_opportunity_finder.h; sourceTree = "<group>"; };
+ A9C2EFB222E7833C001763CE /* remove_selection_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_selection_reduction_opportunity.h; sourceTree = "<group>"; };
+ A9C2EFB322E7833C001763CE /* remove_instruction_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_instruction_reduction_opportunity.cpp; sourceTree = "<group>"; };
+ A9C2EFB422E7833C001763CE /* remove_selection_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_selection_reduction_opportunity_finder.h; sourceTree = "<group>"; };
+ A9C2EFB522E7833C001763CE /* merge_blocks_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = merge_blocks_reduction_opportunity_finder.h; sourceTree = "<group>"; };
+ A9C2EFB622E7833C001763CE /* remove_opname_instruction_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_opname_instruction_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
+ A9C2EFB722E7833C001763CE /* pch_source_reduce.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pch_source_reduce.cpp; sourceTree = "<group>"; };
+ A9C2EFB822E7833C001763CE /* reducer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = reducer.cpp; sourceTree = "<group>"; };
+ A9C2EFB922E7833C001763CE /* operand_to_undef_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = operand_to_undef_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
+ A9C2EFBA22E7833C001763CE /* remove_function_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_function_reduction_opportunity_finder.h; sourceTree = "<group>"; };
+ A9C2EFBB22E7833C001763CE /* pch_source_reduce.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pch_source_reduce.h; sourceTree = "<group>"; };
+ A9C2EFBC22E7833C001763CE /* remove_unreferenced_instruction_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_unreferenced_instruction_reduction_opportunity_finder.h; sourceTree = "<group>"; };
+ A9C2EFBD22E7833C001763CE /* merge_blocks_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = merge_blocks_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
+ A9C2EFBE22E7833C001763CE /* reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = reduction_opportunity.cpp; sourceTree = "<group>"; };
+ A9C2EFBF22E7833C001763CE /* reducer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reducer.h; sourceTree = "<group>"; };
+ A9C2EFC022E7833C001763CE /* change_operand_to_undef_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = change_operand_to_undef_reduction_opportunity.cpp; sourceTree = "<group>"; };
+ A9C2EFC122E7833C001763CE /* reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reduction_opportunity.h; sourceTree = "<group>"; };
+ A9C2EFC222E7833C001763CE /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = conditional_branch_to_simple_conditional_branch_opportunity_finder.h; sourceTree = "<group>"; };
+ A9C2EFC322E7833C001763CE /* operand_to_dominating_id_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = operand_to_dominating_id_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
+ A9C2EFC422E7833C001763CE /* reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reduction_opportunity_finder.h; sourceTree = "<group>"; };
+ A9C2EFC522E7833C001763CE /* change_operand_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = change_operand_reduction_opportunity.h; sourceTree = "<group>"; };
+ A9C2EFC622E7833C001763CE /* remove_block_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_block_reduction_opportunity_finder.h; sourceTree = "<group>"; };
+ A9C2EFC722E7833C001763CE /* remove_block_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_block_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
+ A9C2EFC822E7833C001763CE /* reduction_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reduction_util.h; sourceTree = "<group>"; };
+ A9C2EFC922E7833C001763CE /* merge_blocks_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = merge_blocks_reduction_opportunity.h; sourceTree = "<group>"; };
+ A9C2EFCA22E7833C001763CE /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp; sourceTree = "<group>"; };
+ A9C2EFCB22E7833C001763CE /* structured_loop_to_selection_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = structured_loop_to_selection_reduction_opportunity.cpp; sourceTree = "<group>"; };
+ A9C2EFCC22E7833C001763CE /* remove_block_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_block_reduction_opportunity.cpp; sourceTree = "<group>"; };
+ A9C2EFCD22E7833C001763CE /* reduction_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reduction_pass.h; sourceTree = "<group>"; };
+ A9C2EFCE22E7833C001763CE /* latest_version_opencl_std_header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = latest_version_opencl_std_header.h; sourceTree = "<group>"; };
+ A9C2EFCF22E7833C001763CE /* spirv_optimizer_options.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_optimizer_options.cpp; sourceTree = "<group>"; };
+ A9C2EFD022E7833C001763CE /* cfa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cfa.h; sourceTree = "<group>"; };
+ A9C2EFD122E7833C001763CE /* pch_source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pch_source.h; sourceTree = "<group>"; };
+ A9C2EFD222E7833C001763CE /* enum_string_mapping.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = enum_string_mapping.h; sourceTree = "<group>"; };
+ A9C2EFD322E7833C001763CE /* spirv_fuzzer_options.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_fuzzer_options.cpp; sourceTree = "<group>"; };
+ A9C2EFD422E7833C001763CE /* spirv_reducer_options.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_reducer_options.h; sourceTree = "<group>"; };
+ A9C2EFD522E7833C001763CE /* spirv_validator_options.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_validator_options.cpp; sourceTree = "<group>"; };
+ A9C2EFD622E7833C001763CE /* extinst.spv-amd-shader-trinary-minmax.grammar.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "extinst.spv-amd-shader-trinary-minmax.grammar.json"; sourceTree = "<group>"; };
+ A9C2EFD722E7833C001763CE /* print.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = print.cpp; sourceTree = "<group>"; };
+ A9C2EFD822E7833C001763CE /* spirv_definition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_definition.h; sourceTree = "<group>"; };
+ A9C2EFD922E7833C001763CE /* operand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = operand.h; sourceTree = "<group>"; };
+ A9C2EFDA22E7833C001763CE /* spirv_endian.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_endian.cpp; sourceTree = "<group>"; };
+ A9C2EFDB22E7833C001763CE /* macro.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = macro.h; sourceTree = "<group>"; };
+ A9C2EFDC22E7833C001763CE /* spirv_constant.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_constant.h; sourceTree = "<group>"; };
+ A9C2EFDD22E7833C001763CE /* extinst.spv-amd-gcn-shader.grammar.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "extinst.spv-amd-gcn-shader.grammar.json"; sourceTree = "<group>"; };
+ A9C2EFDE22E7833C001763CE /* binary.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = binary.cpp; sourceTree = "<group>"; };
+ A9C2EFDF22E7833C001763CE /* spirv_validator_options.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_validator_options.h; sourceTree = "<group>"; };
+ A9C2EFE022E7833C001763CE /* enum_string_mapping.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = enum_string_mapping.cpp; sourceTree = "<group>"; };
+ A9C2EFE122E7833C001763CE /* text_handler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = text_handler.h; sourceTree = "<group>"; };
+ A9C2EFE222E7833C001763CE /* parsed_operand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = parsed_operand.h; sourceTree = "<group>"; };
+ A9C2EFE322E7833C001763CE /* name_mapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = name_mapper.h; sourceTree = "<group>"; };
+ A9C2EFE422E7833C001763CE /* spirv_reducer_options.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_reducer_options.cpp; sourceTree = "<group>"; };
+ A9C2EFE522E7833C001763CE /* parsed_operand.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = parsed_operand.cpp; sourceTree = "<group>"; };
+ A9C2EFE622E7833C001763CE /* diagnostic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = diagnostic.h; sourceTree = "<group>"; };
+ A9C2EFE722E7833C001763CE /* spirv_endian.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_endian.h; sourceTree = "<group>"; };
+ A9C2EFE822E7833C001763CE /* name_mapper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = name_mapper.cpp; sourceTree = "<group>"; };
+ A9C2EFE922E7833C001763CE /* extinst.debuginfo.grammar.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = extinst.debuginfo.grammar.json; sourceTree = "<group>"; };
+ A9C2EFEB22E7833C001763CE /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; };
+ A9C2EFEC22E7833C001763CE /* linker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = linker.cpp; sourceTree = "<group>"; };
+ A9C2EFED22E7833C001763CE /* software_version.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = software_version.cpp; sourceTree = "<group>"; };
+ A9C2EFEE22E7833C001763CE /* opcode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = opcode.cpp; sourceTree = "<group>"; };
+ A9C2EFEF22E7833C001763CE /* print.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = print.h; sourceTree = "<group>"; };
+ A9C2EFF022E7833C001763CE /* ext_inst.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ext_inst.cpp; sourceTree = "<group>"; };
+ A9C2EFF122E7833C001763CE /* disassemble.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = disassemble.h; sourceTree = "<group>"; };
+ A9C2EFF322E7833C001763CE /* optimizer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = optimizer.cpp; sourceTree = "<group>"; };
+ A9C2EFF422E7833C001763CE /* if_conversion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = if_conversion.h; sourceTree = "<group>"; };
+ A9C2EFF522E7833C001763CE /* register_pressure.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = register_pressure.cpp; sourceTree = "<group>"; };
+ A9C2EFF622E7833C001763CE /* loop_utils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_utils.cpp; sourceTree = "<group>"; };
+ A9C2EFF722E7833C001763CE /* merge_return_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = merge_return_pass.h; sourceTree = "<group>"; };
+ A9C2EFF822E7833C001763CE /* inline_opaque_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = inline_opaque_pass.h; sourceTree = "<group>"; };
+ A9C2EFF922E7833C001763CE /* loop_fusion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_fusion.h; sourceTree = "<group>"; };
+ A9C2EFFA22E7833C001763CE /* combine_access_chains.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = combine_access_chains.cpp; sourceTree = "<group>"; };
+ A9C2EFFB22E7833C001763CE /* build_module.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = build_module.cpp; sourceTree = "<group>"; };
+ A9C2EFFC22E7833C001763CE /* composite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = composite.h; sourceTree = "<group>"; };
+ A9C2EFFD22E7833C001763CE /* compact_ids_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = compact_ids_pass.h; sourceTree = "<group>"; };
+ A9C2EFFE22E7833C001763CE /* register_pressure.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = register_pressure.h; sourceTree = "<group>"; };
+ A9C2EFFF22E7833C001763CE /* tree_iterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tree_iterator.h; sourceTree = "<group>"; };
+ A9C2F00022E7833C001763CE /* strip_atomic_counter_memory_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = strip_atomic_counter_memory_pass.h; sourceTree = "<group>"; };
+ A9C2F00122E7833C001763CE /* legalize_vector_shuffle_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = legalize_vector_shuffle_pass.h; sourceTree = "<group>"; };
+ A9C2F00222E7833C001763CE /* local_single_store_elim_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = local_single_store_elim_pass.h; sourceTree = "<group>"; };
+ A9C2F00322E7833C001763CE /* reduce_load_size.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reduce_load_size.h; sourceTree = "<group>"; };
+ A9C2F00422E7833C001763CE /* code_sink.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = code_sink.cpp; sourceTree = "<group>"; };
+ A9C2F00522E7833C001763CE /* types.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = types.cpp; sourceTree = "<group>"; };
+ A9C2F00622E7833C001763CE /* scalar_analysis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scalar_analysis.h; sourceTree = "<group>"; };
+ A9C2F00722E7833C001763CE /* strip_debug_info_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = strip_debug_info_pass.h; sourceTree = "<group>"; };
+ A9C2F00822E7833C001763CE /* cfg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cfg.cpp; sourceTree = "<group>"; };
+ A9C2F00922E7833C001763CE /* strip_atomic_counter_memory_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = strip_atomic_counter_memory_pass.cpp; sourceTree = "<group>"; };
+ A9C2F00A22E7833C001763CE /* decoration_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = decoration_manager.cpp; sourceTree = "<group>"; };
+ A9C2F00B22E7833C001763CE /* local_single_block_elim_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = local_single_block_elim_pass.cpp; sourceTree = "<group>"; };
+ A9C2F00C22E7833C001763CE /* freeze_spec_constant_value_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = freeze_spec_constant_value_pass.cpp; sourceTree = "<group>"; };
+ A9C2F00D22E7833C001763CE /* replace_invalid_opc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = replace_invalid_opc.h; sourceTree = "<group>"; };
+ A9C2F00E22E7833C001763CE /* local_access_chain_convert_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = local_access_chain_convert_pass.h; sourceTree = "<group>"; };
+ A9C2F00F22E7833C001763CE /* inst_bindless_check_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = inst_bindless_check_pass.cpp; sourceTree = "<group>"; };
+ A9C2F01022E7833C001763CE /* local_redundancy_elimination.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = local_redundancy_elimination.cpp; sourceTree = "<group>"; };
+ A9C2F01122E7833C001763CE /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; };
+ A9C2F01222E7833C001763CE /* instrument_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = instrument_pass.cpp; sourceTree = "<group>"; };
+ A9C2F01322E7833C001763CE /* propagator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = propagator.h; sourceTree = "<group>"; };
+ A9C2F01422E7833C001763CE /* instruction_list.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = instruction_list.h; sourceTree = "<group>"; };
+ A9C2F01522E7833C001763CE /* feature_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = feature_manager.cpp; sourceTree = "<group>"; };
+ A9C2F01622E7833C001763CE /* pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pass.cpp; sourceTree = "<group>"; };
+ A9C2F01722E7833C001763CE /* loop_fission.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_fission.cpp; sourceTree = "<group>"; };
+ A9C2F01822E7833C001763CE /* dominator_tree.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dominator_tree.cpp; sourceTree = "<group>"; };
+ A9C2F01922E7833C001763CE /* merge_return_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = merge_return_pass.cpp; sourceTree = "<group>"; };
+ A9C2F01A22E7833C001763CE /* ir_context.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ir_context.h; sourceTree = "<group>"; };
+ A9C2F01B22E7833C001763CE /* eliminate_dead_constant_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = eliminate_dead_constant_pass.cpp; sourceTree = "<group>"; };
+ A9C2F01C22E7833C001763CE /* cfg_cleanup_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cfg_cleanup_pass.cpp; sourceTree = "<group>"; };
+ A9C2F01D22E7833C001763CE /* const_folding_rules.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = const_folding_rules.cpp; sourceTree = "<group>"; };
+ A9C2F01E22E7833C001763CE /* loop_unroller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_unroller.h; sourceTree = "<group>"; };
+ A9C2F01F22E7833C001763CE /* strip_debug_info_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = strip_debug_info_pass.cpp; sourceTree = "<group>"; };
+ A9C2F02022E7833C001763CE /* ssa_rewrite_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ssa_rewrite_pass.cpp; sourceTree = "<group>"; };
+ A9C2F02122E7833C001763CE /* loop_dependence.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_dependence.cpp; sourceTree = "<group>"; };
+ A9C2F02222E7833C001763CE /* unify_const_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = unify_const_pass.h; sourceTree = "<group>"; };
+ A9C2F02322E7833C001763CE /* ir_loader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ir_loader.h; sourceTree = "<group>"; };
+ A9C2F02422E7833C001763CE /* types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = types.h; sourceTree = "<group>"; };
+ A9C2F02522E7833C001763CE /* fold_spec_constant_op_and_composite_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fold_spec_constant_op_and_composite_pass.h; sourceTree = "<group>"; };
+ A9C2F02622E7833C001763CE /* mem_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mem_pass.cpp; sourceTree = "<group>"; };
+ A9C2F02722E7833C001763CE /* basic_block.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = basic_block.h; sourceTree = "<group>"; };
+ A9C2F02822E7833C001763CE /* remove_duplicates_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_duplicates_pass.cpp; sourceTree = "<group>"; };
+ A9C2F02922E7833C001763CE /* dead_variable_elimination.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dead_variable_elimination.cpp; sourceTree = "<group>"; };
+ A9C2F02A22E7833C001763CE /* block_merge_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = block_merge_pass.h; sourceTree = "<group>"; };
+ A9C2F02B22E7833C001763CE /* module.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = module.cpp; sourceTree = "<group>"; };
+ A9C2F02C22E7833C001763CE /* fold_spec_constant_op_and_composite_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fold_spec_constant_op_and_composite_pass.cpp; sourceTree = "<group>"; };
+ A9C2F02D22E7833C001763CE /* loop_unswitch_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_unswitch_pass.cpp; sourceTree = "<group>"; };
+ A9C2F02E22E7833C001763CE /* unify_const_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = unify_const_pass.cpp; sourceTree = "<group>"; };
+ A9C2F02F22E7833C001763CE /* type_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = type_manager.cpp; sourceTree = "<group>"; };
+ A9C2F03022E7833C001763CE /* generate_webgpu_initializers_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = generate_webgpu_initializers_pass.cpp; sourceTree = "<group>"; };
+ A9C2F03122E7833C001763CE /* private_to_local_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = private_to_local_pass.h; sourceTree = "<group>"; };
+ A9C2F03222E7833C001763CE /* inline_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = inline_pass.cpp; sourceTree = "<group>"; };
+ A9C2F03322E7833C001763CE /* def_use_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = def_use_manager.h; sourceTree = "<group>"; };
+ A9C2F03422E7833C001763CE /* ir_loader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ir_loader.cpp; sourceTree = "<group>"; };
+ A9C2F03522E7833C001763CE /* cfg_cleanup_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cfg_cleanup_pass.h; sourceTree = "<group>"; };
+ A9C2F03622E7833C001763CE /* licm_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = licm_pass.cpp; sourceTree = "<group>"; };
+ A9C2F03722E7833C001763CE /* eliminate_dead_functions_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = eliminate_dead_functions_pass.cpp; sourceTree = "<group>"; };
+ A9C2F03822E7833C001763CE /* local_redundancy_elimination.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = local_redundancy_elimination.h; sourceTree = "<group>"; };
+ A9C2F03922E7833C001763CE /* split_invalid_unreachable_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = split_invalid_unreachable_pass.cpp; sourceTree = "<group>"; };
+ A9C2F03A22E7833C001763CE /* loop_peeling.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_peeling.h; sourceTree = "<group>"; };
+ A9C2F03B22E7833C001763CE /* vector_dce.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vector_dce.cpp; sourceTree = "<group>"; };
+ A9C2F03C22E7833C001763CE /* block_merge_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = block_merge_util.h; sourceTree = "<group>"; };
+ A9C2F03D22E7833C001763CE /* loop_unroller.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_unroller.cpp; sourceTree = "<group>"; };
+ A9C2F03E22E7833C001763CE /* constants.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = constants.cpp; sourceTree = "<group>"; };
+ A9C2F03F22E7833C001763CE /* loop_fusion_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_fusion_pass.h; sourceTree = "<group>"; };
+ A9C2F04022E7833C001763CE /* struct_cfg_analysis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = struct_cfg_analysis.h; sourceTree = "<group>"; };
+ A9C2F04122E7833C001763CE /* def_use_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = def_use_manager.cpp; sourceTree = "<group>"; };
+ A9C2F04222E7833C001763CE /* strip_reflect_info_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = strip_reflect_info_pass.cpp; sourceTree = "<group>"; };
+ A9C2F04322E7833C001763CE /* decoration_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = decoration_manager.h; sourceTree = "<group>"; };
+ A9C2F04422E7833C001763CE /* ccp_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ccp_pass.cpp; sourceTree = "<group>"; };
+ A9C2F04522E7833C001763CE /* process_lines_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = process_lines_pass.h; sourceTree = "<group>"; };
+ A9C2F04622E7833C001763CE /* local_single_block_elim_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = local_single_block_elim_pass.h; sourceTree = "<group>"; };
+ A9C2F04722E7833C001763CE /* pch_source_opt.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pch_source_opt.cpp; sourceTree = "<group>"; };
+ A9C2F04822E7833C001763CE /* strength_reduction_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = strength_reduction_pass.h; sourceTree = "<group>"; };
+ A9C2F04922E7833C001763CE /* aggressive_dead_code_elim_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aggressive_dead_code_elim_pass.cpp; sourceTree = "<group>"; };
+ A9C2F04A22E7833C001763CE /* eliminate_dead_functions_util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = eliminate_dead_functions_util.cpp; sourceTree = "<group>"; };
+ A9C2F04B22E7833C001763CE /* simplification_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = simplification_pass.cpp; sourceTree = "<group>"; };
+ A9C2F04C22E7833C001763CE /* dead_branch_elim_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dead_branch_elim_pass.cpp; sourceTree = "<group>"; };
+ A9C2F04D22E7833C001763CE /* flatten_decoration_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = flatten_decoration_pass.cpp; sourceTree = "<group>"; };
+ A9C2F04E22E7833C001763CE /* dead_insert_elim_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dead_insert_elim_pass.h; sourceTree = "<group>"; };
+ A9C2F04F22E7833C001763CE /* folding_rules.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = folding_rules.cpp; sourceTree = "<group>"; };
+ A9C2F05022E7833C001763CE /* freeze_spec_constant_value_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = freeze_spec_constant_value_pass.h; sourceTree = "<group>"; };
+ A9C2F05122E7833C001763CE /* ir_context.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ir_context.cpp; sourceTree = "<group>"; };
+ A9C2F05222E7833C001763CE /* instrument_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = instrument_pass.h; sourceTree = "<group>"; };
+ A9C2F05322E7833C001763CE /* mem_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mem_pass.h; sourceTree = "<group>"; };
+ A9C2F05422E7833C001763CE /* loop_descriptor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_descriptor.cpp; sourceTree = "<group>"; };
+ A9C2F05522E7833C001763CE /* local_ssa_elim_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = local_ssa_elim_pass.cpp; sourceTree = "<group>"; };
+ A9C2F05622E7833C001763CE /* eliminate_dead_members_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eliminate_dead_members_pass.h; sourceTree = "<group>"; };
+ A9C2F05722E7833C001763CE /* function.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = function.cpp; sourceTree = "<group>"; };
+ A9C2F05822E7833C001763CE /* instruction_list.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = instruction_list.cpp; sourceTree = "<group>"; };
+ A9C2F05922E7833C001763CE /* composite.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = composite.cpp; sourceTree = "<group>"; };
+ A9C2F05A22E7833C001763CE /* process_lines_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = process_lines_pass.cpp; sourceTree = "<group>"; };
+ A9C2F05B22E7833C001763CE /* inline_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = inline_pass.h; sourceTree = "<group>"; };
+ A9C2F05C22E7833C001763CE /* loop_dependence.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_dependence.h; sourceTree = "<group>"; };
+ A9C2F05D22E7833C001763CE /* value_number_table.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = value_number_table.h; sourceTree = "<group>"; };
+ A9C2F05E22E7833C001763CE /* flatten_decoration_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = flatten_decoration_pass.h; sourceTree = "<group>"; };
+ A9C2F05F22E7833C001763CE /* if_conversion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = if_conversion.cpp; sourceTree = "<group>"; };
+ A9C2F06022E7833C001763CE /* inline_exhaustive_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = inline_exhaustive_pass.h; sourceTree = "<group>"; };
+ A9C2F06122E7833C001763CE /* constants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = constants.h; sourceTree = "<group>"; };
+ A9C2F06222E7833C001763CE /* eliminate_dead_members_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = eliminate_dead_members_pass.cpp; sourceTree = "<group>"; };
+ A9C2F06322E7833C001763CE /* strength_reduction_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = strength_reduction_pass.cpp; sourceTree = "<group>"; };
+ A9C2F06422E7833C001763CE /* block_merge_util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = block_merge_util.cpp; sourceTree = "<group>"; };
+ A9C2F06522E7833C001763CE /* upgrade_memory_model.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = upgrade_memory_model.h; sourceTree = "<group>"; };
+ A9C2F06622E7833C001763CE /* copy_prop_arrays.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = copy_prop_arrays.cpp; sourceTree = "<group>"; };
+ A9C2F06722E7833C001763CE /* pass_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pass_manager.cpp; sourceTree = "<group>"; };
+ A9C2F06822E7833C001763CE /* inline_exhaustive_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = inline_exhaustive_pass.cpp; sourceTree = "<group>"; };
+ A9C2F06922E7833C001763CE /* loop_fission.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_fission.h; sourceTree = "<group>"; };
+ A9C2F06A22E7833C001763CE /* workaround1209.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = workaround1209.h; sourceTree = "<group>"; };
+ A9C2F06B22E7833C001763CE /* loop_fusion_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_fusion_pass.cpp; sourceTree = "<group>"; };
+ A9C2F06C22E7833C001763CE /* log.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = log.h; sourceTree = "<group>"; };
+ A9C2F06D22E7833C001763CE /* split_invalid_unreachable_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = split_invalid_unreachable_pass.h; sourceTree = "<group>"; };
+ A9C2F06E22E7833C001763CE /* copy_prop_arrays.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = copy_prop_arrays.h; sourceTree = "<group>"; };
+ A9C2F06F22E7833C001763CE /* eliminate_dead_constant_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eliminate_dead_constant_pass.h; sourceTree = "<group>"; };
+ A9C2F07022E7833C001763CE /* dead_insert_elim_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dead_insert_elim_pass.cpp; sourceTree = "<group>"; };
+ A9C2F07122E7833C001763CE /* ssa_rewrite_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ssa_rewrite_pass.h; sourceTree = "<group>"; };
+ A9C2F07222E7833C001763CE /* scalar_analysis.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scalar_analysis.cpp; sourceTree = "<group>"; };
+ A9C2F07322E7833C001763CE /* dead_variable_elimination.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dead_variable_elimination.h; sourceTree = "<group>"; };
+ A9C2F07422E7833C001763CE /* block_merge_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = block_merge_pass.cpp; sourceTree = "<group>"; };
+ A9C2F07522E7833C001763CE /* dominator_analysis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dominator_analysis.h; sourceTree = "<group>"; };
+ A9C2F07622E7833C001763CE /* pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pass.h; sourceTree = "<group>"; };
+ A9C2F07722E7833C001763CE /* folding_rules.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = folding_rules.h; sourceTree = "<group>"; };
+ A9C2F07822E7833C001763CE /* eliminate_dead_functions_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eliminate_dead_functions_pass.h; sourceTree = "<group>"; };
+ A9C2F07922E7833C001763CE /* eliminate_dead_functions_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eliminate_dead_functions_util.h; sourceTree = "<group>"; };
+ A9C2F07A22E7833C001763CE /* fold.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fold.h; sourceTree = "<group>"; };
+ A9C2F07B22E7833C001763CE /* local_single_store_elim_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = local_single_store_elim_pass.cpp; sourceTree = "<group>"; };
+ A9C2F07C22E7833C001763CE /* dead_branch_elim_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dead_branch_elim_pass.h; sourceTree = "<group>"; };
+ A9C2F07D22E7833C001763CE /* private_to_local_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = private_to_local_pass.cpp; sourceTree = "<group>"; };
+ A9C2F07E22E7833C001763CE /* scalar_analysis_nodes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scalar_analysis_nodes.h; sourceTree = "<group>"; };
+ A9C2F07F22E7833C001763CE /* propagator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = propagator.cpp; sourceTree = "<group>"; };
+ A9C2F08022E7833C001763CE /* fix_storage_class.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fix_storage_class.h; sourceTree = "<group>"; };
+ A9C2F08122E7833C001763CE /* loop_dependence_helpers.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_dependence_helpers.cpp; sourceTree = "<group>"; };
+ A9C2F08222E7833C001763CE /* set_spec_constant_default_value_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = set_spec_constant_default_value_pass.cpp; sourceTree = "<group>"; };
+ A9C2F08322E7833C001763CE /* passes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = passes.h; sourceTree = "<group>"; };
+ A9C2F08422E7833C001763CE /* fold.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fold.cpp; sourceTree = "<group>"; };
+ A9C2F08522E7833C001763CE /* strip_reflect_info_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = strip_reflect_info_pass.h; sourceTree = "<group>"; };
+ A9C2F08622E7833C001763CE /* scalar_replacement_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scalar_replacement_pass.cpp; sourceTree = "<group>"; };
+ A9C2F08722E7833C001763CE /* simplification_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = simplification_pass.h; sourceTree = "<group>"; };
+ A9C2F08822E7833C001763CE /* remove_duplicates_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_duplicates_pass.h; sourceTree = "<group>"; };
+ A9C2F08922E7833C001763CE /* redundancy_elimination.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = redundancy_elimination.cpp; sourceTree = "<group>"; };
+ A9C2F08A22E7833C001763CE /* reflect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reflect.h; sourceTree = "<group>"; };
+ A9C2F08B22E7833C001763CE /* workaround1209.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = workaround1209.cpp; sourceTree = "<group>"; };
+ A9C2F08C22E7833C001763CE /* null_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = null_pass.h; sourceTree = "<group>"; };
+ A9C2F08D22E7833C001763CE /* const_folding_rules.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = const_folding_rules.h; sourceTree = "<group>"; };
+ A9C2F08E22E7833C001763CE /* scalar_replacement_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scalar_replacement_pass.h; sourceTree = "<group>"; };
+ A9C2F08F22E7833C001763CE /* instruction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = instruction.cpp; sourceTree = "<group>"; };
+ A9C2F09022E7833C001763CE /* pch_source_opt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pch_source_opt.h; sourceTree = "<group>"; };
+ A9C2F09122E7833C001763CE /* reduce_load_size.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = reduce_load_size.cpp; sourceTree = "<group>"; };
+ A9C2F09222E7833C001763CE /* redundancy_elimination.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = redundancy_elimination.h; sourceTree = "<group>"; };
+ A9C2F09322E7833C001763CE /* fix_storage_class.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fix_storage_class.cpp; sourceTree = "<group>"; };
+ A9C2F09422E7833C001763CE /* value_number_table.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = value_number_table.cpp; sourceTree = "<group>"; };
+ A9C2F09522E7833C001763CE /* local_ssa_elim_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = local_ssa_elim_pass.h; sourceTree = "<group>"; };
+ A9C2F09622E7833C001763CE /* inline_opaque_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = inline_opaque_pass.cpp; sourceTree = "<group>"; };
+ A9C2F09722E7833C001763CE /* replace_invalid_opc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = replace_invalid_opc.cpp; sourceTree = "<group>"; };
+ A9C2F09822E7833C001763CE /* loop_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_utils.h; sourceTree = "<group>"; };
+ A9C2F09922E7833C001763CE /* module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = module.h; sourceTree = "<group>"; };
+ A9C2F09A22E7833C001763CE /* dominator_analysis.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dominator_analysis.cpp; sourceTree = "<group>"; };
+ A9C2F09B22E7833C001763CE /* decompose_initialized_variables_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = decompose_initialized_variables_pass.cpp; sourceTree = "<group>"; };
+ A9C2F09C22E7833C001763CE /* ir_builder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ir_builder.h; sourceTree = "<group>"; };
+ A9C2F09D22E7833C001763CE /* loop_unswitch_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_unswitch_pass.h; sourceTree = "<group>"; };
+ A9C2F09E22E7833C001763CE /* cfg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cfg.h; sourceTree = "<group>"; };
+ A9C2F09F22E7833C001763CE /* code_sink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = code_sink.h; sourceTree = "<group>"; };
+ A9C2F0A022E7833C001763CE /* loop_descriptor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_descriptor.h; sourceTree = "<group>"; };
+ A9C2F0A122E7833C001763CE /* generate_webgpu_initializers_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = generate_webgpu_initializers_pass.h; sourceTree = "<group>"; };
+ A9C2F0A222E7833C001763CE /* instruction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = instruction.h; sourceTree = "<group>"; };
+ A9C2F0A322E7833C001763CE /* aggressive_dead_code_elim_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aggressive_dead_code_elim_pass.h; sourceTree = "<group>"; };
+ A9C2F0A422E7833C001763CE /* struct_cfg_analysis.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = struct_cfg_analysis.cpp; sourceTree = "<group>"; };
+ A9C2F0A522E7833C001763CE /* vector_dce.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vector_dce.h; sourceTree = "<group>"; };
+ A9C2F0A622E7833C001763CE /* combine_access_chains.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = combine_access_chains.h; sourceTree = "<group>"; };
+ A9C2F0A722E7833C001763CE /* pass_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pass_manager.h; sourceTree = "<group>"; };
+ A9C2F0A822E7833C001763CE /* local_access_chain_convert_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = local_access_chain_convert_pass.cpp; sourceTree = "<group>"; };
+ A9C2F0A922E7833C001763CE /* basic_block.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = basic_block.cpp; sourceTree = "<group>"; };
+ A9C2F0AA22E7833C001763CE /* iterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iterator.h; sourceTree = "<group>"; };
+ A9C2F0AB22E7833C001763CE /* licm_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = licm_pass.h; sourceTree = "<group>"; };
+ A9C2F0AC22E7833C001763CE /* build_module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = build_module.h; sourceTree = "<group>"; };
+ A9C2F0AD22E7833C001763CE /* ccp_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ccp_pass.h; sourceTree = "<group>"; };
+ A9C2F0AE22E7833C001763CE /* decompose_initialized_variables_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = decompose_initialized_variables_pass.h; sourceTree = "<group>"; };
+ A9C2F0AF22E7833C001763CE /* function.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = function.h; sourceTree = "<group>"; };
+ A9C2F0B022E7833C001763CE /* loop_fusion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_fusion.cpp; sourceTree = "<group>"; };
+ A9C2F0B122E7833C001763CE /* upgrade_memory_model.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = upgrade_memory_model.cpp; sourceTree = "<group>"; };
+ A9C2F0B222E7833C001763CE /* feature_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = feature_manager.h; sourceTree = "<group>"; };
+ A9C2F0B322E7833C001763CE /* inst_bindless_check_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = inst_bindless_check_pass.h; sourceTree = "<group>"; };
+ A9C2F0B422E7833C001763CE /* scalar_analysis_simplification.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scalar_analysis_simplification.cpp; sourceTree = "<group>"; };
+ A9C2F0B522E7833C001763CE /* set_spec_constant_default_value_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = set_spec_constant_default_value_pass.h; sourceTree = "<group>"; };
+ A9C2F0B622E7833C001763CE /* dominator_tree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dominator_tree.h; sourceTree = "<group>"; };
+ A9C2F0B722E7833C001763CE /* legalize_vector_shuffle_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = legalize_vector_shuffle_pass.cpp; sourceTree = "<group>"; };
+ A9C2F0B822E7833C001763CE /* type_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = type_manager.h; sourceTree = "<group>"; };
+ A9C2F0B922E7833C001763CE /* compact_ids_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = compact_ids_pass.cpp; sourceTree = "<group>"; };
+ A9C2F0BA22E7833C001763CE /* loop_peeling.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_peeling.cpp; sourceTree = "<group>"; };
+ A9C2F0BB22E7833C001763CE /* table.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = table.h; sourceTree = "<group>"; };
+ A9C2F0F922E7833D001763CE /* ext_inst.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ext_inst.h; sourceTree = "<group>"; };
+ A9C2F0FA22E7833D001763CE /* diagnostic.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = diagnostic.cpp; sourceTree = "<group>"; };
+ A9C2F0FB22E7833D001763CE /* latest_version_spirv_header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = latest_version_spirv_header.h; sourceTree = "<group>"; };
+ A9C2F0FC22E7833D001763CE /* libspirv.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = libspirv.cpp; sourceTree = "<group>"; };
+ A9C2F0FD22E7833D001763CE /* instruction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = instruction.h; sourceTree = "<group>"; };
+ A9C2F0FE22E7833D001763CE /* spirv_optimizer_options.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_optimizer_options.h; sourceTree = "<group>"; };
+ A9C2F0FF22E7833D001763CE /* opcode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = opcode.h; sourceTree = "<group>"; };
+ A9C2F10022E7833D001763CE /* operand.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = operand.cpp; sourceTree = "<group>"; };
+ A9C2F10122E7833D001763CE /* latest_version_glsl_std_450_header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = latest_version_glsl_std_450_header.h; sourceTree = "<group>"; };
+ A9C2F10222E7833D001763CE /* extensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = extensions.h; sourceTree = "<group>"; };
+ A9C2F10322E7833D001763CE /* disassemble.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = disassemble.cpp; sourceTree = "<group>"; };
+ A9C2F10422E7833D001763CE /* binary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = binary.h; sourceTree = "<group>"; };
+ A9C2F10522E7833D001763CE /* text_handler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = text_handler.cpp; sourceTree = "<group>"; };
+ A9C2F10722E7833D001763CE /* validate_annotation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_annotation.cpp; sourceTree = "<group>"; };
+ A9C2F10822E7833D001763CE /* validate_misc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_misc.cpp; sourceTree = "<group>"; };
+ A9C2F10922E7833D001763CE /* validate_cfg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_cfg.cpp; sourceTree = "<group>"; };
+ A9C2F10A22E7833D001763CE /* validate_capability.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_capability.cpp; sourceTree = "<group>"; };
+ A9C2F10B22E7833D001763CE /* construct.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = construct.h; sourceTree = "<group>"; };
+ A9C2F10C22E7833D001763CE /* validate_barriers.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_barriers.cpp; sourceTree = "<group>"; };
+ A9C2F10D22E7833D001763CE /* validate_non_uniform.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_non_uniform.cpp; sourceTree = "<group>"; };
+ A9C2F10E22E7833D001763CE /* validate_scopes.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_scopes.cpp; sourceTree = "<group>"; };
+ A9C2F10F22E7833D001763CE /* validate_atomics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_atomics.cpp; sourceTree = "<group>"; };
+ A9C2F11022E7833D001763CE /* basic_block.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = basic_block.h; sourceTree = "<group>"; };
+ A9C2F11122E7833D001763CE /* validate_instruction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_instruction.cpp; sourceTree = "<group>"; };
+ A9C2F11222E7833D001763CE /* validate_decorations.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_decorations.cpp; sourceTree = "<group>"; };
+ A9C2F11322E7833D001763CE /* validate_debug.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_debug.cpp; sourceTree = "<group>"; };
+ A9C2F11422E7833D001763CE /* validate_builtins.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_builtins.cpp; sourceTree = "<group>"; };
+ A9C2F11522E7833D001763CE /* validate_interfaces.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_interfaces.cpp; sourceTree = "<group>"; };
+ A9C2F11622E7833D001763CE /* validate.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate.cpp; sourceTree = "<group>"; };
+ A9C2F11722E7833D001763CE /* validation_state.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = validation_state.h; sourceTree = "<group>"; };
+ A9C2F11822E7833D001763CE /* validate_constants.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_constants.cpp; sourceTree = "<group>"; };
+ A9C2F11922E7833D001763CE /* validate_bitwise.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_bitwise.cpp; sourceTree = "<group>"; };
+ A9C2F11A22E7833D001763CE /* validate_extensions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_extensions.cpp; sourceTree = "<group>"; };
+ A9C2F11B22E7833D001763CE /* construct.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = construct.cpp; sourceTree = "<group>"; };
+ A9C2F11C22E7833D001763CE /* function.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = function.cpp; sourceTree = "<group>"; };
+ A9C2F11D22E7833D001763CE /* validate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = validate.h; sourceTree = "<group>"; };
+ A9C2F11E22E7833D001763CE /* validate_adjacency.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_adjacency.cpp; sourceTree = "<group>"; };
+ A9C2F11F22E7833D001763CE /* validate_conversion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_conversion.cpp; sourceTree = "<group>"; };
+ A9C2F12022E7833D001763CE /* validate_small_type_uses.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_small_type_uses.cpp; sourceTree = "<group>"; };
+ A9C2F12122E7833D001763CE /* validate_datarules.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_datarules.cpp; sourceTree = "<group>"; };
+ A9C2F12222E7833D001763CE /* validate_scopes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = validate_scopes.h; sourceTree = "<group>"; };
+ A9C2F12322E7833D001763CE /* validate_id.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_id.cpp; sourceTree = "<group>"; };
+ A9C2F12422E7833D001763CE /* validate_memory_semantics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = validate_memory_semantics.h; sourceTree = "<group>"; };
+ A9C2F12522E7833D001763CE /* validate_arithmetics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_arithmetics.cpp; sourceTree = "<group>"; };
+ A9C2F12622E7833D001763CE /* validate_mode_setting.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_mode_setting.cpp; sourceTree = "<group>"; };
+ A9C2F12722E7833D001763CE /* validate_memory_semantics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_memory_semantics.cpp; sourceTree = "<group>"; };
+ A9C2F12822E7833D001763CE /* validate_logicals.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_logicals.cpp; sourceTree = "<group>"; };
+ A9C2F12922E7833D001763CE /* validate_derivatives.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_derivatives.cpp; sourceTree = "<group>"; };
+ A9C2F12A22E7833D001763CE /* validate_memory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_memory.cpp; sourceTree = "<group>"; };
+ A9C2F12B22E7833D001763CE /* validate_image.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_image.cpp; sourceTree = "<group>"; };
+ A9C2F12C22E7833D001763CE /* validate_literals.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_literals.cpp; sourceTree = "<group>"; };
+ A9C2F12D22E7833D001763CE /* instruction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = instruction.cpp; sourceTree = "<group>"; };
+ A9C2F12E22E7833D001763CE /* validate_type.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_type.cpp; sourceTree = "<group>"; };
+ A9C2F12F22E7833D001763CE /* instruction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = instruction.h; sourceTree = "<group>"; };
+ A9C2F13022E7833D001763CE /* validate_execution_limitations.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_execution_limitations.cpp; sourceTree = "<group>"; };
+ A9C2F13122E7833D001763CE /* validate_layout.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_layout.cpp; sourceTree = "<group>"; };
+ A9C2F13222E7833D001763CE /* basic_block.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = basic_block.cpp; sourceTree = "<group>"; };
+ A9C2F13322E7833D001763CE /* validate_function.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_function.cpp; sourceTree = "<group>"; };
+ A9C2F13422E7833D001763CE /* function.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = function.h; sourceTree = "<group>"; };
+ A9C2F13522E7833D001763CE /* validate_composites.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_composites.cpp; sourceTree = "<group>"; };
+ A9C2F13622E7833D001763CE /* validation_state.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validation_state.cpp; sourceTree = "<group>"; };
+ A9C2F13722E7833D001763CE /* validate_primitives.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_primitives.cpp; sourceTree = "<group>"; };
+ A9C2F13822E7833D001763CE /* decoration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = decoration.h; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXGroup section */
@@ -1594,437 +1591,6 @@
path = External;
sourceTree = "<group>";
};
- A94A673D22B17BBB00C661C6 /* source */ = {
- isa = PBXGroup;
- children = (
- A94A673E22B17BBB00C661C6 /* spirv_target_env.cpp */,
- A94A673F22B17BBB00C661C6 /* extinst.spv-amd-shader-explicit-vertex-parameter.grammar.json */,
- A94A674022B17BBB00C661C6 /* spirv_fuzzer_options.h */,
- A94A674122B17BBB00C661C6 /* assembly_grammar.h */,
- A94A674222B17BBB00C661C6 /* enum_set.h */,
- A94A674322B17BBB00C661C6 /* CMakeLists.txt */,
- A94A674422B17BBB00C661C6 /* extinst.spv-amd-shader-ballot.grammar.json */,
- A94A674522B17BBB00C661C6 /* text.cpp */,
- A94A674622B17BBB00C661C6 /* assembly_grammar.cpp */,
- A94A674722B17BBB00C661C6 /* text.h */,
- A94A674822B17BBB00C661C6 /* extensions.cpp */,
- A94A674922B17BBB00C661C6 /* pch_source.cpp */,
- A94A674A22B17BBB00C661C6 /* util */,
- A94A675922B17BBB00C661C6 /* spirv_target_env.h */,
- A94A675A22B17BBB00C661C6 /* table.cpp */,
- A94A675B22B17BBB00C661C6 /* reduce */,
- A94A679422B17BBB00C661C6 /* latest_version_opencl_std_header.h */,
- A94A679522B17BBB00C661C6 /* spirv_optimizer_options.cpp */,
- A94A679622B17BBB00C661C6 /* cfa.h */,
- A94A679722B17BBB00C661C6 /* pch_source.h */,
- A94A679822B17BBB00C661C6 /* enum_string_mapping.h */,
- A94A679922B17BBB00C661C6 /* spirv_fuzzer_options.cpp */,
- A94A679A22B17BBB00C661C6 /* spirv_reducer_options.h */,
- A94A679B22B17BBB00C661C6 /* spirv_validator_options.cpp */,
- A94A679C22B17BBB00C661C6 /* extinst.spv-amd-shader-trinary-minmax.grammar.json */,
- A94A679D22B17BBB00C661C6 /* print.cpp */,
- A94A679E22B17BBB00C661C6 /* spirv_definition.h */,
- A94A679F22B17BBB00C661C6 /* operand.h */,
- A94A67A022B17BBB00C661C6 /* spirv_endian.cpp */,
- A94A67A122B17BBB00C661C6 /* macro.h */,
- A94A67A222B17BBB00C661C6 /* spirv_constant.h */,
- A94A67A322B17BBB00C661C6 /* extinst.spv-amd-gcn-shader.grammar.json */,
- A94A67A422B17BBB00C661C6 /* binary.cpp */,
- A94A67A522B17BBB00C661C6 /* spirv_validator_options.h */,
- A94A67A622B17BBB00C661C6 /* enum_string_mapping.cpp */,
- A94A67A722B17BBB00C661C6 /* text_handler.h */,
- A94A67A822B17BBB00C661C6 /* parsed_operand.h */,
- A94A67A922B17BBB00C661C6 /* name_mapper.h */,
- A94A67AA22B17BBB00C661C6 /* spirv_reducer_options.cpp */,
- A94A67AB22B17BBB00C661C6 /* parsed_operand.cpp */,
- A94A67AC22B17BBB00C661C6 /* diagnostic.h */,
- A94A67AD22B17BBB00C661C6 /* spirv_endian.h */,
- A94A67AE22B17BBB00C661C6 /* name_mapper.cpp */,
- A94A67AF22B17BBB00C661C6 /* extinst.debuginfo.grammar.json */,
- A94A67B022B17BBB00C661C6 /* link */,
- A94A67B322B17BBB00C661C6 /* software_version.cpp */,
- A94A67B422B17BBB00C661C6 /* opcode.cpp */,
- A94A67B522B17BBB00C661C6 /* print.h */,
- A94A67B622B17BBB00C661C6 /* ext_inst.cpp */,
- A94A67B722B17BBB00C661C6 /* disassemble.h */,
- A94A67B822B17BBB00C661C6 /* opt */,
- A94A688322B17BBB00C661C6 /* table.h */,
- A94A68AF22B17BBB00C661C6 /* ext_inst.h */,
- A94A68B022B17BBB00C661C6 /* diagnostic.cpp */,
- A94A68B122B17BBB00C661C6 /* latest_version_spirv_header.h */,
- A94A68B222B17BBB00C661C6 /* libspirv.cpp */,
- A94A68B322B17BBB00C661C6 /* instruction.h */,
- A94A68B422B17BBB00C661C6 /* spirv_optimizer_options.h */,
- A94A68B522B17BBB00C661C6 /* opcode.h */,
- A94A68B622B17BBB00C661C6 /* operand.cpp */,
- A94A68B722B17BBB00C661C6 /* latest_version_glsl_std_450_header.h */,
- A94A68B822B17BBB00C661C6 /* extensions.h */,
- A94A68B922B17BBB00C661C6 /* disassemble.cpp */,
- A94A68BA22B17BBB00C661C6 /* binary.h */,
- A94A68BB22B17BBB00C661C6 /* text_handler.cpp */,
- A94A68BC22B17BBB00C661C6 /* val */,
- );
- path = source;
- sourceTree = "<group>";
- };
- A94A674A22B17BBB00C661C6 /* util */ = {
- isa = PBXGroup;
- children = (
- A94A674B22B17BBB00C661C6 /* parse_number.h */,
- A94A674C22B17BBB00C661C6 /* ilist_node.h */,
- A94A674D22B17BBB00C661C6 /* make_unique.h */,
- A94A674E22B17BBB00C661C6 /* string_utils.h */,
- A94A674F22B17BBB00C661C6 /* small_vector.h */,
- A94A675022B17BBB00C661C6 /* timer.cpp */,
- A94A675122B17BBB00C661C6 /* timer.h */,
- A94A675222B17BBB00C661C6 /* string_utils.cpp */,
- A94A675322B17BBB00C661C6 /* bit_vector.h */,
- A94A675422B17BBB00C661C6 /* bitutils.h */,
- A94A675522B17BBB00C661C6 /* hex_float.h */,
- A94A675622B17BBB00C661C6 /* parse_number.cpp */,
- A94A675722B17BBB00C661C6 /* bit_vector.cpp */,
- A94A675822B17BBB00C661C6 /* ilist.h */,
- );
- path = util;
- sourceTree = "<group>";
- };
- A94A675B22B17BBB00C661C6 /* reduce */ = {
- isa = PBXGroup;
- children = (
- A94A675C22B17BBB00C661C6 /* operand_to_undef_reduction_opportunity_finder.h */,
- A94A675D22B17BBB00C661C6 /* remove_selection_reduction_opportunity.cpp */,
- A94A675E22B17BBB00C661C6 /* remove_block_reduction_opportunity.h */,
- A94A675F22B17BBB00C661C6 /* operand_to_dominating_id_reduction_opportunity_finder.h */,
- A94A676022B17BBB00C661C6 /* reduction_pass.cpp */,
- A94A676122B17BBB00C661C6 /* operand_to_const_reduction_opportunity_finder.cpp */,
- A94A676222B17BBB00C661C6 /* operand_to_const_reduction_opportunity_finder.h */,
- A94A676322B17BBB00C661C6 /* CMakeLists.txt */,
- A94A676422B17BBB00C661C6 /* reduction_util.cpp */,
- A94A676522B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity_finder.cpp */,
- A94A676622B17BBB00C661C6 /* simple_conditional_branch_to_branch_reduction_opportunity.h */,
- A94A676722B17BBB00C661C6 /* remove_function_reduction_opportunity_finder.cpp */,
- A94A676822B17BBB00C661C6 /* remove_instruction_reduction_opportunity.h */,
- A94A676922B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h */,
- A94A676A22B17BBB00C661C6 /* simple_conditional_branch_to_branch_reduction_opportunity.cpp */,
- A94A676B22B17BBB00C661C6 /* remove_function_reduction_opportunity.cpp */,
- A94A676C22B17BBB00C661C6 /* remove_opname_instruction_reduction_opportunity_finder.h */,
- A94A676D22B17BBB00C661C6 /* simple_conditional_branch_to_branch_opportunity_finder.cpp */,
- A94A676E22B17BBB00C661C6 /* remove_selection_reduction_opportunity_finder.cpp */,
- A94A676F22B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp */,
- A94A677022B17BBB00C661C6 /* simple_conditional_branch_to_branch_opportunity_finder.h */,
- A94A677122B17BBB00C661C6 /* merge_blocks_reduction_opportunity.cpp */,
- A94A677222B17BBB00C661C6 /* change_operand_reduction_opportunity.cpp */,
- A94A677322B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity.h */,
- A94A677422B17BBB00C661C6 /* remove_function_reduction_opportunity.h */,
- A94A677522B17BBB00C661C6 /* change_operand_to_undef_reduction_opportunity.h */,
- A94A677622B17BBB00C661C6 /* remove_unreferenced_instruction_reduction_opportunity_finder.cpp */,
- A94A677722B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity_finder.h */,
- A94A677822B17BBB00C661C6 /* remove_selection_reduction_opportunity.h */,
- A94A677922B17BBB00C661C6 /* remove_instruction_reduction_opportunity.cpp */,
- A94A677A22B17BBB00C661C6 /* remove_selection_reduction_opportunity_finder.h */,
- A94A677B22B17BBB00C661C6 /* merge_blocks_reduction_opportunity_finder.h */,
- A94A677C22B17BBB00C661C6 /* remove_opname_instruction_reduction_opportunity_finder.cpp */,
- A94A677D22B17BBB00C661C6 /* pch_source_reduce.cpp */,
- A94A677E22B17BBB00C661C6 /* reducer.cpp */,
- A94A677F22B17BBB00C661C6 /* operand_to_undef_reduction_opportunity_finder.cpp */,
- A94A678022B17BBB00C661C6 /* remove_function_reduction_opportunity_finder.h */,
- A94A678122B17BBB00C661C6 /* pch_source_reduce.h */,
- A94A678222B17BBB00C661C6 /* remove_unreferenced_instruction_reduction_opportunity_finder.h */,
- A94A678322B17BBB00C661C6 /* merge_blocks_reduction_opportunity_finder.cpp */,
- A94A678422B17BBB00C661C6 /* reduction_opportunity.cpp */,
- A94A678522B17BBB00C661C6 /* reducer.h */,
- A94A678622B17BBB00C661C6 /* change_operand_to_undef_reduction_opportunity.cpp */,
- A94A678722B17BBB00C661C6 /* reduction_opportunity.h */,
- A94A678822B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h */,
- A94A678922B17BBB00C661C6 /* operand_to_dominating_id_reduction_opportunity_finder.cpp */,
- A94A678A22B17BBB00C661C6 /* reduction_opportunity_finder.h */,
- A94A678B22B17BBB00C661C6 /* change_operand_reduction_opportunity.h */,
- A94A678C22B17BBB00C661C6 /* remove_block_reduction_opportunity_finder.h */,
- A94A678D22B17BBB00C661C6 /* remove_block_reduction_opportunity_finder.cpp */,
- A94A678E22B17BBB00C661C6 /* reduction_util.h */,
- A94A678F22B17BBB00C661C6 /* merge_blocks_reduction_opportunity.h */,
- A94A679022B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp */,
- A94A679122B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity.cpp */,
- A94A679222B17BBB00C661C6 /* remove_block_reduction_opportunity.cpp */,
- A94A679322B17BBB00C661C6 /* reduction_pass.h */,
- );
- path = reduce;
- sourceTree = "<group>";
- };
- A94A67B022B17BBB00C661C6 /* link */ = {
- isa = PBXGroup;
- children = (
- A94A67B122B17BBB00C661C6 /* CMakeLists.txt */,
- A94A67B222B17BBB00C661C6 /* linker.cpp */,
- );
- path = link;
- sourceTree = "<group>";
- };
- A94A67B822B17BBB00C661C6 /* opt */ = {
- isa = PBXGroup;
- children = (
- A94A67B922B17BBB00C661C6 /* optimizer.cpp */,
- A94A67BA22B17BBB00C661C6 /* if_conversion.h */,
- A94A67BB22B17BBB00C661C6 /* register_pressure.cpp */,
- A94A67BC22B17BBB00C661C6 /* loop_utils.cpp */,
- A94A67BD22B17BBB00C661C6 /* merge_return_pass.h */,
- A94A67BE22B17BBB00C661C6 /* inline_opaque_pass.h */,
- A94A67BF22B17BBB00C661C6 /* loop_fusion.h */,
- A94A67C022B17BBB00C661C6 /* combine_access_chains.cpp */,
- A94A67C122B17BBB00C661C6 /* build_module.cpp */,
- A94A67C222B17BBB00C661C6 /* composite.h */,
- A94A67C322B17BBB00C661C6 /* compact_ids_pass.h */,
- A94A67C422B17BBB00C661C6 /* register_pressure.h */,
- A94A67C522B17BBB00C661C6 /* tree_iterator.h */,
- A94A67C622B17BBB00C661C6 /* strip_atomic_counter_memory_pass.h */,
- A94A67C722B17BBB00C661C6 /* legalize_vector_shuffle_pass.h */,
- A94A67C822B17BBB00C661C6 /* local_single_store_elim_pass.h */,
- A94A67C922B17BBB00C661C6 /* reduce_load_size.h */,
- A94A67CA22B17BBB00C661C6 /* code_sink.cpp */,
- A94A67CB22B17BBB00C661C6 /* types.cpp */,
- A94A67CC22B17BBB00C661C6 /* scalar_analysis.h */,
- A94A67CD22B17BBB00C661C6 /* strip_debug_info_pass.h */,
- A94A67CE22B17BBB00C661C6 /* cfg.cpp */,
- A94A67CF22B17BBB00C661C6 /* strip_atomic_counter_memory_pass.cpp */,
- A94A67D022B17BBB00C661C6 /* decoration_manager.cpp */,
- A94A67D122B17BBB00C661C6 /* local_single_block_elim_pass.cpp */,
- A94A67D222B17BBB00C661C6 /* freeze_spec_constant_value_pass.cpp */,
- A94A67D322B17BBB00C661C6 /* replace_invalid_opc.h */,
- A94A67D422B17BBB00C661C6 /* local_access_chain_convert_pass.h */,
- A94A67D522B17BBB00C661C6 /* inst_bindless_check_pass.cpp */,
- A94A67D622B17BBB00C661C6 /* local_redundancy_elimination.cpp */,
- A94A67D722B17BBB00C661C6 /* CMakeLists.txt */,
- A94A67D822B17BBB00C661C6 /* instrument_pass.cpp */,
- A94A67D922B17BBB00C661C6 /* propagator.h */,
- A94A67DA22B17BBB00C661C6 /* instruction_list.h */,
- A94A67DB22B17BBB00C661C6 /* feature_manager.cpp */,
- A94A67DC22B17BBB00C661C6 /* pass.cpp */,
- A94A67DD22B17BBB00C661C6 /* loop_fission.cpp */,
- A94A67DE22B17BBB00C661C6 /* dominator_tree.cpp */,
- A94A67DF22B17BBB00C661C6 /* merge_return_pass.cpp */,
- A94A67E022B17BBB00C661C6 /* ir_context.h */,
- A94A67E122B17BBB00C661C6 /* eliminate_dead_constant_pass.cpp */,
- A94A67E222B17BBB00C661C6 /* cfg_cleanup_pass.cpp */,
- A94A67E322B17BBB00C661C6 /* const_folding_rules.cpp */,
- A94A67E422B17BBB00C661C6 /* loop_unroller.h */,
- A94A67E522B17BBB00C661C6 /* strip_debug_info_pass.cpp */,
- A94A67E622B17BBB00C661C6 /* ssa_rewrite_pass.cpp */,
- A94A67E722B17BBB00C661C6 /* loop_dependence.cpp */,
- A94A67E822B17BBB00C661C6 /* unify_const_pass.h */,
- A94A67E922B17BBB00C661C6 /* ir_loader.h */,
- A94A67EA22B17BBB00C661C6 /* types.h */,
- A94A67EB22B17BBB00C661C6 /* fold_spec_constant_op_and_composite_pass.h */,
- A94A67EC22B17BBB00C661C6 /* mem_pass.cpp */,
- A94A67ED22B17BBB00C661C6 /* basic_block.h */,
- A94A67EE22B17BBB00C661C6 /* remove_duplicates_pass.cpp */,
- A94A67EF22B17BBB00C661C6 /* dead_variable_elimination.cpp */,
- A94A67F022B17BBB00C661C6 /* block_merge_pass.h */,
- A94A67F122B17BBB00C661C6 /* module.cpp */,
- A94A67F222B17BBB00C661C6 /* fold_spec_constant_op_and_composite_pass.cpp */,
- A94A67F322B17BBB00C661C6 /* loop_unswitch_pass.cpp */,
- A94A67F422B17BBB00C661C6 /* unify_const_pass.cpp */,
- A94A67F522B17BBB00C661C6 /* type_manager.cpp */,
- A94A67F622B17BBB00C661C6 /* generate_webgpu_initializers_pass.cpp */,
- A94A67F722B17BBB00C661C6 /* private_to_local_pass.h */,
- A94A67F822B17BBB00C661C6 /* inline_pass.cpp */,
- A94A67F922B17BBB00C661C6 /* def_use_manager.h */,
- A94A67FA22B17BBB00C661C6 /* ir_loader.cpp */,
- A94A67FB22B17BBB00C661C6 /* cfg_cleanup_pass.h */,
- A94A67FC22B17BBB00C661C6 /* licm_pass.cpp */,
- A94A67FD22B17BBB00C661C6 /* eliminate_dead_functions_pass.cpp */,
- A94A67FE22B17BBB00C661C6 /* local_redundancy_elimination.h */,
- A94A67FF22B17BBB00C661C6 /* split_invalid_unreachable_pass.cpp */,
- A94A680022B17BBB00C661C6 /* loop_peeling.h */,
- A94A680122B17BBB00C661C6 /* vector_dce.cpp */,
- A94A680222B17BBB00C661C6 /* block_merge_util.h */,
- A94A680322B17BBB00C661C6 /* loop_unroller.cpp */,
- A94A680422B17BBB00C661C6 /* constants.cpp */,
- A94A680522B17BBB00C661C6 /* loop_fusion_pass.h */,
- A94A680622B17BBB00C661C6 /* struct_cfg_analysis.h */,
- A94A680722B17BBB00C661C6 /* common_uniform_elim_pass.cpp */,
- A94A680822B17BBB00C661C6 /* def_use_manager.cpp */,
- A94A680922B17BBB00C661C6 /* strip_reflect_info_pass.cpp */,
- A94A680A22B17BBB00C661C6 /* decoration_manager.h */,
- A94A680B22B17BBB00C661C6 /* ccp_pass.cpp */,
- A94A680C22B17BBB00C661C6 /* process_lines_pass.h */,
- A94A680D22B17BBB00C661C6 /* local_single_block_elim_pass.h */,
- A94A680E22B17BBB00C661C6 /* pch_source_opt.cpp */,
- A94A680F22B17BBB00C661C6 /* strength_reduction_pass.h */,
- A94A681022B17BBB00C661C6 /* aggressive_dead_code_elim_pass.cpp */,
- A94A681122B17BBB00C661C6 /* eliminate_dead_functions_util.cpp */,
- A94A681222B17BBB00C661C6 /* simplification_pass.cpp */,
- A94A681322B17BBB00C661C6 /* dead_branch_elim_pass.cpp */,
- A94A681422B17BBB00C661C6 /* flatten_decoration_pass.cpp */,
- A94A681522B17BBB00C661C6 /* dead_insert_elim_pass.h */,
- A94A681622B17BBB00C661C6 /* folding_rules.cpp */,
- A94A681722B17BBB00C661C6 /* freeze_spec_constant_value_pass.h */,
- A94A681822B17BBB00C661C6 /* ir_context.cpp */,
- A94A681922B17BBB00C661C6 /* instrument_pass.h */,
- A94A681A22B17BBB00C661C6 /* mem_pass.h */,
- A94A681B22B17BBB00C661C6 /* loop_descriptor.cpp */,
- A94A681C22B17BBB00C661C6 /* local_ssa_elim_pass.cpp */,
- A94A681D22B17BBB00C661C6 /* eliminate_dead_members_pass.h */,
- A94A681E22B17BBB00C661C6 /* function.cpp */,
- A94A681F22B17BBB00C661C6 /* instruction_list.cpp */,
- A94A682022B17BBB00C661C6 /* composite.cpp */,
- A94A682122B17BBB00C661C6 /* process_lines_pass.cpp */,
- A94A682222B17BBB00C661C6 /* inline_pass.h */,
- A94A682322B17BBB00C661C6 /* loop_dependence.h */,
- A94A682422B17BBB00C661C6 /* value_number_table.h */,
- A94A682522B17BBB00C661C6 /* flatten_decoration_pass.h */,
- A94A682622B17BBB00C661C6 /* if_conversion.cpp */,
- A94A682722B17BBB00C661C6 /* inline_exhaustive_pass.h */,
- A94A682822B17BBB00C661C6 /* constants.h */,
- A94A682922B17BBB00C661C6 /* eliminate_dead_members_pass.cpp */,
- A94A682A22B17BBB00C661C6 /* strength_reduction_pass.cpp */,
- A94A682B22B17BBB00C661C6 /* block_merge_util.cpp */,
- A94A682C22B17BBB00C661C6 /* upgrade_memory_model.h */,
- A94A682D22B17BBB00C661C6 /* copy_prop_arrays.cpp */,
- A94A682E22B17BBB00C661C6 /* pass_manager.cpp */,
- A94A682F22B17BBB00C661C6 /* inline_exhaustive_pass.cpp */,
- A94A683022B17BBB00C661C6 /* loop_fission.h */,
- A94A683122B17BBB00C661C6 /* workaround1209.h */,
- A94A683222B17BBB00C661C6 /* loop_fusion_pass.cpp */,
- A94A683322B17BBB00C661C6 /* log.h */,
- A94A683422B17BBB00C661C6 /* split_invalid_unreachable_pass.h */,
- A94A683522B17BBB00C661C6 /* copy_prop_arrays.h */,
- A94A683622B17BBB00C661C6 /* eliminate_dead_constant_pass.h */,
- A94A683722B17BBB00C661C6 /* dead_insert_elim_pass.cpp */,
- A94A683822B17BBB00C661C6 /* ssa_rewrite_pass.h */,
- A94A683922B17BBB00C661C6 /* scalar_analysis.cpp */,
- A94A683A22B17BBB00C661C6 /* dead_variable_elimination.h */,
- A94A683B22B17BBB00C661C6 /* block_merge_pass.cpp */,
- A94A683C22B17BBB00C661C6 /* dominator_analysis.h */,
- A94A683D22B17BBB00C661C6 /* pass.h */,
- A94A683E22B17BBB00C661C6 /* folding_rules.h */,
- A94A683F22B17BBB00C661C6 /* eliminate_dead_functions_pass.h */,
- A94A684022B17BBB00C661C6 /* common_uniform_elim_pass.h */,
- A94A684122B17BBB00C661C6 /* eliminate_dead_functions_util.h */,
- A94A684222B17BBB00C661C6 /* fold.h */,
- A94A684322B17BBB00C661C6 /* local_single_store_elim_pass.cpp */,
- A94A684422B17BBB00C661C6 /* dead_branch_elim_pass.h */,
- A94A684522B17BBB00C661C6 /* private_to_local_pass.cpp */,
- A94A684622B17BBB00C661C6 /* scalar_analysis_nodes.h */,
- A94A684722B17BBB00C661C6 /* propagator.cpp */,
- A94A684822B17BBB00C661C6 /* fix_storage_class.h */,
- A94A684922B17BBB00C661C6 /* loop_dependence_helpers.cpp */,
- A94A684A22B17BBB00C661C6 /* set_spec_constant_default_value_pass.cpp */,
- A94A684B22B17BBB00C661C6 /* passes.h */,
- A94A684C22B17BBB00C661C6 /* fold.cpp */,
- A94A684D22B17BBB00C661C6 /* strip_reflect_info_pass.h */,
- A94A684E22B17BBB00C661C6 /* scalar_replacement_pass.cpp */,
- A94A684F22B17BBB00C661C6 /* simplification_pass.h */,
- A94A685022B17BBB00C661C6 /* remove_duplicates_pass.h */,
- A94A685122B17BBB00C661C6 /* redundancy_elimination.cpp */,
- A94A685222B17BBB00C661C6 /* reflect.h */,
- A94A685322B17BBB00C661C6 /* workaround1209.cpp */,
- A94A685422B17BBB00C661C6 /* null_pass.h */,
- A94A685522B17BBB00C661C6 /* const_folding_rules.h */,
- A94A685622B17BBB00C661C6 /* scalar_replacement_pass.h */,
- A94A685722B17BBB00C661C6 /* instruction.cpp */,
- A94A685822B17BBB00C661C6 /* pch_source_opt.h */,
- A94A685922B17BBB00C661C6 /* reduce_load_size.cpp */,
- A94A685A22B17BBB00C661C6 /* redundancy_elimination.h */,
- A94A685B22B17BBB00C661C6 /* fix_storage_class.cpp */,
- A94A685C22B17BBB00C661C6 /* value_number_table.cpp */,
- A94A685D22B17BBB00C661C6 /* local_ssa_elim_pass.h */,
- A94A685E22B17BBB00C661C6 /* inline_opaque_pass.cpp */,
- A94A685F22B17BBB00C661C6 /* replace_invalid_opc.cpp */,
- A94A686022B17BBB00C661C6 /* loop_utils.h */,
- A94A686122B17BBB00C661C6 /* module.h */,
- A94A686222B17BBB00C661C6 /* dominator_analysis.cpp */,
- A94A686322B17BBB00C661C6 /* decompose_initialized_variables_pass.cpp */,
- A94A686422B17BBB00C661C6 /* ir_builder.h */,
- A94A686522B17BBB00C661C6 /* loop_unswitch_pass.h */,
- A94A686622B17BBB00C661C6 /* cfg.h */,
- A94A686722B17BBB00C661C6 /* code_sink.h */,
- A94A686822B17BBB00C661C6 /* loop_descriptor.h */,
- A94A686922B17BBB00C661C6 /* generate_webgpu_initializers_pass.h */,
- A94A686A22B17BBB00C661C6 /* instruction.h */,
- A94A686B22B17BBB00C661C6 /* aggressive_dead_code_elim_pass.h */,
- A94A686C22B17BBB00C661C6 /* struct_cfg_analysis.cpp */,
- A94A686D22B17BBB00C661C6 /* vector_dce.h */,
- A94A686E22B17BBB00C661C6 /* combine_access_chains.h */,
- A94A686F22B17BBB00C661C6 /* pass_manager.h */,
- A94A687022B17BBB00C661C6 /* local_access_chain_convert_pass.cpp */,
- A94A687122B17BBB00C661C6 /* basic_block.cpp */,
- A94A687222B17BBB00C661C6 /* iterator.h */,
- A94A687322B17BBB00C661C6 /* licm_pass.h */,
- A94A687422B17BBB00C661C6 /* build_module.h */,
- A94A687522B17BBB00C661C6 /* ccp_pass.h */,
- A94A687622B17BBB00C661C6 /* decompose_initialized_variables_pass.h */,
- A94A687722B17BBB00C661C6 /* function.h */,
- A94A687822B17BBB00C661C6 /* loop_fusion.cpp */,
- A94A687922B17BBB00C661C6 /* upgrade_memory_model.cpp */,
- A94A687A22B17BBB00C661C6 /* feature_manager.h */,
- A94A687B22B17BBB00C661C6 /* inst_bindless_check_pass.h */,
- A94A687C22B17BBB00C661C6 /* scalar_analysis_simplification.cpp */,
- A94A687D22B17BBB00C661C6 /* set_spec_constant_default_value_pass.h */,
- A94A687E22B17BBB00C661C6 /* dominator_tree.h */,
- A94A687F22B17BBB00C661C6 /* legalize_vector_shuffle_pass.cpp */,
- A94A688022B17BBB00C661C6 /* type_manager.h */,
- A94A688122B17BBB00C661C6 /* compact_ids_pass.cpp */,
- A94A688222B17BBB00C661C6 /* loop_peeling.cpp */,
- );
- path = opt;
- sourceTree = "<group>";
- };
- A94A68BC22B17BBB00C661C6 /* val */ = {
- isa = PBXGroup;
- children = (
- A94A68BD22B17BBB00C661C6 /* validate_annotation.cpp */,
- A94A68BE22B17BBB00C661C6 /* validate_misc.cpp */,
- A94A68BF22B17BBB00C661C6 /* validate_cfg.cpp */,
- A94A68C022B17BBB00C661C6 /* validate_capability.cpp */,
- A94A68C122B17BBB00C661C6 /* construct.h */,
- A94A68C222B17BBB00C661C6 /* validate_barriers.cpp */,
- A94A68C322B17BBB00C661C6 /* validate_non_uniform.cpp */,
- A94A68C422B17BBB00C661C6 /* validate_scopes.cpp */,
- A94A68C522B17BBB00C661C6 /* validate_atomics.cpp */,
- A94A68C622B17BBB00C661C6 /* basic_block.h */,
- A94A68C722B17BBB00C661C6 /* validate_instruction.cpp */,
- A94A68C822B17BBB00C661C6 /* validate_decorations.cpp */,
- A94A68C922B17BBB00C661C6 /* validate_debug.cpp */,
- A94A68CA22B17BBB00C661C6 /* validate_builtins.cpp */,
- A94A68CB22B17BBB00C661C6 /* validate_interfaces.cpp */,
- A94A68CC22B17BBB00C661C6 /* validate.cpp */,
- A94A68CD22B17BBB00C661C6 /* validation_state.h */,
- A94A68CE22B17BBB00C661C6 /* validate_constants.cpp */,
- A94A68CF22B17BBB00C661C6 /* validate_bitwise.cpp */,
- A94A68D022B17BBB00C661C6 /* validate_extensions.cpp */,
- A94A68D122B17BBB00C661C6 /* construct.cpp */,
- A94A68D222B17BBB00C661C6 /* function.cpp */,
- A94A68D322B17BBB00C661C6 /* validate.h */,
- A94A68D422B17BBB00C661C6 /* validate_adjacency.cpp */,
- A94A68D522B17BBB00C661C6 /* validate_conversion.cpp */,
- A94A68D622B17BBB00C661C6 /* validate_datarules.cpp */,
- A94A68D722B17BBB00C661C6 /* validate_scopes.h */,
- A94A68D822B17BBB00C661C6 /* validate_id.cpp */,
- A94A68D922B17BBB00C661C6 /* validate_memory_semantics.h */,
- A94A68DA22B17BBB00C661C6 /* validate_arithmetics.cpp */,
- A94A68DB22B17BBB00C661C6 /* validate_mode_setting.cpp */,
- A94A68DC22B17BBB00C661C6 /* validate_memory_semantics.cpp */,
- A94A68DD22B17BBB00C661C6 /* validate_logicals.cpp */,
- A94A68DE22B17BBB00C661C6 /* validate_derivatives.cpp */,
- A94A68DF22B17BBB00C661C6 /* validate_memory.cpp */,
- A94A68E022B17BBB00C661C6 /* validate_image.cpp */,
- A94A68E122B17BBB00C661C6 /* validate_literals.cpp */,
- A94A68E222B17BBB00C661C6 /* instruction.cpp */,
- A94A68E322B17BBB00C661C6 /* validate_type.cpp */,
- A94A68E422B17BBB00C661C6 /* instruction.h */,
- A94A68E522B17BBB00C661C6 /* validate_execution_limitations.cpp */,
- A94A68E622B17BBB00C661C6 /* validate_layout.cpp */,
- A94A68E722B17BBB00C661C6 /* basic_block.cpp */,
- A94A68E822B17BBB00C661C6 /* validate_function.cpp */,
- A94A68E922B17BBB00C661C6 /* function.h */,
- A94A68EA22B17BBB00C661C6 /* validate_composites.cpp */,
- A94A68EB22B17BBB00C661C6 /* validation_state.cpp */,
- A94A68EC22B17BBB00C661C6 /* validate_primitives.cpp */,
- A94A68ED22B17BBB00C661C6 /* decoration.h */,
- );
- path = val;
- sourceTree = "<group>";
- };
A9679AAB21D2699800856BF7 /* Scripts */ = {
isa = PBXGroup;
children = (
@@ -2038,7 +1604,7 @@
A972A82421CECC410013AB25 /* SPIRV-Tools */ = {
isa = PBXGroup;
children = (
- A94A673D22B17BBB00C661C6 /* source */,
+ A9C2EF7722E7833C001763CE /* source */,
);
name = "SPIRV-Tools";
path = "glslang/External/spirv-tools";
@@ -2263,6 +1829,436 @@
path = "SPIRV-Cross";
sourceTree = "<group>";
};
+ A9C2EF7722E7833C001763CE /* source */ = {
+ isa = PBXGroup;
+ children = (
+ A9C2EF7822E7833C001763CE /* spirv_target_env.cpp */,
+ A9C2EF7922E7833C001763CE /* extinst.spv-amd-shader-explicit-vertex-parameter.grammar.json */,
+ A9C2EF7A22E7833C001763CE /* spirv_fuzzer_options.h */,
+ A9C2EF7B22E7833C001763CE /* assembly_grammar.h */,
+ A9C2EF7C22E7833C001763CE /* enum_set.h */,
+ A9C2EF7D22E7833C001763CE /* CMakeLists.txt */,
+ A9C2EF7E22E7833C001763CE /* extinst.spv-amd-shader-ballot.grammar.json */,
+ A9C2EF7F22E7833C001763CE /* text.cpp */,
+ A9C2EF8022E7833C001763CE /* assembly_grammar.cpp */,
+ A9C2EF8122E7833C001763CE /* text.h */,
+ A9C2EF8222E7833C001763CE /* extensions.cpp */,
+ A9C2EF8322E7833C001763CE /* pch_source.cpp */,
+ A9C2EF8422E7833C001763CE /* util */,
+ A9C2EF9322E7833C001763CE /* spirv_target_env.h */,
+ A9C2EF9422E7833C001763CE /* table.cpp */,
+ A9C2EF9522E7833C001763CE /* reduce */,
+ A9C2EFCE22E7833C001763CE /* latest_version_opencl_std_header.h */,
+ A9C2EFCF22E7833C001763CE /* spirv_optimizer_options.cpp */,
+ A9C2EFD022E7833C001763CE /* cfa.h */,
+ A9C2EFD122E7833C001763CE /* pch_source.h */,
+ A9C2EFD222E7833C001763CE /* enum_string_mapping.h */,
+ A9C2EFD322E7833C001763CE /* spirv_fuzzer_options.cpp */,
+ A9C2EFD422E7833C001763CE /* spirv_reducer_options.h */,
+ A9C2EFD522E7833C001763CE /* spirv_validator_options.cpp */,
+ A9C2EFD622E7833C001763CE /* extinst.spv-amd-shader-trinary-minmax.grammar.json */,
+ A9C2EFD722E7833C001763CE /* print.cpp */,
+ A9C2EFD822E7833C001763CE /* spirv_definition.h */,
+ A9C2EFD922E7833C001763CE /* operand.h */,
+ A9C2EFDA22E7833C001763CE /* spirv_endian.cpp */,
+ A9C2EFDB22E7833C001763CE /* macro.h */,
+ A9C2EFDC22E7833C001763CE /* spirv_constant.h */,
+ A9C2EFDD22E7833C001763CE /* extinst.spv-amd-gcn-shader.grammar.json */,
+ A9C2EFDE22E7833C001763CE /* binary.cpp */,
+ A9C2EFDF22E7833C001763CE /* spirv_validator_options.h */,
+ A9C2EFE022E7833C001763CE /* enum_string_mapping.cpp */,
+ A9C2EFE122E7833C001763CE /* text_handler.h */,
+ A9C2EFE222E7833C001763CE /* parsed_operand.h */,
+ A9C2EFE322E7833C001763CE /* name_mapper.h */,
+ A9C2EFE422E7833C001763CE /* spirv_reducer_options.cpp */,
+ A9C2EFE522E7833C001763CE /* parsed_operand.cpp */,
+ A9C2EFE622E7833C001763CE /* diagnostic.h */,
+ A9C2EFE722E7833C001763CE /* spirv_endian.h */,
+ A9C2EFE822E7833C001763CE /* name_mapper.cpp */,
+ A9C2EFE922E7833C001763CE /* extinst.debuginfo.grammar.json */,
+ A9C2EFEA22E7833C001763CE /* link */,
+ A9C2EFED22E7833C001763CE /* software_version.cpp */,
+ A9C2EFEE22E7833C001763CE /* opcode.cpp */,
+ A9C2EFEF22E7833C001763CE /* print.h */,
+ A9C2EFF022E7833C001763CE /* ext_inst.cpp */,
+ A9C2EFF122E7833C001763CE /* disassemble.h */,
+ A9C2EFF222E7833C001763CE /* opt */,
+ A9C2F0BB22E7833C001763CE /* table.h */,
+ A9C2F0F922E7833D001763CE /* ext_inst.h */,
+ A9C2F0FA22E7833D001763CE /* diagnostic.cpp */,
+ A9C2F0FB22E7833D001763CE /* latest_version_spirv_header.h */,
+ A9C2F0FC22E7833D001763CE /* libspirv.cpp */,
+ A9C2F0FD22E7833D001763CE /* instruction.h */,
+ A9C2F0FE22E7833D001763CE /* spirv_optimizer_options.h */,
+ A9C2F0FF22E7833D001763CE /* opcode.h */,
+ A9C2F10022E7833D001763CE /* operand.cpp */,
+ A9C2F10122E7833D001763CE /* latest_version_glsl_std_450_header.h */,
+ A9C2F10222E7833D001763CE /* extensions.h */,
+ A9C2F10322E7833D001763CE /* disassemble.cpp */,
+ A9C2F10422E7833D001763CE /* binary.h */,
+ A9C2F10522E7833D001763CE /* text_handler.cpp */,
+ A9C2F10622E7833D001763CE /* val */,
+ );
+ path = source;
+ sourceTree = "<group>";
+ };
+ A9C2EF8422E7833C001763CE /* util */ = {
+ isa = PBXGroup;
+ children = (
+ A9C2EF8522E7833C001763CE /* parse_number.h */,
+ A9C2EF8622E7833C001763CE /* ilist_node.h */,
+ A9C2EF8722E7833C001763CE /* make_unique.h */,
+ A9C2EF8822E7833C001763CE /* string_utils.h */,
+ A9C2EF8922E7833C001763CE /* small_vector.h */,
+ A9C2EF8A22E7833C001763CE /* timer.cpp */,
+ A9C2EF8B22E7833C001763CE /* timer.h */,
+ A9C2EF8C22E7833C001763CE /* string_utils.cpp */,
+ A9C2EF8D22E7833C001763CE /* bit_vector.h */,
+ A9C2EF8E22E7833C001763CE /* bitutils.h */,
+ A9C2EF8F22E7833C001763CE /* hex_float.h */,
+ A9C2EF9022E7833C001763CE /* parse_number.cpp */,
+ A9C2EF9122E7833C001763CE /* bit_vector.cpp */,
+ A9C2EF9222E7833C001763CE /* ilist.h */,
+ );
+ path = util;
+ sourceTree = "<group>";
+ };
+ A9C2EF9522E7833C001763CE /* reduce */ = {
+ isa = PBXGroup;
+ children = (
+ A9C2EF9622E7833C001763CE /* operand_to_undef_reduction_opportunity_finder.h */,
+ A9C2EF9722E7833C001763CE /* remove_selection_reduction_opportunity.cpp */,
+ A9C2EF9822E7833C001763CE /* remove_block_reduction_opportunity.h */,
+ A9C2EF9922E7833C001763CE /* operand_to_dominating_id_reduction_opportunity_finder.h */,
+ A9C2EF9A22E7833C001763CE /* reduction_pass.cpp */,
+ A9C2EF9B22E7833C001763CE /* operand_to_const_reduction_opportunity_finder.cpp */,
+ A9C2EF9C22E7833C001763CE /* operand_to_const_reduction_opportunity_finder.h */,
+ A9C2EF9D22E7833C001763CE /* CMakeLists.txt */,
+ A9C2EF9E22E7833C001763CE /* reduction_util.cpp */,
+ A9C2EF9F22E7833C001763CE /* structured_loop_to_selection_reduction_opportunity_finder.cpp */,
+ A9C2EFA022E7833C001763CE /* simple_conditional_branch_to_branch_reduction_opportunity.h */,
+ A9C2EFA122E7833C001763CE /* remove_function_reduction_opportunity_finder.cpp */,
+ A9C2EFA222E7833C001763CE /* remove_instruction_reduction_opportunity.h */,
+ A9C2EFA322E7833C001763CE /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h */,
+ A9C2EFA422E7833C001763CE /* simple_conditional_branch_to_branch_reduction_opportunity.cpp */,
+ A9C2EFA522E7833C001763CE /* remove_function_reduction_opportunity.cpp */,
+ A9C2EFA622E7833C001763CE /* remove_opname_instruction_reduction_opportunity_finder.h */,
+ A9C2EFA722E7833C001763CE /* simple_conditional_branch_to_branch_opportunity_finder.cpp */,
+ A9C2EFA822E7833C001763CE /* remove_selection_reduction_opportunity_finder.cpp */,
+ A9C2EFA922E7833C001763CE /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp */,
+ A9C2EFAA22E7833C001763CE /* simple_conditional_branch_to_branch_opportunity_finder.h */,
+ A9C2EFAB22E7833C001763CE /* merge_blocks_reduction_opportunity.cpp */,
+ A9C2EFAC22E7833C001763CE /* change_operand_reduction_opportunity.cpp */,
+ A9C2EFAD22E7833C001763CE /* structured_loop_to_selection_reduction_opportunity.h */,
+ A9C2EFAE22E7833C001763CE /* remove_function_reduction_opportunity.h */,
+ A9C2EFAF22E7833C001763CE /* change_operand_to_undef_reduction_opportunity.h */,
+ A9C2EFB022E7833C001763CE /* remove_unreferenced_instruction_reduction_opportunity_finder.cpp */,
+ A9C2EFB122E7833C001763CE /* structured_loop_to_selection_reduction_opportunity_finder.h */,
+ A9C2EFB222E7833C001763CE /* remove_selection_reduction_opportunity.h */,
+ A9C2EFB322E7833C001763CE /* remove_instruction_reduction_opportunity.cpp */,
+ A9C2EFB422E7833C001763CE /* remove_selection_reduction_opportunity_finder.h */,
+ A9C2EFB522E7833C001763CE /* merge_blocks_reduction_opportunity_finder.h */,
+ A9C2EFB622E7833C001763CE /* remove_opname_instruction_reduction_opportunity_finder.cpp */,
+ A9C2EFB722E7833C001763CE /* pch_source_reduce.cpp */,
+ A9C2EFB822E7833C001763CE /* reducer.cpp */,
+ A9C2EFB922E7833C001763CE /* operand_to_undef_reduction_opportunity_finder.cpp */,
+ A9C2EFBA22E7833C001763CE /* remove_function_reduction_opportunity_finder.h */,
+ A9C2EFBB22E7833C001763CE /* pch_source_reduce.h */,
+ A9C2EFBC22E7833C001763CE /* remove_unreferenced_instruction_reduction_opportunity_finder.h */,
+ A9C2EFBD22E7833C001763CE /* merge_blocks_reduction_opportunity_finder.cpp */,
+ A9C2EFBE22E7833C001763CE /* reduction_opportunity.cpp */,
+ A9C2EFBF22E7833C001763CE /* reducer.h */,
+ A9C2EFC022E7833C001763CE /* change_operand_to_undef_reduction_opportunity.cpp */,
+ A9C2EFC122E7833C001763CE /* reduction_opportunity.h */,
+ A9C2EFC222E7833C001763CE /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h */,
+ A9C2EFC322E7833C001763CE /* operand_to_dominating_id_reduction_opportunity_finder.cpp */,
+ A9C2EFC422E7833C001763CE /* reduction_opportunity_finder.h */,
+ A9C2EFC522E7833C001763CE /* change_operand_reduction_opportunity.h */,
+ A9C2EFC622E7833C001763CE /* remove_block_reduction_opportunity_finder.h */,
+ A9C2EFC722E7833C001763CE /* remove_block_reduction_opportunity_finder.cpp */,
+ A9C2EFC822E7833C001763CE /* reduction_util.h */,
+ A9C2EFC922E7833C001763CE /* merge_blocks_reduction_opportunity.h */,
+ A9C2EFCA22E7833C001763CE /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp */,
+ A9C2EFCB22E7833C001763CE /* structured_loop_to_selection_reduction_opportunity.cpp */,
+ A9C2EFCC22E7833C001763CE /* remove_block_reduction_opportunity.cpp */,
+ A9C2EFCD22E7833C001763CE /* reduction_pass.h */,
+ );
+ path = reduce;
+ sourceTree = "<group>";
+ };
+ A9C2EFEA22E7833C001763CE /* link */ = {
+ isa = PBXGroup;
+ children = (
+ A9C2EFEB22E7833C001763CE /* CMakeLists.txt */,
+ A9C2EFEC22E7833C001763CE /* linker.cpp */,
+ );
+ path = link;
+ sourceTree = "<group>";
+ };
+ A9C2EFF222E7833C001763CE /* opt */ = {
+ isa = PBXGroup;
+ children = (
+ A9C2EFF322E7833C001763CE /* optimizer.cpp */,
+ A9C2EFF422E7833C001763CE /* if_conversion.h */,
+ A9C2EFF522E7833C001763CE /* register_pressure.cpp */,
+ A9C2EFF622E7833C001763CE /* loop_utils.cpp */,
+ A9C2EFF722E7833C001763CE /* merge_return_pass.h */,
+ A9C2EFF822E7833C001763CE /* inline_opaque_pass.h */,
+ A9C2EFF922E7833C001763CE /* loop_fusion.h */,
+ A9C2EFFA22E7833C001763CE /* combine_access_chains.cpp */,
+ A9C2EFFB22E7833C001763CE /* build_module.cpp */,
+ A9C2EFFC22E7833C001763CE /* composite.h */,
+ A9C2EFFD22E7833C001763CE /* compact_ids_pass.h */,
+ A9C2EFFE22E7833C001763CE /* register_pressure.h */,
+ A9C2EFFF22E7833C001763CE /* tree_iterator.h */,
+ A9C2F00022E7833C001763CE /* strip_atomic_counter_memory_pass.h */,
+ A9C2F00122E7833C001763CE /* legalize_vector_shuffle_pass.h */,
+ A9C2F00222E7833C001763CE /* local_single_store_elim_pass.h */,
+ A9C2F00322E7833C001763CE /* reduce_load_size.h */,
+ A9C2F00422E7833C001763CE /* code_sink.cpp */,
+ A9C2F00522E7833C001763CE /* types.cpp */,
+ A9C2F00622E7833C001763CE /* scalar_analysis.h */,
+ A9C2F00722E7833C001763CE /* strip_debug_info_pass.h */,
+ A9C2F00822E7833C001763CE /* cfg.cpp */,
+ A9C2F00922E7833C001763CE /* strip_atomic_counter_memory_pass.cpp */,
+ A9C2F00A22E7833C001763CE /* decoration_manager.cpp */,
+ A9C2F00B22E7833C001763CE /* local_single_block_elim_pass.cpp */,
+ A9C2F00C22E7833C001763CE /* freeze_spec_constant_value_pass.cpp */,
+ A9C2F00D22E7833C001763CE /* replace_invalid_opc.h */,
+ A9C2F00E22E7833C001763CE /* local_access_chain_convert_pass.h */,
+ A9C2F00F22E7833C001763CE /* inst_bindless_check_pass.cpp */,
+ A9C2F01022E7833C001763CE /* local_redundancy_elimination.cpp */,
+ A9C2F01122E7833C001763CE /* CMakeLists.txt */,
+ A9C2F01222E7833C001763CE /* instrument_pass.cpp */,
+ A9C2F01322E7833C001763CE /* propagator.h */,
+ A9C2F01422E7833C001763CE /* instruction_list.h */,
+ A9C2F01522E7833C001763CE /* feature_manager.cpp */,
+ A9C2F01622E7833C001763CE /* pass.cpp */,
+ A9C2F01722E7833C001763CE /* loop_fission.cpp */,
+ A9C2F01822E7833C001763CE /* dominator_tree.cpp */,
+ A9C2F01922E7833C001763CE /* merge_return_pass.cpp */,
+ A9C2F01A22E7833C001763CE /* ir_context.h */,
+ A9C2F01B22E7833C001763CE /* eliminate_dead_constant_pass.cpp */,
+ A9C2F01C22E7833C001763CE /* cfg_cleanup_pass.cpp */,
+ A9C2F01D22E7833C001763CE /* const_folding_rules.cpp */,
+ A9C2F01E22E7833C001763CE /* loop_unroller.h */,
+ A9C2F01F22E7833C001763CE /* strip_debug_info_pass.cpp */,
+ A9C2F02022E7833C001763CE /* ssa_rewrite_pass.cpp */,
+ A9C2F02122E7833C001763CE /* loop_dependence.cpp */,
+ A9C2F02222E7833C001763CE /* unify_const_pass.h */,
+ A9C2F02322E7833C001763CE /* ir_loader.h */,
+ A9C2F02422E7833C001763CE /* types.h */,
+ A9C2F02522E7833C001763CE /* fold_spec_constant_op_and_composite_pass.h */,
+ A9C2F02622E7833C001763CE /* mem_pass.cpp */,
+ A9C2F02722E7833C001763CE /* basic_block.h */,
+ A9C2F02822E7833C001763CE /* remove_duplicates_pass.cpp */,
+ A9C2F02922E7833C001763CE /* dead_variable_elimination.cpp */,
+ A9C2F02A22E7833C001763CE /* block_merge_pass.h */,
+ A9C2F02B22E7833C001763CE /* module.cpp */,
+ A9C2F02C22E7833C001763CE /* fold_spec_constant_op_and_composite_pass.cpp */,
+ A9C2F02D22E7833C001763CE /* loop_unswitch_pass.cpp */,
+ A9C2F02E22E7833C001763CE /* unify_const_pass.cpp */,
+ A9C2F02F22E7833C001763CE /* type_manager.cpp */,
+ A9C2F03022E7833C001763CE /* generate_webgpu_initializers_pass.cpp */,
+ A9C2F03122E7833C001763CE /* private_to_local_pass.h */,
+ A9C2F03222E7833C001763CE /* inline_pass.cpp */,
+ A9C2F03322E7833C001763CE /* def_use_manager.h */,
+ A9C2F03422E7833C001763CE /* ir_loader.cpp */,
+ A9C2F03522E7833C001763CE /* cfg_cleanup_pass.h */,
+ A9C2F03622E7833C001763CE /* licm_pass.cpp */,
+ A9C2F03722E7833C001763CE /* eliminate_dead_functions_pass.cpp */,
+ A9C2F03822E7833C001763CE /* local_redundancy_elimination.h */,
+ A9C2F03922E7833C001763CE /* split_invalid_unreachable_pass.cpp */,
+ A9C2F03A22E7833C001763CE /* loop_peeling.h */,
+ A9C2F03B22E7833C001763CE /* vector_dce.cpp */,
+ A9C2F03C22E7833C001763CE /* block_merge_util.h */,
+ A9C2F03D22E7833C001763CE /* loop_unroller.cpp */,
+ A9C2F03E22E7833C001763CE /* constants.cpp */,
+ A9C2F03F22E7833C001763CE /* loop_fusion_pass.h */,
+ A9C2F04022E7833C001763CE /* struct_cfg_analysis.h */,
+ A9C2F04122E7833C001763CE /* def_use_manager.cpp */,
+ A9C2F04222E7833C001763CE /* strip_reflect_info_pass.cpp */,
+ A9C2F04322E7833C001763CE /* decoration_manager.h */,
+ A9C2F04422E7833C001763CE /* ccp_pass.cpp */,
+ A9C2F04522E7833C001763CE /* process_lines_pass.h */,
+ A9C2F04622E7833C001763CE /* local_single_block_elim_pass.h */,
+ A9C2F04722E7833C001763CE /* pch_source_opt.cpp */,
+ A9C2F04822E7833C001763CE /* strength_reduction_pass.h */,
+ A9C2F04922E7833C001763CE /* aggressive_dead_code_elim_pass.cpp */,
+ A9C2F04A22E7833C001763CE /* eliminate_dead_functions_util.cpp */,
+ A9C2F04B22E7833C001763CE /* simplification_pass.cpp */,
+ A9C2F04C22E7833C001763CE /* dead_branch_elim_pass.cpp */,
+ A9C2F04D22E7833C001763CE /* flatten_decoration_pass.cpp */,
+ A9C2F04E22E7833C001763CE /* dead_insert_elim_pass.h */,
+ A9C2F04F22E7833C001763CE /* folding_rules.cpp */,
+ A9C2F05022E7833C001763CE /* freeze_spec_constant_value_pass.h */,
+ A9C2F05122E7833C001763CE /* ir_context.cpp */,
+ A9C2F05222E7833C001763CE /* instrument_pass.h */,
+ A9C2F05322E7833C001763CE /* mem_pass.h */,
+ A9C2F05422E7833C001763CE /* loop_descriptor.cpp */,
+ A9C2F05522E7833C001763CE /* local_ssa_elim_pass.cpp */,
+ A9C2F05622E7833C001763CE /* eliminate_dead_members_pass.h */,
+ A9C2F05722E7833C001763CE /* function.cpp */,
+ A9C2F05822E7833C001763CE /* instruction_list.cpp */,
+ A9C2F05922E7833C001763CE /* composite.cpp */,
+ A9C2F05A22E7833C001763CE /* process_lines_pass.cpp */,
+ A9C2F05B22E7833C001763CE /* inline_pass.h */,
+ A9C2F05C22E7833C001763CE /* loop_dependence.h */,
+ A9C2F05D22E7833C001763CE /* value_number_table.h */,
+ A9C2F05E22E7833C001763CE /* flatten_decoration_pass.h */,
+ A9C2F05F22E7833C001763CE /* if_conversion.cpp */,
+ A9C2F06022E7833C001763CE /* inline_exhaustive_pass.h */,
+ A9C2F06122E7833C001763CE /* constants.h */,
+ A9C2F06222E7833C001763CE /* eliminate_dead_members_pass.cpp */,
+ A9C2F06322E7833C001763CE /* strength_reduction_pass.cpp */,
+ A9C2F06422E7833C001763CE /* block_merge_util.cpp */,
+ A9C2F06522E7833C001763CE /* upgrade_memory_model.h */,
+ A9C2F06622E7833C001763CE /* copy_prop_arrays.cpp */,
+ A9C2F06722E7833C001763CE /* pass_manager.cpp */,
+ A9C2F06822E7833C001763CE /* inline_exhaustive_pass.cpp */,
+ A9C2F06922E7833C001763CE /* loop_fission.h */,
+ A9C2F06A22E7833C001763CE /* workaround1209.h */,
+ A9C2F06B22E7833C001763CE /* loop_fusion_pass.cpp */,
+ A9C2F06C22E7833C001763CE /* log.h */,
+ A9C2F06D22E7833C001763CE /* split_invalid_unreachable_pass.h */,
+ A9C2F06E22E7833C001763CE /* copy_prop_arrays.h */,
+ A9C2F06F22E7833C001763CE /* eliminate_dead_constant_pass.h */,
+ A9C2F07022E7833C001763CE /* dead_insert_elim_pass.cpp */,
+ A9C2F07122E7833C001763CE /* ssa_rewrite_pass.h */,
+ A9C2F07222E7833C001763CE /* scalar_analysis.cpp */,
+ A9C2F07322E7833C001763CE /* dead_variable_elimination.h */,
+ A9C2F07422E7833C001763CE /* block_merge_pass.cpp */,
+ A9C2F07522E7833C001763CE /* dominator_analysis.h */,
+ A9C2F07622E7833C001763CE /* pass.h */,
+ A9C2F07722E7833C001763CE /* folding_rules.h */,
+ A9C2F07822E7833C001763CE /* eliminate_dead_functions_pass.h */,
+ A9C2F07922E7833C001763CE /* eliminate_dead_functions_util.h */,
+ A9C2F07A22E7833C001763CE /* fold.h */,
+ A9C2F07B22E7833C001763CE /* local_single_store_elim_pass.cpp */,
+ A9C2F07C22E7833C001763CE /* dead_branch_elim_pass.h */,
+ A9C2F07D22E7833C001763CE /* private_to_local_pass.cpp */,
+ A9C2F07E22E7833C001763CE /* scalar_analysis_nodes.h */,
+ A9C2F07F22E7833C001763CE /* propagator.cpp */,
+ A9C2F08022E7833C001763CE /* fix_storage_class.h */,
+ A9C2F08122E7833C001763CE /* loop_dependence_helpers.cpp */,
+ A9C2F08222E7833C001763CE /* set_spec_constant_default_value_pass.cpp */,
+ A9C2F08322E7833C001763CE /* passes.h */,
+ A9C2F08422E7833C001763CE /* fold.cpp */,
+ A9C2F08522E7833C001763CE /* strip_reflect_info_pass.h */,
+ A9C2F08622E7833C001763CE /* scalar_replacement_pass.cpp */,
+ A9C2F08722E7833C001763CE /* simplification_pass.h */,
+ A9C2F08822E7833C001763CE /* remove_duplicates_pass.h */,
+ A9C2F08922E7833C001763CE /* redundancy_elimination.cpp */,
+ A9C2F08A22E7833C001763CE /* reflect.h */,
+ A9C2F08B22E7833C001763CE /* workaround1209.cpp */,
+ A9C2F08C22E7833C001763CE /* null_pass.h */,
+ A9C2F08D22E7833C001763CE /* const_folding_rules.h */,
+ A9C2F08E22E7833C001763CE /* scalar_replacement_pass.h */,
+ A9C2F08F22E7833C001763CE /* instruction.cpp */,
+ A9C2F09022E7833C001763CE /* pch_source_opt.h */,
+ A9C2F09122E7833C001763CE /* reduce_load_size.cpp */,
+ A9C2F09222E7833C001763CE /* redundancy_elimination.h */,
+ A9C2F09322E7833C001763CE /* fix_storage_class.cpp */,
+ A9C2F09422E7833C001763CE /* value_number_table.cpp */,
+ A9C2F09522E7833C001763CE /* local_ssa_elim_pass.h */,
+ A9C2F09622E7833C001763CE /* inline_opaque_pass.cpp */,
+ A9C2F09722E7833C001763CE /* replace_invalid_opc.cpp */,
+ A9C2F09822E7833C001763CE /* loop_utils.h */,
+ A9C2F09922E7833C001763CE /* module.h */,
+ A9C2F09A22E7833C001763CE /* dominator_analysis.cpp */,
+ A9C2F09B22E7833C001763CE /* decompose_initialized_variables_pass.cpp */,
+ A9C2F09C22E7833C001763CE /* ir_builder.h */,
+ A9C2F09D22E7833C001763CE /* loop_unswitch_pass.h */,
+ A9C2F09E22E7833C001763CE /* cfg.h */,
+ A9C2F09F22E7833C001763CE /* code_sink.h */,
+ A9C2F0A022E7833C001763CE /* loop_descriptor.h */,
+ A9C2F0A122E7833C001763CE /* generate_webgpu_initializers_pass.h */,
+ A9C2F0A222E7833C001763CE /* instruction.h */,
+ A9C2F0A322E7833C001763CE /* aggressive_dead_code_elim_pass.h */,
+ A9C2F0A422E7833C001763CE /* struct_cfg_analysis.cpp */,
+ A9C2F0A522E7833C001763CE /* vector_dce.h */,
+ A9C2F0A622E7833C001763CE /* combine_access_chains.h */,
+ A9C2F0A722E7833C001763CE /* pass_manager.h */,
+ A9C2F0A822E7833C001763CE /* local_access_chain_convert_pass.cpp */,
+ A9C2F0A922E7833C001763CE /* basic_block.cpp */,
+ A9C2F0AA22E7833C001763CE /* iterator.h */,
+ A9C2F0AB22E7833C001763CE /* licm_pass.h */,
+ A9C2F0AC22E7833C001763CE /* build_module.h */,
+ A9C2F0AD22E7833C001763CE /* ccp_pass.h */,
+ A9C2F0AE22E7833C001763CE /* decompose_initialized_variables_pass.h */,
+ A9C2F0AF22E7833C001763CE /* function.h */,
+ A9C2F0B022E7833C001763CE /* loop_fusion.cpp */,
+ A9C2F0B122E7833C001763CE /* upgrade_memory_model.cpp */,
+ A9C2F0B222E7833C001763CE /* feature_manager.h */,
+ A9C2F0B322E7833C001763CE /* inst_bindless_check_pass.h */,
+ A9C2F0B422E7833C001763CE /* scalar_analysis_simplification.cpp */,
+ A9C2F0B522E7833C001763CE /* set_spec_constant_default_value_pass.h */,
+ A9C2F0B622E7833C001763CE /* dominator_tree.h */,
+ A9C2F0B722E7833C001763CE /* legalize_vector_shuffle_pass.cpp */,
+ A9C2F0B822E7833C001763CE /* type_manager.h */,
+ A9C2F0B922E7833C001763CE /* compact_ids_pass.cpp */,
+ A9C2F0BA22E7833C001763CE /* loop_peeling.cpp */,
+ );
+ path = opt;
+ sourceTree = "<group>";
+ };
+ A9C2F10622E7833D001763CE /* val */ = {
+ isa = PBXGroup;
+ children = (
+ A9C2F10722E7833D001763CE /* validate_annotation.cpp */,
+ A9C2F10822E7833D001763CE /* validate_misc.cpp */,
+ A9C2F10922E7833D001763CE /* validate_cfg.cpp */,
+ A9C2F10A22E7833D001763CE /* validate_capability.cpp */,
+ A9C2F10B22E7833D001763CE /* construct.h */,
+ A9C2F10C22E7833D001763CE /* validate_barriers.cpp */,
+ A9C2F10D22E7833D001763CE /* validate_non_uniform.cpp */,
+ A9C2F10E22E7833D001763CE /* validate_scopes.cpp */,
+ A9C2F10F22E7833D001763CE /* validate_atomics.cpp */,
+ A9C2F11022E7833D001763CE /* basic_block.h */,
+ A9C2F11122E7833D001763CE /* validate_instruction.cpp */,
+ A9C2F11222E7833D001763CE /* validate_decorations.cpp */,
+ A9C2F11322E7833D001763CE /* validate_debug.cpp */,
+ A9C2F11422E7833D001763CE /* validate_builtins.cpp */,
+ A9C2F11522E7833D001763CE /* validate_interfaces.cpp */,
+ A9C2F11622E7833D001763CE /* validate.cpp */,
+ A9C2F11722E7833D001763CE /* validation_state.h */,
+ A9C2F11822E7833D001763CE /* validate_constants.cpp */,
+ A9C2F11922E7833D001763CE /* validate_bitwise.cpp */,
+ A9C2F11A22E7833D001763CE /* validate_extensions.cpp */,
+ A9C2F11B22E7833D001763CE /* construct.cpp */,
+ A9C2F11C22E7833D001763CE /* function.cpp */,
+ A9C2F11D22E7833D001763CE /* validate.h */,
+ A9C2F11E22E7833D001763CE /* validate_adjacency.cpp */,
+ A9C2F11F22E7833D001763CE /* validate_conversion.cpp */,
+ A9C2F12022E7833D001763CE /* validate_small_type_uses.cpp */,
+ A9C2F12122E7833D001763CE /* validate_datarules.cpp */,
+ A9C2F12222E7833D001763CE /* validate_scopes.h */,
+ A9C2F12322E7833D001763CE /* validate_id.cpp */,
+ A9C2F12422E7833D001763CE /* validate_memory_semantics.h */,
+ A9C2F12522E7833D001763CE /* validate_arithmetics.cpp */,
+ A9C2F12622E7833D001763CE /* validate_mode_setting.cpp */,
+ A9C2F12722E7833D001763CE /* validate_memory_semantics.cpp */,
+ A9C2F12822E7833D001763CE /* validate_logicals.cpp */,
+ A9C2F12922E7833D001763CE /* validate_derivatives.cpp */,
+ A9C2F12A22E7833D001763CE /* validate_memory.cpp */,
+ A9C2F12B22E7833D001763CE /* validate_image.cpp */,
+ A9C2F12C22E7833D001763CE /* validate_literals.cpp */,
+ A9C2F12D22E7833D001763CE /* instruction.cpp */,
+ A9C2F12E22E7833D001763CE /* validate_type.cpp */,
+ A9C2F12F22E7833D001763CE /* instruction.h */,
+ A9C2F13022E7833D001763CE /* validate_execution_limitations.cpp */,
+ A9C2F13122E7833D001763CE /* validate_layout.cpp */,
+ A9C2F13222E7833D001763CE /* basic_block.cpp */,
+ A9C2F13322E7833D001763CE /* validate_function.cpp */,
+ A9C2F13422E7833D001763CE /* function.h */,
+ A9C2F13522E7833D001763CE /* validate_composites.cpp */,
+ A9C2F13622E7833D001763CE /* validation_state.cpp */,
+ A9C2F13722E7833D001763CE /* validate_primitives.cpp */,
+ A9C2F13822E7833D001763CE /* decoration.h */,
+ );
+ path = val;
+ sourceTree = "<group>";
+ };
A9F55D24198BE6A7004EC31B = {
isa = PBXGroup;
children = (
@@ -2281,187 +2277,186 @@
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
- A94A6A2C22B17BBC00C661C6 /* types.h in Headers */,
- A94A69F422B17BBC00C661C6 /* strip_debug_info_pass.h in Headers */,
- A94A6AD422B17BBC00C661C6 /* folding_rules.h in Headers */,
- A94A692022B17BBB00C661C6 /* operand_to_undef_reduction_opportunity_finder.h in Headers */,
- A94A695422B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity_finder.h in Headers */,
- A94A69F222B17BBC00C661C6 /* scalar_analysis.h in Headers */,
- A94A6B0022B17BBC00C661C6 /* null_pass.h in Headers */,
- A94A6A9E22B17BBC00C661C6 /* loop_dependence.h in Headers */,
- A94A6B3222B17BBC00C661C6 /* vector_dce.h in Headers */,
- A94A6A2A22B17BBC00C661C6 /* ir_loader.h in Headers */,
- A94A6B5422B17BBC00C661C6 /* dominator_tree.h in Headers */,
- A94A697A22B17BBB00C661C6 /* reduction_opportunity_finder.h in Headers */,
- A94A6A8C22B17BBC00C661C6 /* mem_pass.h in Headers */,
- A94A69CA22B17BBC00C661C6 /* disassemble.h in Headers */,
- A94A693822B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h in Headers */,
- A94A694622B17BBB00C661C6 /* simple_conditional_branch_to_branch_opportunity_finder.h in Headers */,
- A94A6A6222B17BBC00C661C6 /* loop_fusion_pass.h in Headers */,
- A94A6A3222B17BBC00C661C6 /* basic_block.h in Headers */,
- A94A69D422B17BBC00C661C6 /* merge_return_pass.h in Headers */,
- A94A6B3422B17BBC00C661C6 /* combine_access_chains.h in Headers */,
- A94A699A22B17BBB00C661C6 /* spirv_reducer_options.h in Headers */,
- A94A69DE22B17BBC00C661C6 /* composite.h in Headers */,
- A94A6AD022B17BBC00C661C6 /* dominator_analysis.h in Headers */,
- A94A6AA222B17BBC00C661C6 /* flatten_decoration_pass.h in Headers */,
- A94A69BC22B17BBB00C661C6 /* spirv_endian.h in Headers */,
- A94A693E22B17BBB00C661C6 /* remove_opname_instruction_reduction_opportunity_finder.h in Headers */,
- A94A69A822B17BBB00C661C6 /* spirv_constant.h in Headers */,
- A94A69CE22B17BBC00C661C6 /* if_conversion.h in Headers */,
- A94A6B2C22B17BBC00C661C6 /* instruction.h in Headers */,
- A94A696A22B17BBB00C661C6 /* remove_unreferenced_instruction_reduction_opportunity_finder.h in Headers */,
- A94A6B4022B17BBC00C661C6 /* build_module.h in Headers */,
- A94A6BC622B17BBC00C661C6 /* binary.h in Headers */,
- A94A691222B17BBB00C661C6 /* bitutils.h in Headers */,
- A94A6A2022B17BBC00C661C6 /* loop_unroller.h in Headers */,
- A94A6B2E22B17BBC00C661C6 /* aggressive_dead_code_elim_pass.h in Headers */,
- A94A697E22B17BBB00C661C6 /* remove_block_reduction_opportunity_finder.h in Headers */,
- A94A691C22B17BBB00C661C6 /* spirv_target_env.h in Headers */,
- A94A69E622B17BBC00C661C6 /* strip_atomic_counter_memory_pass.h in Headers */,
- A94A6B4222B17BBC00C661C6 /* ccp_pass.h in Headers */,
- A94A6A8A22B17BBC00C661C6 /* instrument_pass.h in Headers */,
- A94A6A6C22B17BBC00C661C6 /* decoration_manager.h in Headers */,
- A94A6AC022B17BBC00C661C6 /* split_invalid_unreachable_pass.h in Headers */,
- A94A6AC222B17BBC00C661C6 /* copy_prop_arrays.h in Headers */,
- A94A6B2822B17BBC00C661C6 /* loop_descriptor.h in Headers */,
- A94A6B3E22B17BBC00C661C6 /* licm_pass.h in Headers */,
- A94A69D822B17BBC00C661C6 /* loop_fusion.h in Headers */,
- A94A690422B17BBB00C661C6 /* make_unique.h in Headers */,
- A94A6AD222B17BBC00C661C6 /* pass.h in Headers */,
- A94A6A7222B17BBC00C661C6 /* local_single_block_elim_pass.h in Headers */,
- A94A6A5822B17BBC00C661C6 /* loop_peeling.h in Headers */,
- A94A694C22B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity.h in Headers */,
- A94A699222B17BBB00C661C6 /* cfa.h in Headers */,
- A94A6A7622B17BBC00C661C6 /* strength_reduction_pass.h in Headers */,
- A94A6A3822B17BBC00C661C6 /* block_merge_pass.h in Headers */,
- A94A6B4E22B17BBC00C661C6 /* inst_bindless_check_pass.h in Headers */,
- A94A69E222B17BBC00C661C6 /* register_pressure.h in Headers */,
- A94A697422B17BBB00C661C6 /* reduction_opportunity.h in Headers */,
- A94A6AFC22B17BBC00C661C6 /* reflect.h in Headers */,
- A94A695A22B17BBB00C661C6 /* remove_selection_reduction_opportunity_finder.h in Headers */,
- A94A6B3622B17BBC00C661C6 /* pass_manager.h in Headers */,
- A94A6A6422B17BBC00C661C6 /* struct_cfg_analysis.h in Headers */,
- A94A698222B17BBB00C661C6 /* reduction_util.h in Headers */,
- A94A69EA22B17BBC00C661C6 /* local_single_store_elim_pass.h in Headers */,
- A94A6BB822B17BBC00C661C6 /* instruction.h in Headers */,
- A94A693622B17BBB00C661C6 /* remove_instruction_reduction_opportunity.h in Headers */,
- A94A6B4422B17BBC00C661C6 /* decompose_initialized_variables_pass.h in Headers */,
- A94A6AE022B17BBC00C661C6 /* dead_branch_elim_pass.h in Headers */,
- A94A6B0222B17BBC00C661C6 /* const_folding_rules.h in Headers */,
- A94A68F222B17BBB00C661C6 /* assembly_grammar.h in Headers */,
- A94A69BA22B17BBB00C661C6 /* diagnostic.h in Headers */,
- A94A69A022B17BBB00C661C6 /* spirv_definition.h in Headers */,
- A94A6B0C22B17BBC00C661C6 /* redundancy_elimination.h in Headers */,
- A94A6A0C22B17BBC00C661C6 /* instruction_list.h in Headers */,
- A94A6BFE22B17BBD00C661C6 /* validate_scopes.h in Headers */,
- A94A6B5822B17BBC00C661C6 /* type_manager.h in Headers */,
- A94A6AF822B17BBC00C661C6 /* remove_duplicates_pass.h in Headers */,
- A94A6BBC22B17BBC00C661C6 /* opcode.h in Headers */,
- A94A6AB822B17BBC00C661C6 /* loop_fission.h in Headers */,
- A94A692422B17BBB00C661C6 /* remove_block_reduction_opportunity.h in Headers */,
- A94A6AE822B17BBC00C661C6 /* fix_storage_class.h in Headers */,
- A94A6AA822B17BBC00C661C6 /* constants.h in Headers */,
- A94A69A622B17BBB00C661C6 /* macro.h in Headers */,
- A94A6A0A22B17BBC00C661C6 /* propagator.h in Headers */,
- A94A6A8222B17BBC00C661C6 /* dead_insert_elim_pass.h in Headers */,
- A94A6A2E22B17BBC00C661C6 /* fold_spec_constant_op_and_composite_pass.h in Headers */,
- A94A693222B17BBB00C661C6 /* simple_conditional_branch_to_branch_reduction_opportunity.h in Headers */,
- A94A6ABE22B17BBC00C661C6 /* log.h in Headers */,
- A94A6AB022B17BBC00C661C6 /* upgrade_memory_model.h in Headers */,
- A94A69B422B17BBB00C661C6 /* name_mapper.h in Headers */,
- A94A6BBA22B17BBC00C661C6 /* spirv_optimizer_options.h in Headers */,
- A94A694E22B17BBB00C661C6 /* remove_function_reduction_opportunity.h in Headers */,
- A94A69E422B17BBC00C661C6 /* tree_iterator.h in Headers */,
- A94A6A9C22B17BBC00C661C6 /* inline_pass.h in Headers */,
- A94A6B2422B17BBC00C661C6 /* cfg.h in Headers */,
- A94A6AD622B17BBC00C661C6 /* eliminate_dead_functions_pass.h in Headers */,
- A94A6BB422B17BBC00C661C6 /* latest_version_spirv_header.h in Headers */,
- A94A6AC822B17BBC00C661C6 /* ssa_rewrite_pass.h in Headers */,
- A94A6B0822B17BBC00C661C6 /* pch_source_opt.h in Headers */,
- A94A6BC222B17BBC00C661C6 /* extensions.h in Headers */,
- A94A6C2222B17BBD00C661C6 /* function.h in Headers */,
- A94A690C22B17BBB00C661C6 /* timer.h in Headers */,
- A94A695C22B17BBB00C661C6 /* merge_blocks_reduction_opportunity_finder.h in Headers */,
- A94A69AC22B17BBB00C661C6 /* spirv_validator_options.h in Headers */,
- A94A6BEA22B17BBC00C661C6 /* validation_state.h in Headers */,
- A94A691A22B17BBB00C661C6 /* ilist.h in Headers */,
- A94A6BDC22B17BBC00C661C6 /* basic_block.h in Headers */,
- A94A6B3C22B17BBC00C661C6 /* iterator.h in Headers */,
- A94A6AF222B17BBC00C661C6 /* strip_reflect_info_pass.h in Headers */,
- A94A690822B17BBB00C661C6 /* small_vector.h in Headers */,
- A94A691422B17BBB00C661C6 /* hex_float.h in Headers */,
- A94A6B2022B17BBC00C661C6 /* ir_builder.h in Headers */,
- A94A6A7022B17BBC00C661C6 /* process_lines_pass.h in Headers */,
- A94A68FA22B17BBB00C661C6 /* text.h in Headers */,
- A94A697C22B17BBB00C661C6 /* change_operand_reduction_opportunity.h in Headers */,
- A94A6ADA22B17BBC00C661C6 /* eliminate_dead_functions_util.h in Headers */,
- A94A6AF622B17BBC00C661C6 /* simplification_pass.h in Headers */,
- A94A690622B17BBB00C661C6 /* string_utils.h in Headers */,
- A94A698E22B17BBB00C661C6 /* latest_version_opencl_std_header.h in Headers */,
- A94A6B2A22B17BBC00C661C6 /* generate_webgpu_initializers_pass.h in Headers */,
- A94A6AC422B17BBC00C661C6 /* eliminate_dead_constant_pass.h in Headers */,
- A94A697022B17BBB00C661C6 /* reducer.h in Headers */,
- A94A69E822B17BBC00C661C6 /* legalize_vector_shuffle_pass.h in Headers */,
- A94A6A5422B17BBC00C661C6 /* local_redundancy_elimination.h in Headers */,
- A94A69E022B17BBC00C661C6 /* compact_ids_pass.h in Headers */,
- A94A6B1A22B17BBC00C661C6 /* module.h in Headers */,
- A94A696622B17BBB00C661C6 /* remove_function_reduction_opportunity_finder.h in Headers */,
- A94A6ABA22B17BBC00C661C6 /* workaround1209.h in Headers */,
- A94A6B5E22B17BBC00C661C6 /* table.h in Headers */,
- A94A696822B17BBB00C661C6 /* pch_source_reduce.h in Headers */,
- A94A6AE422B17BBC00C661C6 /* scalar_analysis_nodes.h in Headers */,
- A94A69B022B17BBB00C661C6 /* text_handler.h in Headers */,
- A94A6B5222B17BBC00C661C6 /* set_spec_constant_default_value_pass.h in Headers */,
- A94A699622B17BBB00C661C6 /* enum_string_mapping.h in Headers */,
- A94A692622B17BBB00C661C6 /* operand_to_dominating_id_reduction_opportunity_finder.h in Headers */,
- A94A6A2822B17BBC00C661C6 /* unify_const_pass.h in Headers */,
- A94A6B4622B17BBC00C661C6 /* function.h in Headers */,
- A94A6AD822B17BBC00C661C6 /* common_uniform_elim_pass.h in Headers */,
- A94A6C0222B17BBD00C661C6 /* validate_memory_semantics.h in Headers */,
- A94A690022B17BBB00C661C6 /* parse_number.h in Headers */,
- A94A6AA022B17BBC00C661C6 /* value_number_table.h in Headers */,
- A94A6B1822B17BBC00C661C6 /* loop_utils.h in Headers */,
- A94A6AEE22B17BBC00C661C6 /* passes.h in Headers */,
- A94A6C2A22B17BBD00C661C6 /* decoration.h in Headers */,
- A94A6BB022B17BBC00C661C6 /* ext_inst.h in Headers */,
- A94A697622B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h in Headers */,
- A94A6A0022B17BBC00C661C6 /* replace_invalid_opc.h in Headers */,
- A94A6B4C22B17BBC00C661C6 /* feature_manager.h in Headers */,
- A94A6BF622B17BBD00C661C6 /* validate.h in Headers */,
- A94A6A5C22B17BBC00C661C6 /* block_merge_util.h in Headers */,
- A94A6ADC22B17BBC00C661C6 /* fold.h in Headers */,
- A94A6A8622B17BBC00C661C6 /* freeze_spec_constant_value_pass.h in Headers */,
- A94A69EC22B17BBC00C661C6 /* reduce_load_size.h in Headers */,
- A94A68F022B17BBB00C661C6 /* spirv_fuzzer_options.h in Headers */,
- A94A6B0422B17BBC00C661C6 /* scalar_replacement_pass.h in Headers */,
- A94A690222B17BBB00C661C6 /* ilist_node.h in Headers */,
- A94A6C1822B17BBD00C661C6 /* instruction.h in Headers */,
- A94A68F422B17BBB00C661C6 /* enum_set.h in Headers */,
- A94A69B222B17BBB00C661C6 /* parsed_operand.h in Headers */,
- A94A6A1822B17BBC00C661C6 /* ir_context.h in Headers */,
- A94A6AA622B17BBC00C661C6 /* inline_exhaustive_pass.h in Headers */,
- A94A6B1222B17BBC00C661C6 /* local_ssa_elim_pass.h in Headers */,
- A94A6B2622B17BBC00C661C6 /* code_sink.h in Headers */,
- A94A698422B17BBB00C661C6 /* merge_blocks_reduction_opportunity.h in Headers */,
- A94A6A4A22B17BBC00C661C6 /* def_use_manager.h in Headers */,
- A94A6A4E22B17BBC00C661C6 /* cfg_cleanup_pass.h in Headers */,
- A94A69C622B17BBC00C661C6 /* print.h in Headers */,
- A94A69D622B17BBC00C661C6 /* inline_opaque_pass.h in Headers */,
- A94A695022B17BBB00C661C6 /* change_operand_to_undef_reduction_opportunity.h in Headers */,
- A94A6A0222B17BBC00C661C6 /* local_access_chain_convert_pass.h in Headers */,
- A94A6BC022B17BBC00C661C6 /* latest_version_glsl_std_450_header.h in Headers */,
- A94A69A222B17BBB00C661C6 /* operand.h in Headers */,
- A94A6BD222B17BBC00C661C6 /* construct.h in Headers */,
- A94A6ACC22B17BBC00C661C6 /* dead_variable_elimination.h in Headers */,
- A94A692C22B17BBB00C661C6 /* operand_to_const_reduction_opportunity_finder.h in Headers */,
- A94A698C22B17BBB00C661C6 /* reduction_pass.h in Headers */,
- A94A6B2222B17BBC00C661C6 /* loop_unswitch_pass.h in Headers */,
- A94A695622B17BBB00C661C6 /* remove_selection_reduction_opportunity.h in Headers */,
- A94A6A4622B17BBC00C661C6 /* private_to_local_pass.h in Headers */,
- A94A691022B17BBB00C661C6 /* bit_vector.h in Headers */,
- A94A6A9222B17BBC00C661C6 /* eliminate_dead_members_pass.h in Headers */,
- A94A699422B17BBB00C661C6 /* pch_source.h in Headers */,
+ A9C2F37922E7833D001763CE /* vector_dce.h in Headers */,
+ A9C2F42B22E7833D001763CE /* latest_version_glsl_std_450_header.h in Headers */,
+ A9C2F27722E7833D001763CE /* types.h in Headers */,
+ A9C2F23F22E7833D001763CE /* strip_debug_info_pass.h in Headers */,
+ A9C2F31D22E7833D001763CE /* folding_rules.h in Headers */,
+ A9C2F16B22E7833D001763CE /* operand_to_undef_reduction_opportunity_finder.h in Headers */,
+ A9C2F48F22E7833D001763CE /* function.h in Headers */,
+ A9C2F38522E7833D001763CE /* licm_pass.h in Headers */,
+ A9C2F32B22E7833D001763CE /* scalar_analysis_nodes.h in Headers */,
+ A9C2F19F22E7833D001763CE /* structured_loop_to_selection_reduction_opportunity_finder.h in Headers */,
+ A9C2F23D22E7833D001763CE /* scalar_analysis.h in Headers */,
+ A9C2F2E722E7833D001763CE /* loop_dependence.h in Headers */,
+ A9C2F27522E7833D001763CE /* ir_loader.h in Headers */,
+ A9C2F1C522E7833D001763CE /* reduction_opportunity_finder.h in Headers */,
+ A9C2F42722E7833D001763CE /* opcode.h in Headers */,
+ A9C2F2D522E7833D001763CE /* mem_pass.h in Headers */,
+ A9C2F44722E7833D001763CE /* basic_block.h in Headers */,
+ A9C2F21522E7833D001763CE /* disassemble.h in Headers */,
+ A9C2F46F22E7833D001763CE /* validate_memory_semantics.h in Headers */,
+ A9C2F18322E7833D001763CE /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h in Headers */,
+ A9C2F34B22E7833D001763CE /* scalar_replacement_pass.h in Headers */,
+ A9C2F19122E7833D001763CE /* simple_conditional_branch_to_branch_opportunity_finder.h in Headers */,
+ A9C2F2AD22E7833D001763CE /* loop_fusion_pass.h in Headers */,
+ A9C2F49722E7833D001763CE /* decoration.h in Headers */,
+ A9C2F36122E7833D001763CE /* module.h in Headers */,
+ A9C2F27D22E7833D001763CE /* basic_block.h in Headers */,
+ A9C2F43122E7833D001763CE /* binary.h in Headers */,
+ A9C2F37522E7833D001763CE /* aggressive_dead_code_elim_pass.h in Headers */,
+ A9C2F37D22E7833D001763CE /* pass_manager.h in Headers */,
+ A9C2F21F22E7833D001763CE /* merge_return_pass.h in Headers */,
+ A9C2F1E522E7833D001763CE /* spirv_reducer_options.h in Headers */,
+ A9C2F22922E7833D001763CE /* composite.h in Headers */,
+ A9C2F31922E7833D001763CE /* dominator_analysis.h in Headers */,
+ A9C2F38922E7833D001763CE /* ccp_pass.h in Headers */,
+ A9C2F2EB22E7833D001763CE /* flatten_decoration_pass.h in Headers */,
+ A9C2F20722E7833D001763CE /* spirv_endian.h in Headers */,
+ A9C2F18922E7833D001763CE /* remove_opname_instruction_reduction_opportunity_finder.h in Headers */,
+ A9C2F1F322E7833D001763CE /* spirv_constant.h in Headers */,
+ A9C2F21922E7833D001763CE /* if_conversion.h in Headers */,
+ A9C2F1B522E7833D001763CE /* remove_unreferenced_instruction_reduction_opportunity_finder.h in Headers */,
+ A9C2F15D22E7833D001763CE /* bitutils.h in Headers */,
+ A9C2F26B22E7833D001763CE /* loop_unroller.h in Headers */,
+ A9C2F1C922E7833D001763CE /* remove_block_reduction_opportunity_finder.h in Headers */,
+ A9C2F16722E7833D001763CE /* spirv_target_env.h in Headers */,
+ A9C2F36D22E7833D001763CE /* code_sink.h in Headers */,
+ A9C2F23122E7833D001763CE /* strip_atomic_counter_memory_pass.h in Headers */,
+ A9C2F2D322E7833D001763CE /* instrument_pass.h in Headers */,
+ A9C2F38722E7833D001763CE /* build_module.h in Headers */,
+ A9C2F42D22E7833D001763CE /* extensions.h in Headers */,
+ A9C2F48522E7833D001763CE /* instruction.h in Headers */,
+ A9C2F32F22E7833D001763CE /* fix_storage_class.h in Headers */,
+ A9C2F36722E7833D001763CE /* ir_builder.h in Headers */,
+ A9C2F2B522E7833D001763CE /* decoration_manager.h in Headers */,
+ A9C2F33922E7833D001763CE /* strip_reflect_info_pass.h in Headers */,
+ A9C2F38322E7833D001763CE /* iterator.h in Headers */,
+ A9C2F38B22E7833D001763CE /* decompose_initialized_variables_pass.h in Headers */,
+ A9C2F34722E7833D001763CE /* null_pass.h in Headers */,
+ A9C2F30922E7833D001763CE /* split_invalid_unreachable_pass.h in Headers */,
+ A9C2F30B22E7833D001763CE /* copy_prop_arrays.h in Headers */,
+ A9C2F22322E7833D001763CE /* loop_fusion.h in Headers */,
+ A9C2F3A522E7833D001763CE /* table.h in Headers */,
+ A9C2F14F22E7833D001763CE /* make_unique.h in Headers */,
+ A9C2F31B22E7833D001763CE /* pass.h in Headers */,
+ A9C2F2BB22E7833D001763CE /* local_single_block_elim_pass.h in Headers */,
+ A9C2F2A322E7833D001763CE /* loop_peeling.h in Headers */,
+ A9C2F19722E7833D001763CE /* structured_loop_to_selection_reduction_opportunity.h in Headers */,
+ A9C2F1DD22E7833D001763CE /* cfa.h in Headers */,
+ A9C2F2BF22E7833D001763CE /* strength_reduction_pass.h in Headers */,
+ A9C2F28322E7833D001763CE /* block_merge_pass.h in Headers */,
+ A9C2F33522E7833D001763CE /* passes.h in Headers */,
+ A9C2F46122E7833D001763CE /* validate.h in Headers */,
+ A9C2F22D22E7833D001763CE /* register_pressure.h in Headers */,
+ A9C2F1BF22E7833D001763CE /* reduction_opportunity.h in Headers */,
+ A9C2F1A522E7833D001763CE /* remove_selection_reduction_opportunity_finder.h in Headers */,
+ A9C2F2AF22E7833D001763CE /* struct_cfg_analysis.h in Headers */,
+ A9C2F1CD22E7833D001763CE /* reduction_util.h in Headers */,
+ A9C2F23522E7833D001763CE /* local_single_store_elim_pass.h in Headers */,
+ A9C2F18122E7833D001763CE /* remove_instruction_reduction_opportunity.h in Headers */,
+ A9C2F13D22E7833D001763CE /* assembly_grammar.h in Headers */,
+ A9C2F20522E7833D001763CE /* diagnostic.h in Headers */,
+ A9C2F45522E7833D001763CE /* validation_state.h in Headers */,
+ A9C2F1EB22E7833D001763CE /* spirv_definition.h in Headers */,
+ A9C2F34F22E7833D001763CE /* pch_source_opt.h in Headers */,
+ A9C2F25722E7833D001763CE /* instruction_list.h in Headers */,
+ A9C2F30122E7833D001763CE /* loop_fission.h in Headers */,
+ A9C2F16F22E7833D001763CE /* remove_block_reduction_opportunity.h in Headers */,
+ A9C2F39522E7833D001763CE /* inst_bindless_check_pass.h in Headers */,
+ A9C2F2F122E7833D001763CE /* constants.h in Headers */,
+ A9C2F1F122E7833D001763CE /* macro.h in Headers */,
+ A9C2F42522E7833D001763CE /* spirv_optimizer_options.h in Headers */,
+ A9C2F43D22E7833D001763CE /* construct.h in Headers */,
+ A9C2F25522E7833D001763CE /* propagator.h in Headers */,
+ A9C2F39322E7833D001763CE /* feature_manager.h in Headers */,
+ A9C2F2CB22E7833D001763CE /* dead_insert_elim_pass.h in Headers */,
+ A9C2F41F22E7833D001763CE /* latest_version_spirv_header.h in Headers */,
+ A9C2F39F22E7833D001763CE /* type_manager.h in Headers */,
+ A9C2F27922E7833D001763CE /* fold_spec_constant_op_and_composite_pass.h in Headers */,
+ A9C2F17D22E7833D001763CE /* simple_conditional_branch_to_branch_reduction_opportunity.h in Headers */,
+ A9C2F30722E7833D001763CE /* log.h in Headers */,
+ A9C2F39B22E7833D001763CE /* dominator_tree.h in Headers */,
+ A9C2F2F922E7833D001763CE /* upgrade_memory_model.h in Headers */,
+ A9C2F1FF22E7833D001763CE /* name_mapper.h in Headers */,
+ A9C2F19922E7833D001763CE /* remove_function_reduction_opportunity.h in Headers */,
+ A9C2F22F22E7833D001763CE /* tree_iterator.h in Headers */,
+ A9C2F34922E7833D001763CE /* const_folding_rules.h in Headers */,
+ A9C2F33F22E7833D001763CE /* remove_duplicates_pass.h in Headers */,
+ A9C2F41B22E7833D001763CE /* ext_inst.h in Headers */,
+ A9C2F2E522E7833D001763CE /* inline_pass.h in Headers */,
+ A9C2F37B22E7833D001763CE /* combine_access_chains.h in Headers */,
+ A9C2F31F22E7833D001763CE /* eliminate_dead_functions_pass.h in Headers */,
+ A9C2F31122E7833D001763CE /* ssa_rewrite_pass.h in Headers */,
+ A9C2F15722E7833D001763CE /* timer.h in Headers */,
+ A9C2F42322E7833D001763CE /* instruction.h in Headers */,
+ A9C2F35922E7833D001763CE /* local_ssa_elim_pass.h in Headers */,
+ A9C2F34322E7833D001763CE /* reflect.h in Headers */,
+ A9C2F1A722E7833D001763CE /* merge_blocks_reduction_opportunity_finder.h in Headers */,
+ A9C2F1F722E7833D001763CE /* spirv_validator_options.h in Headers */,
+ A9C2F32322E7833D001763CE /* fold.h in Headers */,
+ A9C2F16522E7833D001763CE /* ilist.h in Headers */,
+ A9C2F15322E7833D001763CE /* small_vector.h in Headers */,
+ A9C2F15F22E7833D001763CE /* hex_float.h in Headers */,
+ A9C2F2B922E7833D001763CE /* process_lines_pass.h in Headers */,
+ A9C2F14522E7833D001763CE /* text.h in Headers */,
+ A9C2F1C722E7833D001763CE /* change_operand_reduction_opportunity.h in Headers */,
+ A9C2F38D22E7833D001763CE /* function.h in Headers */,
+ A9C2F15122E7833D001763CE /* string_utils.h in Headers */,
+ A9C2F1D922E7833D001763CE /* latest_version_opencl_std_header.h in Headers */,
+ A9C2F30D22E7833D001763CE /* eliminate_dead_constant_pass.h in Headers */,
+ A9C2F1BB22E7833D001763CE /* reducer.h in Headers */,
+ A9C2F35F22E7833D001763CE /* loop_utils.h in Headers */,
+ A9C2F23322E7833D001763CE /* legalize_vector_shuffle_pass.h in Headers */,
+ A9C2F29F22E7833D001763CE /* local_redundancy_elimination.h in Headers */,
+ A9C2F22B22E7833D001763CE /* compact_ids_pass.h in Headers */,
+ A9C2F1B122E7833D001763CE /* remove_function_reduction_opportunity_finder.h in Headers */,
+ A9C2F30322E7833D001763CE /* workaround1209.h in Headers */,
+ A9C2F1B322E7833D001763CE /* pch_source_reduce.h in Headers */,
+ A9C2F1FB22E7833D001763CE /* text_handler.h in Headers */,
+ A9C2F1E122E7833D001763CE /* enum_string_mapping.h in Headers */,
+ A9C2F17122E7833D001763CE /* operand_to_dominating_id_reduction_opportunity_finder.h in Headers */,
+ A9C2F27322E7833D001763CE /* unify_const_pass.h in Headers */,
+ A9C2F14B22E7833D001763CE /* parse_number.h in Headers */,
+ A9C2F2E922E7833D001763CE /* value_number_table.h in Headers */,
+ A9C2F1C122E7833D001763CE /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h in Headers */,
+ A9C2F24B22E7833D001763CE /* replace_invalid_opc.h in Headers */,
+ A9C2F2A722E7833D001763CE /* block_merge_util.h in Headers */,
+ A9C2F35322E7833D001763CE /* redundancy_elimination.h in Headers */,
+ A9C2F37122E7833D001763CE /* generate_webgpu_initializers_pass.h in Headers */,
+ A9C2F2CF22E7833D001763CE /* freeze_spec_constant_value_pass.h in Headers */,
+ A9C2F23722E7833D001763CE /* reduce_load_size.h in Headers */,
+ A9C2F37322E7833D001763CE /* instruction.h in Headers */,
+ A9C2F13B22E7833D001763CE /* spirv_fuzzer_options.h in Headers */,
+ A9C2F46B22E7833D001763CE /* validate_scopes.h in Headers */,
+ A9C2F14D22E7833D001763CE /* ilist_node.h in Headers */,
+ A9C2F13F22E7833D001763CE /* enum_set.h in Headers */,
+ A9C2F1FD22E7833D001763CE /* parsed_operand.h in Headers */,
+ A9C2F26322E7833D001763CE /* ir_context.h in Headers */,
+ A9C2F36B22E7833D001763CE /* cfg.h in Headers */,
+ A9C2F2EF22E7833D001763CE /* inline_exhaustive_pass.h in Headers */,
+ A9C2F1CF22E7833D001763CE /* merge_blocks_reduction_opportunity.h in Headers */,
+ A9C2F33D22E7833D001763CE /* simplification_pass.h in Headers */,
+ A9C2F29522E7833D001763CE /* def_use_manager.h in Headers */,
+ A9C2F29922E7833D001763CE /* cfg_cleanup_pass.h in Headers */,
+ A9C2F21122E7833D001763CE /* print.h in Headers */,
+ A9C2F22122E7833D001763CE /* inline_opaque_pass.h in Headers */,
+ A9C2F19B22E7833D001763CE /* change_operand_to_undef_reduction_opportunity.h in Headers */,
+ A9C2F39922E7833D001763CE /* set_spec_constant_default_value_pass.h in Headers */,
+ A9C2F24D22E7833D001763CE /* local_access_chain_convert_pass.h in Headers */,
+ A9C2F1ED22E7833D001763CE /* operand.h in Headers */,
+ A9C2F31522E7833D001763CE /* dead_variable_elimination.h in Headers */,
+ A9C2F32122E7833D001763CE /* eliminate_dead_functions_util.h in Headers */,
+ A9C2F17722E7833D001763CE /* operand_to_const_reduction_opportunity_finder.h in Headers */,
+ A9C2F36F22E7833D001763CE /* loop_descriptor.h in Headers */,
+ A9C2F1D722E7833D001763CE /* reduction_pass.h in Headers */,
+ A9C2F1A122E7833D001763CE /* remove_selection_reduction_opportunity.h in Headers */,
+ A9C2F29122E7833D001763CE /* private_to_local_pass.h in Headers */,
+ A9C2F15B22E7833D001763CE /* bit_vector.h in Headers */,
+ A9C2F36922E7833D001763CE /* loop_unswitch_pass.h in Headers */,
+ A9C2F2DB22E7833D001763CE /* eliminate_dead_members_pass.h in Headers */,
+ A9C2F1DF22E7833D001763CE /* pch_source.h in Headers */,
+ A9C2F32722E7833D001763CE /* dead_branch_elim_pass.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -2469,187 +2464,186 @@
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
- A94A6A2D22B17BBC00C661C6 /* types.h in Headers */,
- A94A69F522B17BBC00C661C6 /* strip_debug_info_pass.h in Headers */,
- A94A6AD522B17BBC00C661C6 /* folding_rules.h in Headers */,
- A94A692122B17BBB00C661C6 /* operand_to_undef_reduction_opportunity_finder.h in Headers */,
- A94A695522B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity_finder.h in Headers */,
- A94A69F322B17BBC00C661C6 /* scalar_analysis.h in Headers */,
- A94A6B0122B17BBC00C661C6 /* null_pass.h in Headers */,
- A94A6A9F22B17BBC00C661C6 /* loop_dependence.h in Headers */,
- A94A6B3322B17BBC00C661C6 /* vector_dce.h in Headers */,
- A94A6A2B22B17BBC00C661C6 /* ir_loader.h in Headers */,
- A94A6B5522B17BBC00C661C6 /* dominator_tree.h in Headers */,
- A94A697B22B17BBB00C661C6 /* reduction_opportunity_finder.h in Headers */,
- A94A6A8D22B17BBC00C661C6 /* mem_pass.h in Headers */,
- A94A69CB22B17BBC00C661C6 /* disassemble.h in Headers */,
- A94A693922B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h in Headers */,
- A94A694722B17BBB00C661C6 /* simple_conditional_branch_to_branch_opportunity_finder.h in Headers */,
- A94A6A6322B17BBC00C661C6 /* loop_fusion_pass.h in Headers */,
- A94A6A3322B17BBC00C661C6 /* basic_block.h in Headers */,
- A94A69D522B17BBC00C661C6 /* merge_return_pass.h in Headers */,
- A94A6B3522B17BBC00C661C6 /* combine_access_chains.h in Headers */,
- A94A699B22B17BBB00C661C6 /* spirv_reducer_options.h in Headers */,
- A94A69DF22B17BBC00C661C6 /* composite.h in Headers */,
- A94A6AD122B17BBC00C661C6 /* dominator_analysis.h in Headers */,
- A94A6AA322B17BBC00C661C6 /* flatten_decoration_pass.h in Headers */,
- A94A69BD22B17BBB00C661C6 /* spirv_endian.h in Headers */,
- A94A693F22B17BBB00C661C6 /* remove_opname_instruction_reduction_opportunity_finder.h in Headers */,
- A94A69A922B17BBB00C661C6 /* spirv_constant.h in Headers */,
- A94A69CF22B17BBC00C661C6 /* if_conversion.h in Headers */,
- A94A6B2D22B17BBC00C661C6 /* instruction.h in Headers */,
- A94A696B22B17BBB00C661C6 /* remove_unreferenced_instruction_reduction_opportunity_finder.h in Headers */,
- A94A6B4122B17BBC00C661C6 /* build_module.h in Headers */,
- A94A6BC722B17BBC00C661C6 /* binary.h in Headers */,
- A94A691322B17BBB00C661C6 /* bitutils.h in Headers */,
- A94A6A2122B17BBC00C661C6 /* loop_unroller.h in Headers */,
- A94A6B2F22B17BBC00C661C6 /* aggressive_dead_code_elim_pass.h in Headers */,
- A94A697F22B17BBB00C661C6 /* remove_block_reduction_opportunity_finder.h in Headers */,
- A94A691D22B17BBB00C661C6 /* spirv_target_env.h in Headers */,
- A94A69E722B17BBC00C661C6 /* strip_atomic_counter_memory_pass.h in Headers */,
- A94A6B4322B17BBC00C661C6 /* ccp_pass.h in Headers */,
- A94A6A8B22B17BBC00C661C6 /* instrument_pass.h in Headers */,
- A94A6A6D22B17BBC00C661C6 /* decoration_manager.h in Headers */,
- A94A6AC122B17BBC00C661C6 /* split_invalid_unreachable_pass.h in Headers */,
- A94A6AC322B17BBC00C661C6 /* copy_prop_arrays.h in Headers */,
- A94A6B2922B17BBC00C661C6 /* loop_descriptor.h in Headers */,
- A94A6B3F22B17BBC00C661C6 /* licm_pass.h in Headers */,
- A94A69D922B17BBC00C661C6 /* loop_fusion.h in Headers */,
- A94A690522B17BBB00C661C6 /* make_unique.h in Headers */,
- A94A6AD322B17BBC00C661C6 /* pass.h in Headers */,
- A94A6A7322B17BBC00C661C6 /* local_single_block_elim_pass.h in Headers */,
- A94A6A5922B17BBC00C661C6 /* loop_peeling.h in Headers */,
- A94A694D22B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity.h in Headers */,
- A94A699322B17BBB00C661C6 /* cfa.h in Headers */,
- A94A6A7722B17BBC00C661C6 /* strength_reduction_pass.h in Headers */,
- A94A6A3922B17BBC00C661C6 /* block_merge_pass.h in Headers */,
- A94A6B4F22B17BBC00C661C6 /* inst_bindless_check_pass.h in Headers */,
- A94A69E322B17BBC00C661C6 /* register_pressure.h in Headers */,
- A94A697522B17BBB00C661C6 /* reduction_opportunity.h in Headers */,
- A94A6AFD22B17BBC00C661C6 /* reflect.h in Headers */,
- A94A695B22B17BBB00C661C6 /* remove_selection_reduction_opportunity_finder.h in Headers */,
- A94A6B3722B17BBC00C661C6 /* pass_manager.h in Headers */,
- A94A6A6522B17BBC00C661C6 /* struct_cfg_analysis.h in Headers */,
- A94A698322B17BBB00C661C6 /* reduction_util.h in Headers */,
- A94A69EB22B17BBC00C661C6 /* local_single_store_elim_pass.h in Headers */,
- A94A6BB922B17BBC00C661C6 /* instruction.h in Headers */,
- A94A693722B17BBB00C661C6 /* remove_instruction_reduction_opportunity.h in Headers */,
- A94A6B4522B17BBC00C661C6 /* decompose_initialized_variables_pass.h in Headers */,
- A94A6AE122B17BBC00C661C6 /* dead_branch_elim_pass.h in Headers */,
- A94A6B0322B17BBC00C661C6 /* const_folding_rules.h in Headers */,
- A94A68F322B17BBB00C661C6 /* assembly_grammar.h in Headers */,
- A94A69BB22B17BBB00C661C6 /* diagnostic.h in Headers */,
- A94A69A122B17BBB00C661C6 /* spirv_definition.h in Headers */,
- A94A6B0D22B17BBC00C661C6 /* redundancy_elimination.h in Headers */,
- A94A6A0D22B17BBC00C661C6 /* instruction_list.h in Headers */,
- A94A6BFF22B17BBD00C661C6 /* validate_scopes.h in Headers */,
- A94A6B5922B17BBC00C661C6 /* type_manager.h in Headers */,
- A94A6AF922B17BBC00C661C6 /* remove_duplicates_pass.h in Headers */,
- A94A6BBD22B17BBC00C661C6 /* opcode.h in Headers */,
- A94A6AB922B17BBC00C661C6 /* loop_fission.h in Headers */,
- A94A692522B17BBB00C661C6 /* remove_block_reduction_opportunity.h in Headers */,
- A94A6AE922B17BBC00C661C6 /* fix_storage_class.h in Headers */,
- A94A6AA922B17BBC00C661C6 /* constants.h in Headers */,
- A94A69A722B17BBB00C661C6 /* macro.h in Headers */,
- A94A6A0B22B17BBC00C661C6 /* propagator.h in Headers */,
- A94A6A8322B17BBC00C661C6 /* dead_insert_elim_pass.h in Headers */,
- A94A6A2F22B17BBC00C661C6 /* fold_spec_constant_op_and_composite_pass.h in Headers */,
- A94A693322B17BBB00C661C6 /* simple_conditional_branch_to_branch_reduction_opportunity.h in Headers */,
- A94A6ABF22B17BBC00C661C6 /* log.h in Headers */,
- A94A6AB122B17BBC00C661C6 /* upgrade_memory_model.h in Headers */,
- A94A69B522B17BBB00C661C6 /* name_mapper.h in Headers */,
- A94A6BBB22B17BBC00C661C6 /* spirv_optimizer_options.h in Headers */,
- A94A694F22B17BBB00C661C6 /* remove_function_reduction_opportunity.h in Headers */,
- A94A69E522B17BBC00C661C6 /* tree_iterator.h in Headers */,
- A94A6A9D22B17BBC00C661C6 /* inline_pass.h in Headers */,
- A94A6B2522B17BBC00C661C6 /* cfg.h in Headers */,
- A94A6AD722B17BBC00C661C6 /* eliminate_dead_functions_pass.h in Headers */,
- A94A6BB522B17BBC00C661C6 /* latest_version_spirv_header.h in Headers */,
- A94A6AC922B17BBC00C661C6 /* ssa_rewrite_pass.h in Headers */,
- A94A6B0922B17BBC00C661C6 /* pch_source_opt.h in Headers */,
- A94A6BC322B17BBC00C661C6 /* extensions.h in Headers */,
- A94A6C2322B17BBD00C661C6 /* function.h in Headers */,
- A94A690D22B17BBB00C661C6 /* timer.h in Headers */,
- A94A695D22B17BBB00C661C6 /* merge_blocks_reduction_opportunity_finder.h in Headers */,
- A94A69AD22B17BBB00C661C6 /* spirv_validator_options.h in Headers */,
- A94A6BEB22B17BBC00C661C6 /* validation_state.h in Headers */,
- A94A691B22B17BBB00C661C6 /* ilist.h in Headers */,
- A94A6BDD22B17BBC00C661C6 /* basic_block.h in Headers */,
- A94A6B3D22B17BBC00C661C6 /* iterator.h in Headers */,
- A94A6AF322B17BBC00C661C6 /* strip_reflect_info_pass.h in Headers */,
- A94A690922B17BBB00C661C6 /* small_vector.h in Headers */,
- A94A691522B17BBB00C661C6 /* hex_float.h in Headers */,
- A94A6B2122B17BBC00C661C6 /* ir_builder.h in Headers */,
- A94A6A7122B17BBC00C661C6 /* process_lines_pass.h in Headers */,
- A94A68FB22B17BBB00C661C6 /* text.h in Headers */,
- A94A697D22B17BBB00C661C6 /* change_operand_reduction_opportunity.h in Headers */,
- A94A6ADB22B17BBC00C661C6 /* eliminate_dead_functions_util.h in Headers */,
- A94A6AF722B17BBC00C661C6 /* simplification_pass.h in Headers */,
- A94A690722B17BBB00C661C6 /* string_utils.h in Headers */,
- A94A698F22B17BBB00C661C6 /* latest_version_opencl_std_header.h in Headers */,
- A94A6B2B22B17BBC00C661C6 /* generate_webgpu_initializers_pass.h in Headers */,
- A94A6AC522B17BBC00C661C6 /* eliminate_dead_constant_pass.h in Headers */,
- A94A697122B17BBB00C661C6 /* reducer.h in Headers */,
- A94A69E922B17BBC00C661C6 /* legalize_vector_shuffle_pass.h in Headers */,
- A94A6A5522B17BBC00C661C6 /* local_redundancy_elimination.h in Headers */,
- A94A69E122B17BBC00C661C6 /* compact_ids_pass.h in Headers */,
- A94A6B1B22B17BBC00C661C6 /* module.h in Headers */,
- A94A696722B17BBB00C661C6 /* remove_function_reduction_opportunity_finder.h in Headers */,
- A94A6ABB22B17BBC00C661C6 /* workaround1209.h in Headers */,
- A94A6B5F22B17BBC00C661C6 /* table.h in Headers */,
- A94A696922B17BBB00C661C6 /* pch_source_reduce.h in Headers */,
- A94A6AE522B17BBC00C661C6 /* scalar_analysis_nodes.h in Headers */,
- A94A69B122B17BBB00C661C6 /* text_handler.h in Headers */,
- A94A6B5322B17BBC00C661C6 /* set_spec_constant_default_value_pass.h in Headers */,
- A94A699722B17BBB00C661C6 /* enum_string_mapping.h in Headers */,
- A94A692722B17BBB00C661C6 /* operand_to_dominating_id_reduction_opportunity_finder.h in Headers */,
- A94A6A2922B17BBC00C661C6 /* unify_const_pass.h in Headers */,
- A94A6B4722B17BBC00C661C6 /* function.h in Headers */,
- A94A6AD922B17BBC00C661C6 /* common_uniform_elim_pass.h in Headers */,
- A94A6C0322B17BBD00C661C6 /* validate_memory_semantics.h in Headers */,
- A94A690122B17BBB00C661C6 /* parse_number.h in Headers */,
- A94A6AA122B17BBC00C661C6 /* value_number_table.h in Headers */,
- A94A6B1922B17BBC00C661C6 /* loop_utils.h in Headers */,
- A94A6AEF22B17BBC00C661C6 /* passes.h in Headers */,
- A94A6C2B22B17BBD00C661C6 /* decoration.h in Headers */,
- A94A6BB122B17BBC00C661C6 /* ext_inst.h in Headers */,
- A94A697722B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h in Headers */,
- A94A6A0122B17BBC00C661C6 /* replace_invalid_opc.h in Headers */,
- A94A6B4D22B17BBC00C661C6 /* feature_manager.h in Headers */,
- A94A6BF722B17BBD00C661C6 /* validate.h in Headers */,
- A94A6A5D22B17BBC00C661C6 /* block_merge_util.h in Headers */,
- A94A6ADD22B17BBC00C661C6 /* fold.h in Headers */,
- A94A6A8722B17BBC00C661C6 /* freeze_spec_constant_value_pass.h in Headers */,
- A94A69ED22B17BBC00C661C6 /* reduce_load_size.h in Headers */,
- A94A68F122B17BBB00C661C6 /* spirv_fuzzer_options.h in Headers */,
- A94A6B0522B17BBC00C661C6 /* scalar_replacement_pass.h in Headers */,
- A94A690322B17BBB00C661C6 /* ilist_node.h in Headers */,
- A94A6C1922B17BBD00C661C6 /* instruction.h in Headers */,
- A94A68F522B17BBB00C661C6 /* enum_set.h in Headers */,
- A94A69B322B17BBB00C661C6 /* parsed_operand.h in Headers */,
- A94A6A1922B17BBC00C661C6 /* ir_context.h in Headers */,
- A94A6AA722B17BBC00C661C6 /* inline_exhaustive_pass.h in Headers */,
- A94A6B1322B17BBC00C661C6 /* local_ssa_elim_pass.h in Headers */,
- A94A6B2722B17BBC00C661C6 /* code_sink.h in Headers */,
- A94A698522B17BBB00C661C6 /* merge_blocks_reduction_opportunity.h in Headers */,
- A94A6A4B22B17BBC00C661C6 /* def_use_manager.h in Headers */,
- A94A6A4F22B17BBC00C661C6 /* cfg_cleanup_pass.h in Headers */,
- A94A69C722B17BBC00C661C6 /* print.h in Headers */,
- A94A69D722B17BBC00C661C6 /* inline_opaque_pass.h in Headers */,
- A94A695122B17BBB00C661C6 /* change_operand_to_undef_reduction_opportunity.h in Headers */,
- A94A6A0322B17BBC00C661C6 /* local_access_chain_convert_pass.h in Headers */,
- A94A6BC122B17BBC00C661C6 /* latest_version_glsl_std_450_header.h in Headers */,
- A94A69A322B17BBB00C661C6 /* operand.h in Headers */,
- A94A6BD322B17BBC00C661C6 /* construct.h in Headers */,
- A94A6ACD22B17BBC00C661C6 /* dead_variable_elimination.h in Headers */,
- A94A692D22B17BBB00C661C6 /* operand_to_const_reduction_opportunity_finder.h in Headers */,
- A94A698D22B17BBB00C661C6 /* reduction_pass.h in Headers */,
- A94A6B2322B17BBC00C661C6 /* loop_unswitch_pass.h in Headers */,
- A94A695722B17BBB00C661C6 /* remove_selection_reduction_opportunity.h in Headers */,
- A94A6A4722B17BBC00C661C6 /* private_to_local_pass.h in Headers */,
- A94A691122B17BBB00C661C6 /* bit_vector.h in Headers */,
- A94A6A9322B17BBC00C661C6 /* eliminate_dead_members_pass.h in Headers */,
- A94A699522B17BBB00C661C6 /* pch_source.h in Headers */,
+ A9C2F37A22E7833D001763CE /* vector_dce.h in Headers */,
+ A9C2F42C22E7833D001763CE /* latest_version_glsl_std_450_header.h in Headers */,
+ A9C2F27822E7833D001763CE /* types.h in Headers */,
+ A9C2F24022E7833D001763CE /* strip_debug_info_pass.h in Headers */,
+ A9C2F31E22E7833D001763CE /* folding_rules.h in Headers */,
+ A9C2F16C22E7833D001763CE /* operand_to_undef_reduction_opportunity_finder.h in Headers */,
+ A9C2F49022E7833D001763CE /* function.h in Headers */,
+ A9C2F38622E7833D001763CE /* licm_pass.h in Headers */,
+ A9C2F32C22E7833D001763CE /* scalar_analysis_nodes.h in Headers */,
+ A9C2F1A022E7833D001763CE /* structured_loop_to_selection_reduction_opportunity_finder.h in Headers */,
+ A9C2F23E22E7833D001763CE /* scalar_analysis.h in Headers */,
+ A9C2F2E822E7833D001763CE /* loop_dependence.h in Headers */,
+ A9C2F27622E7833D001763CE /* ir_loader.h in Headers */,
+ A9C2F1C622E7833D001763CE /* reduction_opportunity_finder.h in Headers */,
+ A9C2F42822E7833D001763CE /* opcode.h in Headers */,
+ A9C2F2D622E7833D001763CE /* mem_pass.h in Headers */,
+ A9C2F44822E7833D001763CE /* basic_block.h in Headers */,
+ A9C2F21622E7833D001763CE /* disassemble.h in Headers */,
+ A9C2F47022E7833D001763CE /* validate_memory_semantics.h in Headers */,
+ A9C2F18422E7833D001763CE /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h in Headers */,
+ A9C2F34C22E7833D001763CE /* scalar_replacement_pass.h in Headers */,
+ A9C2F19222E7833D001763CE /* simple_conditional_branch_to_branch_opportunity_finder.h in Headers */,
+ A9C2F2AE22E7833D001763CE /* loop_fusion_pass.h in Headers */,
+ A9C2F49822E7833D001763CE /* decoration.h in Headers */,
+ A9C2F36222E7833D001763CE /* module.h in Headers */,
+ A9C2F27E22E7833D001763CE /* basic_block.h in Headers */,
+ A9C2F43222E7833D001763CE /* binary.h in Headers */,
+ A9C2F37622E7833D001763CE /* aggressive_dead_code_elim_pass.h in Headers */,
+ A9C2F37E22E7833D001763CE /* pass_manager.h in Headers */,
+ A9C2F22022E7833D001763CE /* merge_return_pass.h in Headers */,
+ A9C2F1E622E7833D001763CE /* spirv_reducer_options.h in Headers */,
+ A9C2F22A22E7833D001763CE /* composite.h in Headers */,
+ A9C2F31A22E7833D001763CE /* dominator_analysis.h in Headers */,
+ A9C2F38A22E7833D001763CE /* ccp_pass.h in Headers */,
+ A9C2F2EC22E7833D001763CE /* flatten_decoration_pass.h in Headers */,
+ A9C2F20822E7833D001763CE /* spirv_endian.h in Headers */,
+ A9C2F18A22E7833D001763CE /* remove_opname_instruction_reduction_opportunity_finder.h in Headers */,
+ A9C2F1F422E7833D001763CE /* spirv_constant.h in Headers */,
+ A9C2F21A22E7833D001763CE /* if_conversion.h in Headers */,
+ A9C2F1B622E7833D001763CE /* remove_unreferenced_instruction_reduction_opportunity_finder.h in Headers */,
+ A9C2F15E22E7833D001763CE /* bitutils.h in Headers */,
+ A9C2F26C22E7833D001763CE /* loop_unroller.h in Headers */,
+ A9C2F1CA22E7833D001763CE /* remove_block_reduction_opportunity_finder.h in Headers */,
+ A9C2F16822E7833D001763CE /* spirv_target_env.h in Headers */,
+ A9C2F36E22E7833D001763CE /* code_sink.h in Headers */,
+ A9C2F23222E7833D001763CE /* strip_atomic_counter_memory_pass.h in Headers */,
+ A9C2F2D422E7833D001763CE /* instrument_pass.h in Headers */,
+ A9C2F38822E7833D001763CE /* build_module.h in Headers */,
+ A9C2F42E22E7833D001763CE /* extensions.h in Headers */,
+ A9C2F48622E7833D001763CE /* instruction.h in Headers */,
+ A9C2F33022E7833D001763CE /* fix_storage_class.h in Headers */,
+ A9C2F36822E7833D001763CE /* ir_builder.h in Headers */,
+ A9C2F2B622E7833D001763CE /* decoration_manager.h in Headers */,
+ A9C2F33A22E7833D001763CE /* strip_reflect_info_pass.h in Headers */,
+ A9C2F38422E7833D001763CE /* iterator.h in Headers */,
+ A9C2F38C22E7833D001763CE /* decompose_initialized_variables_pass.h in Headers */,
+ A9C2F34822E7833D001763CE /* null_pass.h in Headers */,
+ A9C2F30A22E7833D001763CE /* split_invalid_unreachable_pass.h in Headers */,
+ A9C2F30C22E7833D001763CE /* copy_prop_arrays.h in Headers */,
+ A9C2F22422E7833D001763CE /* loop_fusion.h in Headers */,
+ A9C2F3A622E7833D001763CE /* table.h in Headers */,
+ A9C2F15022E7833D001763CE /* make_unique.h in Headers */,
+ A9C2F31C22E7833D001763CE /* pass.h in Headers */,
+ A9C2F2BC22E7833D001763CE /* local_single_block_elim_pass.h in Headers */,
+ A9C2F2A422E7833D001763CE /* loop_peeling.h in Headers */,
+ A9C2F19822E7833D001763CE /* structured_loop_to_selection_reduction_opportunity.h in Headers */,
+ A9C2F1DE22E7833D001763CE /* cfa.h in Headers */,
+ A9C2F2C022E7833D001763CE /* strength_reduction_pass.h in Headers */,
+ A9C2F28422E7833D001763CE /* block_merge_pass.h in Headers */,
+ A9C2F33622E7833D001763CE /* passes.h in Headers */,
+ A9C2F46222E7833D001763CE /* validate.h in Headers */,
+ A9C2F22E22E7833D001763CE /* register_pressure.h in Headers */,
+ A9C2F1C022E7833D001763CE /* reduction_opportunity.h in Headers */,
+ A9C2F1A622E7833D001763CE /* remove_selection_reduction_opportunity_finder.h in Headers */,
+ A9C2F2B022E7833D001763CE /* struct_cfg_analysis.h in Headers */,
+ A9C2F1CE22E7833D001763CE /* reduction_util.h in Headers */,
+ A9C2F23622E7833D001763CE /* local_single_store_elim_pass.h in Headers */,
+ A9C2F18222E7833D001763CE /* remove_instruction_reduction_opportunity.h in Headers */,
+ A9C2F13E22E7833D001763CE /* assembly_grammar.h in Headers */,
+ A9C2F20622E7833D001763CE /* diagnostic.h in Headers */,
+ A9C2F45622E7833D001763CE /* validation_state.h in Headers */,
+ A9C2F1EC22E7833D001763CE /* spirv_definition.h in Headers */,
+ A9C2F35022E7833D001763CE /* pch_source_opt.h in Headers */,
+ A9C2F25822E7833D001763CE /* instruction_list.h in Headers */,
+ A9C2F30222E7833D001763CE /* loop_fission.h in Headers */,
+ A9C2F17022E7833D001763CE /* remove_block_reduction_opportunity.h in Headers */,
+ A9C2F39622E7833D001763CE /* inst_bindless_check_pass.h in Headers */,
+ A9C2F2F222E7833D001763CE /* constants.h in Headers */,
+ A9C2F1F222E7833D001763CE /* macro.h in Headers */,
+ A9C2F42622E7833D001763CE /* spirv_optimizer_options.h in Headers */,
+ A9C2F43E22E7833D001763CE /* construct.h in Headers */,
+ A9C2F25622E7833D001763CE /* propagator.h in Headers */,
+ A9C2F39422E7833D001763CE /* feature_manager.h in Headers */,
+ A9C2F2CC22E7833D001763CE /* dead_insert_elim_pass.h in Headers */,
+ A9C2F42022E7833D001763CE /* latest_version_spirv_header.h in Headers */,
+ A9C2F3A022E7833D001763CE /* type_manager.h in Headers */,
+ A9C2F27A22E7833D001763CE /* fold_spec_constant_op_and_composite_pass.h in Headers */,
+ A9C2F17E22E7833D001763CE /* simple_conditional_branch_to_branch_reduction_opportunity.h in Headers */,
+ A9C2F30822E7833D001763CE /* log.h in Headers */,
+ A9C2F39C22E7833D001763CE /* dominator_tree.h in Headers */,
+ A9C2F2FA22E7833D001763CE /* upgrade_memory_model.h in Headers */,
+ A9C2F20022E7833D001763CE /* name_mapper.h in Headers */,
+ A9C2F19A22E7833D001763CE /* remove_function_reduction_opportunity.h in Headers */,
+ A9C2F23022E7833D001763CE /* tree_iterator.h in Headers */,
+ A9C2F34A22E7833D001763CE /* const_folding_rules.h in Headers */,
+ A9C2F34022E7833D001763CE /* remove_duplicates_pass.h in Headers */,
+ A9C2F41C22E7833D001763CE /* ext_inst.h in Headers */,
+ A9C2F2E622E7833D001763CE /* inline_pass.h in Headers */,
+ A9C2F37C22E7833D001763CE /* combine_access_chains.h in Headers */,
+ A9C2F32022E7833D001763CE /* eliminate_dead_functions_pass.h in Headers */,
+ A9C2F31222E7833D001763CE /* ssa_rewrite_pass.h in Headers */,
+ A9C2F15822E7833D001763CE /* timer.h in Headers */,
+ A9C2F42422E7833D001763CE /* instruction.h in Headers */,
+ A9C2F35A22E7833D001763CE /* local_ssa_elim_pass.h in Headers */,
+ A9C2F34422E7833D001763CE /* reflect.h in Headers */,
+ A9C2F1A822E7833D001763CE /* merge_blocks_reduction_opportunity_finder.h in Headers */,
+ A9C2F1F822E7833D001763CE /* spirv_validator_options.h in Headers */,
+ A9C2F32422E7833D001763CE /* fold.h in Headers */,
+ A9C2F16622E7833D001763CE /* ilist.h in Headers */,
+ A9C2F15422E7833D001763CE /* small_vector.h in Headers */,
+ A9C2F16022E7833D001763CE /* hex_float.h in Headers */,
+ A9C2F2BA22E7833D001763CE /* process_lines_pass.h in Headers */,
+ A9C2F14622E7833D001763CE /* text.h in Headers */,
+ A9C2F1C822E7833D001763CE /* change_operand_reduction_opportunity.h in Headers */,
+ A9C2F38E22E7833D001763CE /* function.h in Headers */,
+ A9C2F15222E7833D001763CE /* string_utils.h in Headers */,
+ A9C2F1DA22E7833D001763CE /* latest_version_opencl_std_header.h in Headers */,
+ A9C2F30E22E7833D001763CE /* eliminate_dead_constant_pass.h in Headers */,
+ A9C2F1BC22E7833D001763CE /* reducer.h in Headers */,
+ A9C2F36022E7833D001763CE /* loop_utils.h in Headers */,
+ A9C2F23422E7833D001763CE /* legalize_vector_shuffle_pass.h in Headers */,
+ A9C2F2A022E7833D001763CE /* local_redundancy_elimination.h in Headers */,
+ A9C2F22C22E7833D001763CE /* compact_ids_pass.h in Headers */,
+ A9C2F1B222E7833D001763CE /* remove_function_reduction_opportunity_finder.h in Headers */,
+ A9C2F30422E7833D001763CE /* workaround1209.h in Headers */,
+ A9C2F1B422E7833D001763CE /* pch_source_reduce.h in Headers */,
+ A9C2F1FC22E7833D001763CE /* text_handler.h in Headers */,
+ A9C2F1E222E7833D001763CE /* enum_string_mapping.h in Headers */,
+ A9C2F17222E7833D001763CE /* operand_to_dominating_id_reduction_opportunity_finder.h in Headers */,
+ A9C2F27422E7833D001763CE /* unify_const_pass.h in Headers */,
+ A9C2F14C22E7833D001763CE /* parse_number.h in Headers */,
+ A9C2F2EA22E7833D001763CE /* value_number_table.h in Headers */,
+ A9C2F1C222E7833D001763CE /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h in Headers */,
+ A9C2F24C22E7833D001763CE /* replace_invalid_opc.h in Headers */,
+ A9C2F2A822E7833D001763CE /* block_merge_util.h in Headers */,
+ A9C2F35422E7833D001763CE /* redundancy_elimination.h in Headers */,
+ A9C2F37222E7833D001763CE /* generate_webgpu_initializers_pass.h in Headers */,
+ A9C2F2D022E7833D001763CE /* freeze_spec_constant_value_pass.h in Headers */,
+ A9C2F23822E7833D001763CE /* reduce_load_size.h in Headers */,
+ A9C2F37422E7833D001763CE /* instruction.h in Headers */,
+ A9C2F13C22E7833D001763CE /* spirv_fuzzer_options.h in Headers */,
+ A9C2F46C22E7833D001763CE /* validate_scopes.h in Headers */,
+ A9C2F14E22E7833D001763CE /* ilist_node.h in Headers */,
+ A9C2F14022E7833D001763CE /* enum_set.h in Headers */,
+ A9C2F1FE22E7833D001763CE /* parsed_operand.h in Headers */,
+ A9C2F26422E7833D001763CE /* ir_context.h in Headers */,
+ A9C2F36C22E7833D001763CE /* cfg.h in Headers */,
+ A9C2F2F022E7833D001763CE /* inline_exhaustive_pass.h in Headers */,
+ A9C2F1D022E7833D001763CE /* merge_blocks_reduction_opportunity.h in Headers */,
+ A9C2F33E22E7833D001763CE /* simplification_pass.h in Headers */,
+ A9C2F29622E7833D001763CE /* def_use_manager.h in Headers */,
+ A9C2F29A22E7833D001763CE /* cfg_cleanup_pass.h in Headers */,
+ A9C2F21222E7833D001763CE /* print.h in Headers */,
+ A9C2F22222E7833D001763CE /* inline_opaque_pass.h in Headers */,
+ A9C2F19C22E7833D001763CE /* change_operand_to_undef_reduction_opportunity.h in Headers */,
+ A9C2F39A22E7833D001763CE /* set_spec_constant_default_value_pass.h in Headers */,
+ A9C2F24E22E7833D001763CE /* local_access_chain_convert_pass.h in Headers */,
+ A9C2F1EE22E7833D001763CE /* operand.h in Headers */,
+ A9C2F31622E7833D001763CE /* dead_variable_elimination.h in Headers */,
+ A9C2F32222E7833D001763CE /* eliminate_dead_functions_util.h in Headers */,
+ A9C2F17822E7833D001763CE /* operand_to_const_reduction_opportunity_finder.h in Headers */,
+ A9C2F37022E7833D001763CE /* loop_descriptor.h in Headers */,
+ A9C2F1D822E7833D001763CE /* reduction_pass.h in Headers */,
+ A9C2F1A222E7833D001763CE /* remove_selection_reduction_opportunity.h in Headers */,
+ A9C2F29222E7833D001763CE /* private_to_local_pass.h in Headers */,
+ A9C2F15C22E7833D001763CE /* bit_vector.h in Headers */,
+ A9C2F36A22E7833D001763CE /* loop_unswitch_pass.h in Headers */,
+ A9C2F2DC22E7833D001763CE /* eliminate_dead_members_pass.h in Headers */,
+ A9C2F1E022E7833D001763CE /* pch_source.h in Headers */,
+ A9C2F32822E7833D001763CE /* dead_branch_elim_pass.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -2987,200 +2981,200 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- A94A6A3A22B17BBC00C661C6 /* module.cpp in Sources */,
- A94A6B5622B17BBC00C661C6 /* legalize_vector_shuffle_pass.cpp in Sources */,
- A94A6AAA22B17BBC00C661C6 /* eliminate_dead_members_pass.cpp in Sources */,
- A94A6B1422B17BBC00C661C6 /* inline_opaque_pass.cpp in Sources */,
- A94A697822B17BBB00C661C6 /* operand_to_dominating_id_reduction_opportunity_finder.cpp in Sources */,
- A94A693A22B17BBB00C661C6 /* simple_conditional_branch_to_branch_reduction_opportunity.cpp in Sources */,
- A94A6AA422B17BBC00C661C6 /* if_conversion.cpp in Sources */,
- A94A6A5E22B17BBC00C661C6 /* loop_unroller.cpp in Sources */,
- A94A6A1C22B17BBC00C661C6 /* cfg_cleanup_pass.cpp in Sources */,
- A94A6C0A22B17BBD00C661C6 /* validate_logicals.cpp in Sources */,
- A94A69D022B17BBC00C661C6 /* register_pressure.cpp in Sources */,
- A94A695822B17BBB00C661C6 /* remove_instruction_reduction_opportunity.cpp in Sources */,
- A94A6A2622B17BBC00C661C6 /* loop_dependence.cpp in Sources */,
- A94A6B0E22B17BBC00C661C6 /* fix_storage_class.cpp in Sources */,
- A94A6A8E22B17BBC00C661C6 /* loop_descriptor.cpp in Sources */,
- A94A6C1E22B17BBD00C661C6 /* basic_block.cpp in Sources */,
- A94A6A1622B17BBC00C661C6 /* merge_return_pass.cpp in Sources */,
- A94A6AB222B17BBC00C661C6 /* copy_prop_arrays.cpp in Sources */,
- A94A6C1422B17BBD00C661C6 /* instruction.cpp in Sources */,
- A94A6A4422B17BBC00C661C6 /* generate_webgpu_initializers_pass.cpp in Sources */,
- A94A6AEC22B17BBC00C661C6 /* set_spec_constant_default_value_pass.cpp in Sources */,
- A94A696222B17BBB00C661C6 /* reducer.cpp in Sources */,
- A94A6BFC22B17BBD00C661C6 /* validate_datarules.cpp in Sources */,
- A94A6BD022B17BBC00C661C6 /* validate_capability.cpp in Sources */,
- A94A6A4822B17BBC00C661C6 /* inline_pass.cpp in Sources */,
- A94A6AAC22B17BBC00C661C6 /* strength_reduction_pass.cpp in Sources */,
- A94A6B1022B17BBC00C661C6 /* value_number_table.cpp in Sources */,
- A94A6C1022B17BBD00C661C6 /* validate_image.cpp in Sources */,
- A94A6B0622B17BBC00C661C6 /* instruction.cpp in Sources */,
- A94A6BC422B17BBC00C661C6 /* disassemble.cpp in Sources */,
- A94A6A3C22B17BBC00C661C6 /* fold_spec_constant_op_and_composite_pass.cpp in Sources */,
- A94A6A5622B17BBC00C661C6 /* split_invalid_unreachable_pass.cpp in Sources */,
- A94A68F622B17BBB00C661C6 /* text.cpp in Sources */,
- A94A69C822B17BBC00C661C6 /* ext_inst.cpp in Sources */,
- A94A6C2822B17BBD00C661C6 /* validate_primitives.cpp in Sources */,
- A94A68FE22B17BBB00C661C6 /* pch_source.cpp in Sources */,
- A94A69F622B17BBC00C661C6 /* cfg.cpp in Sources */,
- A94A6A8422B17BBC00C661C6 /* folding_rules.cpp in Sources */,
- A94A6AE222B17BBC00C661C6 /* private_to_local_pass.cpp in Sources */,
- A94A6A2422B17BBC00C661C6 /* ssa_rewrite_pass.cpp in Sources */,
- A94A6B1622B17BBC00C661C6 /* replace_invalid_opc.cpp in Sources */,
- A94A693C22B17BBB00C661C6 /* remove_function_reduction_opportunity.cpp in Sources */,
- A94A694222B17BBB00C661C6 /* remove_selection_reduction_opportunity_finder.cpp in Sources */,
- A94A6B0A22B17BBC00C661C6 /* reduce_load_size.cpp in Sources */,
- A94A6A6022B17BBC00C661C6 /* constants.cpp in Sources */,
- A94A694422B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp in Sources */,
- A94A6A8022B17BBC00C661C6 /* flatten_decoration_pass.cpp in Sources */,
- A94A6A9822B17BBC00C661C6 /* composite.cpp in Sources */,
- A94A696C22B17BBB00C661C6 /* merge_blocks_reduction_opportunity_finder.cpp in Sources */,
- A94A6AB622B17BBC00C661C6 /* inline_exhaustive_pass.cpp in Sources */,
- A94A6C2422B17BBD00C661C6 /* validate_composites.cpp in Sources */,
- A94A691E22B17BBB00C661C6 /* table.cpp in Sources */,
- A94A6BE422B17BBC00C661C6 /* validate_builtins.cpp in Sources */,
- A94A6A6822B17BBC00C661C6 /* def_use_manager.cpp in Sources */,
- A94A6AB422B17BBC00C661C6 /* pass_manager.cpp in Sources */,
- A94A69C422B17BBC00C661C6 /* opcode.cpp in Sources */,
- A94A6A4C22B17BBC00C661C6 /* ir_loader.cpp in Sources */,
- A94A69FE22B17BBC00C661C6 /* freeze_spec_constant_value_pass.cpp in Sources */,
- A94A69CC22B17BBC00C661C6 /* optimizer.cpp in Sources */,
- A94A6BCE22B17BBC00C661C6 /* validate_cfg.cpp in Sources */,
- A94A699822B17BBB00C661C6 /* spirv_fuzzer_options.cpp in Sources */,
- A94A69EE22B17BBC00C661C6 /* code_sink.cpp in Sources */,
- A94A696022B17BBB00C661C6 /* pch_source_reduce.cpp in Sources */,
- A94A6BC822B17BBC00C661C6 /* text_handler.cpp in Sources */,
- A94A69FA22B17BBC00C661C6 /* decoration_manager.cpp in Sources */,
- A94A6A9A22B17BBC00C661C6 /* process_lines_pass.cpp in Sources */,
- A94A697222B17BBB00C661C6 /* change_operand_to_undef_reduction_opportunity.cpp in Sources */,
- A94A693422B17BBB00C661C6 /* remove_function_reduction_opportunity_finder.cpp in Sources */,
- A94A68EE22B17BBB00C661C6 /* spirv_target_env.cpp in Sources */,
- A94A6BE022B17BBC00C661C6 /* validate_decorations.cpp in Sources */,
- A94A6C1A22B17BBD00C661C6 /* validate_execution_limitations.cpp in Sources */,
- A94A6BF822B17BBD00C661C6 /* validate_adjacency.cpp in Sources */,
- A94A692222B17BBB00C661C6 /* remove_selection_reduction_opportunity.cpp in Sources */,
- A94A696E22B17BBB00C661C6 /* reduction_opportunity.cpp in Sources */,
- A94A6A2222B17BBC00C661C6 /* strip_debug_info_pass.cpp in Sources */,
- A94A6AFA22B17BBC00C661C6 /* redundancy_elimination.cpp in Sources */,
- A94A6A5A22B17BBC00C661C6 /* vector_dce.cpp in Sources */,
- A94A69B622B17BBB00C661C6 /* spirv_reducer_options.cpp in Sources */,
- A94A6A6A22B17BBC00C661C6 /* strip_reflect_info_pass.cpp in Sources */,
- A94A6BD822B17BBC00C661C6 /* validate_scopes.cpp in Sources */,
- A94A6BB222B17BBC00C661C6 /* diagnostic.cpp in Sources */,
- A94A6ACE22B17BBC00C661C6 /* block_merge_pass.cpp in Sources */,
- A94A69C222B17BBC00C661C6 /* software_version.cpp in Sources */,
- A94A6C0022B17BBD00C661C6 /* validate_id.cpp in Sources */,
- A94A6BDA22B17BBC00C661C6 /* validate_atomics.cpp in Sources */,
- A94A690E22B17BBB00C661C6 /* string_utils.cpp in Sources */,
- A94A6A1422B17BBC00C661C6 /* dominator_tree.cpp in Sources */,
- A94A69FC22B17BBC00C661C6 /* local_single_block_elim_pass.cpp in Sources */,
- A94A6A6E22B17BBC00C661C6 /* ccp_pass.cpp in Sources */,
- A94A6AAE22B17BBC00C661C6 /* block_merge_util.cpp in Sources */,
- A94A6B3A22B17BBC00C661C6 /* basic_block.cpp in Sources */,
- A94A6BE222B17BBC00C661C6 /* validate_debug.cpp in Sources */,
- A94A691622B17BBB00C661C6 /* parse_number.cpp in Sources */,
- A94A6BFA22B17BBD00C661C6 /* validate_conversion.cpp in Sources */,
- A94A6C2622B17BBD00C661C6 /* validation_state.cpp in Sources */,
- A94A6B5022B17BBC00C661C6 /* scalar_analysis_simplification.cpp in Sources */,
- A94A6B1E22B17BBC00C661C6 /* decompose_initialized_variables_pass.cpp in Sources */,
- A94A6BEE22B17BBD00C661C6 /* validate_bitwise.cpp in Sources */,
- A94A696422B17BBB00C661C6 /* operand_to_undef_reduction_opportunity_finder.cpp in Sources */,
- A94A6BF222B17BBD00C661C6 /* construct.cpp in Sources */,
- A94A69BE22B17BBB00C661C6 /* name_mapper.cpp in Sources */,
- A94A692E22B17BBB00C661C6 /* reduction_util.cpp in Sources */,
- A94A698A22B17BBB00C661C6 /* remove_block_reduction_opportunity.cpp in Sources */,
- A94A6B3022B17BBC00C661C6 /* struct_cfg_analysis.cpp in Sources */,
- A94A6A3622B17BBC00C661C6 /* dead_variable_elimination.cpp in Sources */,
- A94A6BB622B17BBC00C661C6 /* libspirv.cpp in Sources */,
- A94A6A6622B17BBC00C661C6 /* common_uniform_elim_pass.cpp in Sources */,
- A94A6AFE22B17BBC00C661C6 /* workaround1209.cpp in Sources */,
- A94A6C0622B17BBD00C661C6 /* validate_mode_setting.cpp in Sources */,
- A94A6B3822B17BBC00C661C6 /* local_access_chain_convert_pass.cpp in Sources */,
- A94A69F022B17BBC00C661C6 /* types.cpp in Sources */,
- A94A6C1222B17BBD00C661C6 /* validate_literals.cpp in Sources */,
- A94A6A3022B17BBC00C661C6 /* mem_pass.cpp in Sources */,
- A94A68F822B17BBB00C661C6 /* assembly_grammar.cpp in Sources */,
- A94A6BF022B17BBD00C661C6 /* validate_extensions.cpp in Sources */,
- A94A6BEC22B17BBD00C661C6 /* validate_constants.cpp in Sources */,
- A94A69D222B17BBC00C661C6 /* loop_utils.cpp in Sources */,
- A94A6A1222B17BBC00C661C6 /* loop_fission.cpp in Sources */,
- A94A698622B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp in Sources */,
- A94A694A22B17BBB00C661C6 /* change_operand_reduction_opportunity.cpp in Sources */,
- A94A69DA22B17BBC00C661C6 /* combine_access_chains.cpp in Sources */,
- A94A6A9622B17BBC00C661C6 /* instruction_list.cpp in Sources */,
- A94A6A7422B17BBC00C661C6 /* pch_source_opt.cpp in Sources */,
- A94A694022B17BBB00C661C6 /* simple_conditional_branch_to_branch_opportunity_finder.cpp in Sources */,
- A94A69B822B17BBB00C661C6 /* parsed_operand.cpp in Sources */,
- A94A6A5222B17BBC00C661C6 /* eliminate_dead_functions_pass.cpp in Sources */,
- A94A6A1E22B17BBC00C661C6 /* const_folding_rules.cpp in Sources */,
- A94A6BD622B17BBC00C661C6 /* validate_non_uniform.cpp in Sources */,
- A94A6AEA22B17BBC00C661C6 /* loop_dependence_helpers.cpp in Sources */,
- A94A6C0E22B17BBD00C661C6 /* validate_memory.cpp in Sources */,
- A94A6AF422B17BBC00C661C6 /* scalar_replacement_pass.cpp in Sources */,
- A94A695222B17BBB00C661C6 /* remove_unreferenced_instruction_reduction_opportunity_finder.cpp in Sources */,
- A94A691822B17BBB00C661C6 /* bit_vector.cpp in Sources */,
- A94A6ACA22B17BBC00C661C6 /* scalar_analysis.cpp in Sources */,
- A94A6C1C22B17BBD00C661C6 /* validate_layout.cpp in Sources */,
- A94A6AE622B17BBC00C661C6 /* propagator.cpp in Sources */,
- A94A6A9422B17BBC00C661C6 /* function.cpp in Sources */,
- A94A69C022B17BBB00C661C6 /* linker.cpp in Sources */,
- A94A6B1C22B17BBC00C661C6 /* dominator_analysis.cpp in Sources */,
- A94A6A7A22B17BBC00C661C6 /* eliminate_dead_functions_util.cpp in Sources */,
- A94A68FC22B17BBB00C661C6 /* extensions.cpp in Sources */,
- A94A6BE822B17BBC00C661C6 /* validate.cpp in Sources */,
- A94A6A1A22B17BBC00C661C6 /* eliminate_dead_constant_pass.cpp in Sources */,
- A94A693022B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity_finder.cpp in Sources */,
- A94A694822B17BBB00C661C6 /* merge_blocks_reduction_opportunity.cpp in Sources */,
- A94A6B4A22B17BBC00C661C6 /* upgrade_memory_model.cpp in Sources */,
- A94A6BCC22B17BBC00C661C6 /* validate_misc.cpp in Sources */,
- A94A6A0422B17BBC00C661C6 /* inst_bindless_check_pass.cpp in Sources */,
- A94A699E22B17BBB00C661C6 /* print.cpp in Sources */,
- A94A699C22B17BBB00C661C6 /* spirv_validator_options.cpp in Sources */,
- A94A692822B17BBB00C661C6 /* reduction_pass.cpp in Sources */,
- A94A69DC22B17BBC00C661C6 /* build_module.cpp in Sources */,
- A94A6AF022B17BBC00C661C6 /* fold.cpp in Sources */,
- A94A6A0622B17BBC00C661C6 /* local_redundancy_elimination.cpp in Sources */,
- A94A690A22B17BBB00C661C6 /* timer.cpp in Sources */,
- A94A6A7822B17BBC00C661C6 /* aggressive_dead_code_elim_pass.cpp in Sources */,
- A94A6BD422B17BBC00C661C6 /* validate_barriers.cpp in Sources */,
- A94A699022B17BBB00C661C6 /* spirv_optimizer_options.cpp in Sources */,
- A94A6A0E22B17BBC00C661C6 /* feature_manager.cpp in Sources */,
- A94A6C1622B17BBD00C661C6 /* validate_type.cpp in Sources */,
- A94A698822B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity.cpp in Sources */,
- A94A6B5A22B17BBC00C661C6 /* compact_ids_pass.cpp in Sources */,
- A94A6A4222B17BBC00C661C6 /* type_manager.cpp in Sources */,
- A94A695E22B17BBB00C661C6 /* remove_opname_instruction_reduction_opportunity_finder.cpp in Sources */,
- A94A6BDE22B17BBC00C661C6 /* validate_instruction.cpp in Sources */,
- A94A6A0822B17BBC00C661C6 /* instrument_pass.cpp in Sources */,
- A94A6B5C22B17BBC00C661C6 /* loop_peeling.cpp in Sources */,
- A94A6ABC22B17BBC00C661C6 /* loop_fusion_pass.cpp in Sources */,
- A94A6A3E22B17BBC00C661C6 /* loop_unswitch_pass.cpp in Sources */,
- A94A6C0422B17BBD00C661C6 /* validate_arithmetics.cpp in Sources */,
- A94A69AA22B17BBB00C661C6 /* binary.cpp in Sources */,
- A94A6AC622B17BBC00C661C6 /* dead_insert_elim_pass.cpp in Sources */,
- A94A6BF422B17BBD00C661C6 /* function.cpp in Sources */,
- A94A6ADE22B17BBC00C661C6 /* local_single_store_elim_pass.cpp in Sources */,
- A94A6BCA22B17BBC00C661C6 /* validate_annotation.cpp in Sources */,
- A94A6A5022B17BBC00C661C6 /* licm_pass.cpp in Sources */,
- A94A692A22B17BBB00C661C6 /* operand_to_const_reduction_opportunity_finder.cpp in Sources */,
- A94A6BE622B17BBC00C661C6 /* validate_interfaces.cpp in Sources */,
- A94A6A3422B17BBC00C661C6 /* remove_duplicates_pass.cpp in Sources */,
- A94A69F822B17BBC00C661C6 /* strip_atomic_counter_memory_pass.cpp in Sources */,
- A94A6C0C22B17BBD00C661C6 /* validate_derivatives.cpp in Sources */,
- A94A6A8822B17BBC00C661C6 /* ir_context.cpp in Sources */,
- A94A6A7E22B17BBC00C661C6 /* dead_branch_elim_pass.cpp in Sources */,
- A94A6A9022B17BBC00C661C6 /* local_ssa_elim_pass.cpp in Sources */,
- A94A6A1022B17BBC00C661C6 /* pass.cpp in Sources */,
- A94A6A4022B17BBC00C661C6 /* unify_const_pass.cpp in Sources */,
- A94A6BBE22B17BBC00C661C6 /* operand.cpp in Sources */,
- A94A6C2022B17BBD00C661C6 /* validate_function.cpp in Sources */,
- A94A698022B17BBB00C661C6 /* remove_block_reduction_opportunity_finder.cpp in Sources */,
- A94A6A7C22B17BBC00C661C6 /* simplification_pass.cpp in Sources */,
- A94A6B4822B17BBC00C661C6 /* loop_fusion.cpp in Sources */,
- A94A69AE22B17BBB00C661C6 /* enum_string_mapping.cpp in Sources */,
- A94A6C0822B17BBD00C661C6 /* validate_memory_semantics.cpp in Sources */,
- A94A69A422B17BBB00C661C6 /* spirv_endian.cpp in Sources */,
+ A9C2F30F22E7833D001763CE /* dead_insert_elim_pass.cpp in Sources */,
+ A9C2F2BD22E7833D001763CE /* pch_source_opt.cpp in Sources */,
+ A9C2F28522E7833D001763CE /* module.cpp in Sources */,
+ A9C2F30522E7833D001763CE /* loop_fusion_pass.cpp in Sources */,
+ A9C2F33122E7833D001763CE /* loop_dependence_helpers.cpp in Sources */,
+ A9C2F44F22E7833D001763CE /* validate_builtins.cpp in Sources */,
+ A9C2F1C322E7833D001763CE /* operand_to_dominating_id_reduction_opportunity_finder.cpp in Sources */,
+ A9C2F18522E7833D001763CE /* simple_conditional_branch_to_branch_reduction_opportunity.cpp in Sources */,
+ A9C2F44122E7833D001763CE /* validate_non_uniform.cpp in Sources */,
+ A9C2F2B322E7833D001763CE /* strip_reflect_info_pass.cpp in Sources */,
+ A9C2F2A922E7833D001763CE /* loop_unroller.cpp in Sources */,
+ A9C2F47122E7833D001763CE /* validate_arithmetics.cpp in Sources */,
+ A9C2F26722E7833D001763CE /* cfg_cleanup_pass.cpp in Sources */,
+ A9C2F44B22E7833D001763CE /* validate_decorations.cpp in Sources */,
+ A9C2F3A322E7833D001763CE /* loop_peeling.cpp in Sources */,
+ A9C2F21B22E7833D001763CE /* register_pressure.cpp in Sources */,
+ A9C2F1A322E7833D001763CE /* remove_instruction_reduction_opportunity.cpp in Sources */,
+ A9C2F27122E7833D001763CE /* loop_dependence.cpp in Sources */,
+ A9C2F36322E7833D001763CE /* dominator_analysis.cpp in Sources */,
+ A9C2F26122E7833D001763CE /* merge_return_pass.cpp in Sources */,
+ A9C2F28F22E7833D001763CE /* generate_webgpu_initializers_pass.cpp in Sources */,
+ A9C2F47522E7833D001763CE /* validate_memory_semantics.cpp in Sources */,
+ A9C2F1AD22E7833D001763CE /* reducer.cpp in Sources */,
+ A9C2F46722E7833D001763CE /* validate_small_type_uses.cpp in Sources */,
+ A9C2F2C722E7833D001763CE /* dead_branch_elim_pass.cpp in Sources */,
+ A9C2F2C522E7833D001763CE /* simplification_pass.cpp in Sources */,
+ A9C2F38F22E7833D001763CE /* loop_fusion.cpp in Sources */,
+ A9C2F29322E7833D001763CE /* inline_pass.cpp in Sources */,
+ A9C2F28722E7833D001763CE /* fold_spec_constant_op_and_composite_pass.cpp in Sources */,
+ A9C2F2F522E7833D001763CE /* strength_reduction_pass.cpp in Sources */,
+ A9C2F2A122E7833D001763CE /* split_invalid_unreachable_pass.cpp in Sources */,
+ A9C2F35B22E7833D001763CE /* inline_opaque_pass.cpp in Sources */,
+ A9C2F14122E7833D001763CE /* text.cpp in Sources */,
+ A9C2F48322E7833D001763CE /* validate_type.cpp in Sources */,
+ A9C2F42F22E7833D001763CE /* disassemble.cpp in Sources */,
+ A9C2F2C922E7833D001763CE /* flatten_decoration_pass.cpp in Sources */,
+ A9C2F21322E7833D001763CE /* ext_inst.cpp in Sources */,
+ A9C2F14922E7833D001763CE /* pch_source.cpp in Sources */,
+ A9C2F2ED22E7833D001763CE /* if_conversion.cpp in Sources */,
+ A9C2F24122E7833D001763CE /* cfg.cpp in Sources */,
+ A9C2F31722E7833D001763CE /* block_merge_pass.cpp in Sources */,
+ A9C2F45D22E7833D001763CE /* construct.cpp in Sources */,
+ A9C2F2DD22E7833D001763CE /* function.cpp in Sources */,
+ A9C2F33722E7833D001763CE /* fold.cpp in Sources */,
+ A9C2F26F22E7833D001763CE /* ssa_rewrite_pass.cpp in Sources */,
+ A9C2F2D722E7833D001763CE /* loop_descriptor.cpp in Sources */,
+ A9C2F18722E7833D001763CE /* remove_function_reduction_opportunity.cpp in Sources */,
+ A9C2F18D22E7833D001763CE /* remove_selection_reduction_opportunity_finder.cpp in Sources */,
+ A9C2F49322E7833D001763CE /* validation_state.cpp in Sources */,
+ A9C2F2AB22E7833D001763CE /* constants.cpp in Sources */,
+ A9C2F35722E7833D001763CE /* value_number_table.cpp in Sources */,
+ A9C2F18F22E7833D001763CE /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp in Sources */,
+ A9C2F39122E7833D001763CE /* upgrade_memory_model.cpp in Sources */,
+ A9C2F1B722E7833D001763CE /* merge_blocks_reduction_opportunity_finder.cpp in Sources */,
+ A9C2F16922E7833D001763CE /* table.cpp in Sources */,
+ A9C2F20F22E7833D001763CE /* opcode.cpp in Sources */,
+ A9C2F29722E7833D001763CE /* ir_loader.cpp in Sources */,
+ A9C2F43922E7833D001763CE /* validate_cfg.cpp in Sources */,
+ A9C2F3A122E7833D001763CE /* compact_ids_pass.cpp in Sources */,
+ A9C2F2F722E7833D001763CE /* block_merge_util.cpp in Sources */,
+ A9C2F24922E7833D001763CE /* freeze_spec_constant_value_pass.cpp in Sources */,
+ A9C2F33322E7833D001763CE /* set_spec_constant_default_value_pass.cpp in Sources */,
+ A9C2F21722E7833D001763CE /* optimizer.cpp in Sources */,
+ A9C2F37F22E7833D001763CE /* local_access_chain_convert_pass.cpp in Sources */,
+ A9C2F32D22E7833D001763CE /* propagator.cpp in Sources */,
+ A9C2F48922E7833D001763CE /* validate_layout.cpp in Sources */,
+ A9C2F47B22E7833D001763CE /* validate_memory.cpp in Sources */,
+ A9C2F48B22E7833D001763CE /* basic_block.cpp in Sources */,
+ A9C2F1E322E7833D001763CE /* spirv_fuzzer_options.cpp in Sources */,
+ A9C2F47D22E7833D001763CE /* validate_image.cpp in Sources */,
+ A9C2F45122E7833D001763CE /* validate_interfaces.cpp in Sources */,
+ A9C2F48722E7833D001763CE /* validate_execution_limitations.cpp in Sources */,
+ A9C2F23922E7833D001763CE /* code_sink.cpp in Sources */,
+ A9C2F1AB22E7833D001763CE /* pch_source_reduce.cpp in Sources */,
+ A9C2F24522E7833D001763CE /* decoration_manager.cpp in Sources */,
+ A9C2F31322E7833D001763CE /* scalar_analysis.cpp in Sources */,
+ A9C2F1BD22E7833D001763CE /* change_operand_to_undef_reduction_opportunity.cpp in Sources */,
+ A9C2F33B22E7833D001763CE /* scalar_replacement_pass.cpp in Sources */,
+ A9C2F17F22E7833D001763CE /* remove_function_reduction_opportunity_finder.cpp in Sources */,
+ A9C2F13922E7833D001763CE /* spirv_target_env.cpp in Sources */,
+ A9C2F16D22E7833D001763CE /* remove_selection_reduction_opportunity.cpp in Sources */,
+ A9C2F1B922E7833D001763CE /* reduction_opportunity.cpp in Sources */,
+ A9C2F26D22E7833D001763CE /* strip_debug_info_pass.cpp in Sources */,
+ A9C2F2FB22E7833D001763CE /* copy_prop_arrays.cpp in Sources */,
+ A9C2F47322E7833D001763CE /* validate_mode_setting.cpp in Sources */,
+ A9C2F46D22E7833D001763CE /* validate_id.cpp in Sources */,
+ A9C2F39722E7833D001763CE /* scalar_analysis_simplification.cpp in Sources */,
+ A9C2F45322E7833D001763CE /* validate.cpp in Sources */,
+ A9C2F43522E7833D001763CE /* validate_annotation.cpp in Sources */,
+ A9C2F2A522E7833D001763CE /* vector_dce.cpp in Sources */,
+ A9C2F20122E7833D001763CE /* spirv_reducer_options.cpp in Sources */,
+ A9C2F20D22E7833D001763CE /* software_version.cpp in Sources */,
+ A9C2F15922E7833D001763CE /* string_utils.cpp in Sources */,
+ A9C2F25F22E7833D001763CE /* dominator_tree.cpp in Sources */,
+ A9C2F43F22E7833D001763CE /* validate_barriers.cpp in Sources */,
+ A9C2F37722E7833D001763CE /* struct_cfg_analysis.cpp in Sources */,
+ A9C2F24722E7833D001763CE /* local_single_block_elim_pass.cpp in Sources */,
+ A9C2F16122E7833D001763CE /* parse_number.cpp in Sources */,
+ A9C2F1AF22E7833D001763CE /* operand_to_undef_reduction_opportunity_finder.cpp in Sources */,
+ A9C2F20922E7833D001763CE /* name_mapper.cpp in Sources */,
+ A9C2F2DF22E7833D001763CE /* instruction_list.cpp in Sources */,
+ A9C2F44D22E7833D001763CE /* validate_debug.cpp in Sources */,
+ A9C2F35122E7833D001763CE /* reduce_load_size.cpp in Sources */,
+ A9C2F17922E7833D001763CE /* reduction_util.cpp in Sources */,
+ A9C2F41D22E7833D001763CE /* diagnostic.cpp in Sources */,
+ A9C2F2C122E7833D001763CE /* aggressive_dead_code_elim_pass.cpp in Sources */,
+ A9C2F1D522E7833D001763CE /* remove_block_reduction_opportunity.cpp in Sources */,
+ A9C2F28122E7833D001763CE /* dead_variable_elimination.cpp in Sources */,
+ A9C2F23B22E7833D001763CE /* types.cpp in Sources */,
+ A9C2F27B22E7833D001763CE /* mem_pass.cpp in Sources */,
+ A9C2F14322E7833D001763CE /* assembly_grammar.cpp in Sources */,
+ A9C2F47922E7833D001763CE /* validate_derivatives.cpp in Sources */,
+ A9C2F21D22E7833D001763CE /* loop_utils.cpp in Sources */,
+ A9C2F44922E7833D001763CE /* validate_instruction.cpp in Sources */,
+ A9C2F25D22E7833D001763CE /* loop_fission.cpp in Sources */,
+ A9C2F44322E7833D001763CE /* validate_scopes.cpp in Sources */,
+ A9C2F49122E7833D001763CE /* validate_composites.cpp in Sources */,
+ A9C2F45F22E7833D001763CE /* function.cpp in Sources */,
+ A9C2F1D122E7833D001763CE /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp in Sources */,
+ A9C2F19522E7833D001763CE /* change_operand_reduction_opportunity.cpp in Sources */,
+ A9C2F48122E7833D001763CE /* instruction.cpp in Sources */,
+ A9C2F35D22E7833D001763CE /* replace_invalid_opc.cpp in Sources */,
+ A9C2F22522E7833D001763CE /* combine_access_chains.cpp in Sources */,
+ A9C2F18B22E7833D001763CE /* simple_conditional_branch_to_branch_opportunity_finder.cpp in Sources */,
+ A9C2F20322E7833D001763CE /* parsed_operand.cpp in Sources */,
+ A9C2F29D22E7833D001763CE /* eliminate_dead_functions_pass.cpp in Sources */,
+ A9C2F2FD22E7833D001763CE /* pass_manager.cpp in Sources */,
+ A9C2F26922E7833D001763CE /* const_folding_rules.cpp in Sources */,
+ A9C2F42922E7833D001763CE /* operand.cpp in Sources */,
+ A9C2F19D22E7833D001763CE /* remove_unreferenced_instruction_reduction_opportunity_finder.cpp in Sources */,
+ A9C2F36522E7833D001763CE /* decompose_initialized_variables_pass.cpp in Sources */,
+ A9C2F34522E7833D001763CE /* workaround1209.cpp in Sources */,
+ A9C2F16322E7833D001763CE /* bit_vector.cpp in Sources */,
+ A9C2F20B22E7833D001763CE /* linker.cpp in Sources */,
+ A9C2F14722E7833D001763CE /* extensions.cpp in Sources */,
+ A9C2F46922E7833D001763CE /* validate_datarules.cpp in Sources */,
+ A9C2F43722E7833D001763CE /* validate_misc.cpp in Sources */,
+ A9C2F2FF22E7833D001763CE /* inline_exhaustive_pass.cpp in Sources */,
+ A9C2F26522E7833D001763CE /* eliminate_dead_constant_pass.cpp in Sources */,
+ A9C2F17B22E7833D001763CE /* structured_loop_to_selection_reduction_opportunity_finder.cpp in Sources */,
+ A9C2F19322E7833D001763CE /* merge_blocks_reduction_opportunity.cpp in Sources */,
+ A9C2F2E322E7833D001763CE /* process_lines_pass.cpp in Sources */,
+ A9C2F24F22E7833D001763CE /* inst_bindless_check_pass.cpp in Sources */,
+ A9C2F1E922E7833D001763CE /* print.cpp in Sources */,
+ A9C2F1E722E7833D001763CE /* spirv_validator_options.cpp in Sources */,
+ A9C2F44522E7833D001763CE /* validate_atomics.cpp in Sources */,
+ A9C2F17322E7833D001763CE /* reduction_pass.cpp in Sources */,
+ A9C2F46522E7833D001763CE /* validate_conversion.cpp in Sources */,
+ A9C2F22722E7833D001763CE /* build_module.cpp in Sources */,
+ A9C2F39D22E7833D001763CE /* legalize_vector_shuffle_pass.cpp in Sources */,
+ A9C2F25122E7833D001763CE /* local_redundancy_elimination.cpp in Sources */,
+ A9C2F15522E7833D001763CE /* timer.cpp in Sources */,
+ A9C2F2F322E7833D001763CE /* eliminate_dead_members_pass.cpp in Sources */,
+ A9C2F45922E7833D001763CE /* validate_bitwise.cpp in Sources */,
+ A9C2F2D922E7833D001763CE /* local_ssa_elim_pass.cpp in Sources */,
+ A9C2F2E122E7833D001763CE /* composite.cpp in Sources */,
+ A9C2F42122E7833D001763CE /* libspirv.cpp in Sources */,
+ A9C2F1DB22E7833D001763CE /* spirv_optimizer_options.cpp in Sources */,
+ A9C2F25922E7833D001763CE /* feature_manager.cpp in Sources */,
+ A9C2F1D322E7833D001763CE /* structured_loop_to_selection_reduction_opportunity.cpp in Sources */,
+ A9C2F28D22E7833D001763CE /* type_manager.cpp in Sources */,
+ A9C2F2B722E7833D001763CE /* ccp_pass.cpp in Sources */,
+ A9C2F46322E7833D001763CE /* validate_adjacency.cpp in Sources */,
+ A9C2F1A922E7833D001763CE /* remove_opname_instruction_reduction_opportunity_finder.cpp in Sources */,
+ A9C2F25322E7833D001763CE /* instrument_pass.cpp in Sources */,
+ A9C2F43B22E7833D001763CE /* validate_capability.cpp in Sources */,
+ A9C2F47F22E7833D001763CE /* validate_literals.cpp in Sources */,
+ A9C2F34122E7833D001763CE /* redundancy_elimination.cpp in Sources */,
+ A9C2F45722E7833D001763CE /* validate_constants.cpp in Sources */,
+ A9C2F34D22E7833D001763CE /* instruction.cpp in Sources */,
+ A9C2F28922E7833D001763CE /* loop_unswitch_pass.cpp in Sources */,
+ A9C2F1F522E7833D001763CE /* binary.cpp in Sources */,
+ A9C2F29B22E7833D001763CE /* licm_pass.cpp in Sources */,
+ A9C2F17522E7833D001763CE /* operand_to_const_reduction_opportunity_finder.cpp in Sources */,
+ A9C2F27F22E7833D001763CE /* remove_duplicates_pass.cpp in Sources */,
+ A9C2F48D22E7833D001763CE /* validate_function.cpp in Sources */,
+ A9C2F24322E7833D001763CE /* strip_atomic_counter_memory_pass.cpp in Sources */,
+ A9C2F49522E7833D001763CE /* validate_primitives.cpp in Sources */,
+ A9C2F43322E7833D001763CE /* text_handler.cpp in Sources */,
+ A9C2F25B22E7833D001763CE /* pass.cpp in Sources */,
+ A9C2F32522E7833D001763CE /* local_single_store_elim_pass.cpp in Sources */,
+ A9C2F45B22E7833D001763CE /* validate_extensions.cpp in Sources */,
+ A9C2F47722E7833D001763CE /* validate_logicals.cpp in Sources */,
+ A9C2F35522E7833D001763CE /* fix_storage_class.cpp in Sources */,
+ A9C2F32922E7833D001763CE /* private_to_local_pass.cpp in Sources */,
+ A9C2F28B22E7833D001763CE /* unify_const_pass.cpp in Sources */,
+ A9C2F38122E7833D001763CE /* basic_block.cpp in Sources */,
+ A9C2F1CB22E7833D001763CE /* remove_block_reduction_opportunity_finder.cpp in Sources */,
+ A9C2F2C322E7833D001763CE /* eliminate_dead_functions_util.cpp in Sources */,
+ A9C2F1F922E7833D001763CE /* enum_string_mapping.cpp in Sources */,
+ A9C2F1EF22E7833D001763CE /* spirv_endian.cpp in Sources */,
+ A9C2F2D122E7833D001763CE /* ir_context.cpp in Sources */,
+ A9C2F2B122E7833D001763CE /* def_use_manager.cpp in Sources */,
+ A9C2F2CD22E7833D001763CE /* folding_rules.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -3188,200 +3182,200 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- A94A6A3B22B17BBC00C661C6 /* module.cpp in Sources */,
- A94A6B5722B17BBC00C661C6 /* legalize_vector_shuffle_pass.cpp in Sources */,
- A94A6AAB22B17BBC00C661C6 /* eliminate_dead_members_pass.cpp in Sources */,
- A94A6B1522B17BBC00C661C6 /* inline_opaque_pass.cpp in Sources */,
- A94A697922B17BBB00C661C6 /* operand_to_dominating_id_reduction_opportunity_finder.cpp in Sources */,
- A94A693B22B17BBB00C661C6 /* simple_conditional_branch_to_branch_reduction_opportunity.cpp in Sources */,
- A94A6AA522B17BBC00C661C6 /* if_conversion.cpp in Sources */,
- A94A6A5F22B17BBC00C661C6 /* loop_unroller.cpp in Sources */,
- A94A6A1D22B17BBC00C661C6 /* cfg_cleanup_pass.cpp in Sources */,
- A94A6C0B22B17BBD00C661C6 /* validate_logicals.cpp in Sources */,
- A94A69D122B17BBC00C661C6 /* register_pressure.cpp in Sources */,
- A94A695922B17BBB00C661C6 /* remove_instruction_reduction_opportunity.cpp in Sources */,
- A94A6A2722B17BBC00C661C6 /* loop_dependence.cpp in Sources */,
- A94A6B0F22B17BBC00C661C6 /* fix_storage_class.cpp in Sources */,
- A94A6A8F22B17BBC00C661C6 /* loop_descriptor.cpp in Sources */,
- A94A6C1F22B17BBD00C661C6 /* basic_block.cpp in Sources */,
- A94A6A1722B17BBC00C661C6 /* merge_return_pass.cpp in Sources */,
- A94A6AB322B17BBC00C661C6 /* copy_prop_arrays.cpp in Sources */,
- A94A6C1522B17BBD00C661C6 /* instruction.cpp in Sources */,
- A94A6A4522B17BBC00C661C6 /* generate_webgpu_initializers_pass.cpp in Sources */,
- A94A6AED22B17BBC00C661C6 /* set_spec_constant_default_value_pass.cpp in Sources */,
- A94A696322B17BBB00C661C6 /* reducer.cpp in Sources */,
- A94A6BFD22B17BBD00C661C6 /* validate_datarules.cpp in Sources */,
- A94A6BD122B17BBC00C661C6 /* validate_capability.cpp in Sources */,
- A94A6A4922B17BBC00C661C6 /* inline_pass.cpp in Sources */,
- A94A6AAD22B17BBC00C661C6 /* strength_reduction_pass.cpp in Sources */,
- A94A6B1122B17BBC00C661C6 /* value_number_table.cpp in Sources */,
- A94A6C1122B17BBD00C661C6 /* validate_image.cpp in Sources */,
- A94A6B0722B17BBC00C661C6 /* instruction.cpp in Sources */,
- A94A6BC522B17BBC00C661C6 /* disassemble.cpp in Sources */,
- A94A6A3D22B17BBC00C661C6 /* fold_spec_constant_op_and_composite_pass.cpp in Sources */,
- A94A6A5722B17BBC00C661C6 /* split_invalid_unreachable_pass.cpp in Sources */,
- A94A68F722B17BBB00C661C6 /* text.cpp in Sources */,
- A94A69C922B17BBC00C661C6 /* ext_inst.cpp in Sources */,
- A94A6C2922B17BBD00C661C6 /* validate_primitives.cpp in Sources */,
- A94A68FF22B17BBB00C661C6 /* pch_source.cpp in Sources */,
- A94A69F722B17BBC00C661C6 /* cfg.cpp in Sources */,
- A94A6A8522B17BBC00C661C6 /* folding_rules.cpp in Sources */,
- A94A6AE322B17BBC00C661C6 /* private_to_local_pass.cpp in Sources */,
- A94A6A2522B17BBC00C661C6 /* ssa_rewrite_pass.cpp in Sources */,
- A94A6B1722B17BBC00C661C6 /* replace_invalid_opc.cpp in Sources */,
- A94A693D22B17BBB00C661C6 /* remove_function_reduction_opportunity.cpp in Sources */,
- A94A694322B17BBB00C661C6 /* remove_selection_reduction_opportunity_finder.cpp in Sources */,
- A94A6B0B22B17BBC00C661C6 /* reduce_load_size.cpp in Sources */,
- A94A6A6122B17BBC00C661C6 /* constants.cpp in Sources */,
- A94A694522B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp in Sources */,
- A94A6A8122B17BBC00C661C6 /* flatten_decoration_pass.cpp in Sources */,
- A94A6A9922B17BBC00C661C6 /* composite.cpp in Sources */,
- A94A696D22B17BBB00C661C6 /* merge_blocks_reduction_opportunity_finder.cpp in Sources */,
- A94A6AB722B17BBC00C661C6 /* inline_exhaustive_pass.cpp in Sources */,
- A94A6C2522B17BBD00C661C6 /* validate_composites.cpp in Sources */,
- A94A691F22B17BBB00C661C6 /* table.cpp in Sources */,
- A94A6BE522B17BBC00C661C6 /* validate_builtins.cpp in Sources */,
- A94A6A6922B17BBC00C661C6 /* def_use_manager.cpp in Sources */,
- A94A6AB522B17BBC00C661C6 /* pass_manager.cpp in Sources */,
- A94A69C522B17BBC00C661C6 /* opcode.cpp in Sources */,
- A94A6A4D22B17BBC00C661C6 /* ir_loader.cpp in Sources */,
- A94A69FF22B17BBC00C661C6 /* freeze_spec_constant_value_pass.cpp in Sources */,
- A94A69CD22B17BBC00C661C6 /* optimizer.cpp in Sources */,
- A94A6BCF22B17BBC00C661C6 /* validate_cfg.cpp in Sources */,
- A94A699922B17BBB00C661C6 /* spirv_fuzzer_options.cpp in Sources */,
- A94A69EF22B17BBC00C661C6 /* code_sink.cpp in Sources */,
- A94A696122B17BBB00C661C6 /* pch_source_reduce.cpp in Sources */,
- A94A6BC922B17BBC00C661C6 /* text_handler.cpp in Sources */,
- A94A69FB22B17BBC00C661C6 /* decoration_manager.cpp in Sources */,
- A94A6A9B22B17BBC00C661C6 /* process_lines_pass.cpp in Sources */,
- A94A697322B17BBB00C661C6 /* change_operand_to_undef_reduction_opportunity.cpp in Sources */,
- A94A693522B17BBB00C661C6 /* remove_function_reduction_opportunity_finder.cpp in Sources */,
- A94A68EF22B17BBB00C661C6 /* spirv_target_env.cpp in Sources */,
- A94A6BE122B17BBC00C661C6 /* validate_decorations.cpp in Sources */,
- A94A6C1B22B17BBD00C661C6 /* validate_execution_limitations.cpp in Sources */,
- A94A6BF922B17BBD00C661C6 /* validate_adjacency.cpp in Sources */,
- A94A692322B17BBB00C661C6 /* remove_selection_reduction_opportunity.cpp in Sources */,
- A94A696F22B17BBB00C661C6 /* reduction_opportunity.cpp in Sources */,
- A94A6A2322B17BBC00C661C6 /* strip_debug_info_pass.cpp in Sources */,
- A94A6AFB22B17BBC00C661C6 /* redundancy_elimination.cpp in Sources */,
- A94A6A5B22B17BBC00C661C6 /* vector_dce.cpp in Sources */,
- A94A69B722B17BBB00C661C6 /* spirv_reducer_options.cpp in Sources */,
- A94A6A6B22B17BBC00C661C6 /* strip_reflect_info_pass.cpp in Sources */,
- A94A6BD922B17BBC00C661C6 /* validate_scopes.cpp in Sources */,
- A94A6BB322B17BBC00C661C6 /* diagnostic.cpp in Sources */,
- A94A6ACF22B17BBC00C661C6 /* block_merge_pass.cpp in Sources */,
- A94A69C322B17BBC00C661C6 /* software_version.cpp in Sources */,
- A94A6C0122B17BBD00C661C6 /* validate_id.cpp in Sources */,
- A94A6BDB22B17BBC00C661C6 /* validate_atomics.cpp in Sources */,
- A94A690F22B17BBB00C661C6 /* string_utils.cpp in Sources */,
- A94A6A1522B17BBC00C661C6 /* dominator_tree.cpp in Sources */,
- A94A69FD22B17BBC00C661C6 /* local_single_block_elim_pass.cpp in Sources */,
- A94A6A6F22B17BBC00C661C6 /* ccp_pass.cpp in Sources */,
- A94A6AAF22B17BBC00C661C6 /* block_merge_util.cpp in Sources */,
- A94A6B3B22B17BBC00C661C6 /* basic_block.cpp in Sources */,
- A94A6BE322B17BBC00C661C6 /* validate_debug.cpp in Sources */,
- A94A691722B17BBB00C661C6 /* parse_number.cpp in Sources */,
- A94A6BFB22B17BBD00C661C6 /* validate_conversion.cpp in Sources */,
- A94A6C2722B17BBD00C661C6 /* validation_state.cpp in Sources */,
- A94A6B5122B17BBC00C661C6 /* scalar_analysis_simplification.cpp in Sources */,
- A94A6B1F22B17BBC00C661C6 /* decompose_initialized_variables_pass.cpp in Sources */,
- A94A6BEF22B17BBD00C661C6 /* validate_bitwise.cpp in Sources */,
- A94A696522B17BBB00C661C6 /* operand_to_undef_reduction_opportunity_finder.cpp in Sources */,
- A94A6BF322B17BBD00C661C6 /* construct.cpp in Sources */,
- A94A69BF22B17BBB00C661C6 /* name_mapper.cpp in Sources */,
- A94A692F22B17BBB00C661C6 /* reduction_util.cpp in Sources */,
- A94A698B22B17BBB00C661C6 /* remove_block_reduction_opportunity.cpp in Sources */,
- A94A6B3122B17BBC00C661C6 /* struct_cfg_analysis.cpp in Sources */,
- A94A6A3722B17BBC00C661C6 /* dead_variable_elimination.cpp in Sources */,
- A94A6BB722B17BBC00C661C6 /* libspirv.cpp in Sources */,
- A94A6A6722B17BBC00C661C6 /* common_uniform_elim_pass.cpp in Sources */,
- A94A6AFF22B17BBC00C661C6 /* workaround1209.cpp in Sources */,
- A94A6C0722B17BBD00C661C6 /* validate_mode_setting.cpp in Sources */,
- A94A6B3922B17BBC00C661C6 /* local_access_chain_convert_pass.cpp in Sources */,
- A94A69F122B17BBC00C661C6 /* types.cpp in Sources */,
- A94A6C1322B17BBD00C661C6 /* validate_literals.cpp in Sources */,
- A94A6A3122B17BBC00C661C6 /* mem_pass.cpp in Sources */,
- A94A68F922B17BBB00C661C6 /* assembly_grammar.cpp in Sources */,
- A94A6BF122B17BBD00C661C6 /* validate_extensions.cpp in Sources */,
- A94A6BED22B17BBD00C661C6 /* validate_constants.cpp in Sources */,
- A94A69D322B17BBC00C661C6 /* loop_utils.cpp in Sources */,
- A94A6A1322B17BBC00C661C6 /* loop_fission.cpp in Sources */,
- A94A698722B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp in Sources */,
- A94A694B22B17BBB00C661C6 /* change_operand_reduction_opportunity.cpp in Sources */,
- A94A69DB22B17BBC00C661C6 /* combine_access_chains.cpp in Sources */,
- A94A6A9722B17BBC00C661C6 /* instruction_list.cpp in Sources */,
- A94A6A7522B17BBC00C661C6 /* pch_source_opt.cpp in Sources */,
- A94A694122B17BBB00C661C6 /* simple_conditional_branch_to_branch_opportunity_finder.cpp in Sources */,
- A94A69B922B17BBB00C661C6 /* parsed_operand.cpp in Sources */,
- A94A6A5322B17BBC00C661C6 /* eliminate_dead_functions_pass.cpp in Sources */,
- A94A6A1F22B17BBC00C661C6 /* const_folding_rules.cpp in Sources */,
- A94A6BD722B17BBC00C661C6 /* validate_non_uniform.cpp in Sources */,
- A94A6AEB22B17BBC00C661C6 /* loop_dependence_helpers.cpp in Sources */,
- A94A6C0F22B17BBD00C661C6 /* validate_memory.cpp in Sources */,
- A94A6AF522B17BBC00C661C6 /* scalar_replacement_pass.cpp in Sources */,
- A94A695322B17BBB00C661C6 /* remove_unreferenced_instruction_reduction_opportunity_finder.cpp in Sources */,
- A94A691922B17BBB00C661C6 /* bit_vector.cpp in Sources */,
- A94A6ACB22B17BBC00C661C6 /* scalar_analysis.cpp in Sources */,
- A94A6C1D22B17BBD00C661C6 /* validate_layout.cpp in Sources */,
- A94A6AE722B17BBC00C661C6 /* propagator.cpp in Sources */,
- A94A6A9522B17BBC00C661C6 /* function.cpp in Sources */,
- A94A69C122B17BBB00C661C6 /* linker.cpp in Sources */,
- A94A6B1D22B17BBC00C661C6 /* dominator_analysis.cpp in Sources */,
- A94A6A7B22B17BBC00C661C6 /* eliminate_dead_functions_util.cpp in Sources */,
- A94A68FD22B17BBB00C661C6 /* extensions.cpp in Sources */,
- A94A6BE922B17BBC00C661C6 /* validate.cpp in Sources */,
- A94A6A1B22B17BBC00C661C6 /* eliminate_dead_constant_pass.cpp in Sources */,
- A94A693122B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity_finder.cpp in Sources */,
- A94A694922B17BBB00C661C6 /* merge_blocks_reduction_opportunity.cpp in Sources */,
- A94A6B4B22B17BBC00C661C6 /* upgrade_memory_model.cpp in Sources */,
- A94A6BCD22B17BBC00C661C6 /* validate_misc.cpp in Sources */,
- A94A6A0522B17BBC00C661C6 /* inst_bindless_check_pass.cpp in Sources */,
- A94A699F22B17BBB00C661C6 /* print.cpp in Sources */,
- A94A699D22B17BBB00C661C6 /* spirv_validator_options.cpp in Sources */,
- A94A692922B17BBB00C661C6 /* reduction_pass.cpp in Sources */,
- A94A69DD22B17BBC00C661C6 /* build_module.cpp in Sources */,
- A94A6AF122B17BBC00C661C6 /* fold.cpp in Sources */,
- A94A6A0722B17BBC00C661C6 /* local_redundancy_elimination.cpp in Sources */,
- A94A690B22B17BBB00C661C6 /* timer.cpp in Sources */,
- A94A6A7922B17BBC00C661C6 /* aggressive_dead_code_elim_pass.cpp in Sources */,
- A94A6BD522B17BBC00C661C6 /* validate_barriers.cpp in Sources */,
- A94A699122B17BBB00C661C6 /* spirv_optimizer_options.cpp in Sources */,
- A94A6A0F22B17BBC00C661C6 /* feature_manager.cpp in Sources */,
- A94A6C1722B17BBD00C661C6 /* validate_type.cpp in Sources */,
- A94A698922B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity.cpp in Sources */,
- A94A6B5B22B17BBC00C661C6 /* compact_ids_pass.cpp in Sources */,
- A94A6A4322B17BBC00C661C6 /* type_manager.cpp in Sources */,
- A94A695F22B17BBB00C661C6 /* remove_opname_instruction_reduction_opportunity_finder.cpp in Sources */,
- A94A6BDF22B17BBC00C661C6 /* validate_instruction.cpp in Sources */,
- A94A6A0922B17BBC00C661C6 /* instrument_pass.cpp in Sources */,
- A94A6B5D22B17BBC00C661C6 /* loop_peeling.cpp in Sources */,
- A94A6ABD22B17BBC00C661C6 /* loop_fusion_pass.cpp in Sources */,
- A94A6A3F22B17BBC00C661C6 /* loop_unswitch_pass.cpp in Sources */,
- A94A6C0522B17BBD00C661C6 /* validate_arithmetics.cpp in Sources */,
- A94A69AB22B17BBB00C661C6 /* binary.cpp in Sources */,
- A94A6AC722B17BBC00C661C6 /* dead_insert_elim_pass.cpp in Sources */,
- A94A6BF522B17BBD00C661C6 /* function.cpp in Sources */,
- A94A6ADF22B17BBC00C661C6 /* local_single_store_elim_pass.cpp in Sources */,
- A94A6BCB22B17BBC00C661C6 /* validate_annotation.cpp in Sources */,
- A94A6A5122B17BBC00C661C6 /* licm_pass.cpp in Sources */,
- A94A692B22B17BBB00C661C6 /* operand_to_const_reduction_opportunity_finder.cpp in Sources */,
- A94A6BE722B17BBC00C661C6 /* validate_interfaces.cpp in Sources */,
- A94A6A3522B17BBC00C661C6 /* remove_duplicates_pass.cpp in Sources */,
- A94A69F922B17BBC00C661C6 /* strip_atomic_counter_memory_pass.cpp in Sources */,
- A94A6C0D22B17BBD00C661C6 /* validate_derivatives.cpp in Sources */,
- A94A6A8922B17BBC00C661C6 /* ir_context.cpp in Sources */,
- A94A6A7F22B17BBC00C661C6 /* dead_branch_elim_pass.cpp in Sources */,
- A94A6A9122B17BBC00C661C6 /* local_ssa_elim_pass.cpp in Sources */,
- A94A6A1122B17BBC00C661C6 /* pass.cpp in Sources */,
- A94A6A4122B17BBC00C661C6 /* unify_const_pass.cpp in Sources */,
- A94A6BBF22B17BBC00C661C6 /* operand.cpp in Sources */,
- A94A6C2122B17BBD00C661C6 /* validate_function.cpp in Sources */,
- A94A698122B17BBB00C661C6 /* remove_block_reduction_opportunity_finder.cpp in Sources */,
- A94A6A7D22B17BBC00C661C6 /* simplification_pass.cpp in Sources */,
- A94A6B4922B17BBC00C661C6 /* loop_fusion.cpp in Sources */,
- A94A69AF22B17BBB00C661C6 /* enum_string_mapping.cpp in Sources */,
- A94A6C0922B17BBD00C661C6 /* validate_memory_semantics.cpp in Sources */,
- A94A69A522B17BBB00C661C6 /* spirv_endian.cpp in Sources */,
+ A9C2F31022E7833D001763CE /* dead_insert_elim_pass.cpp in Sources */,
+ A9C2F2BE22E7833D001763CE /* pch_source_opt.cpp in Sources */,
+ A9C2F28622E7833D001763CE /* module.cpp in Sources */,
+ A9C2F30622E7833D001763CE /* loop_fusion_pass.cpp in Sources */,
+ A9C2F33222E7833D001763CE /* loop_dependence_helpers.cpp in Sources */,
+ A9C2F45022E7833D001763CE /* validate_builtins.cpp in Sources */,
+ A9C2F1C422E7833D001763CE /* operand_to_dominating_id_reduction_opportunity_finder.cpp in Sources */,
+ A9C2F18622E7833D001763CE /* simple_conditional_branch_to_branch_reduction_opportunity.cpp in Sources */,
+ A9C2F44222E7833D001763CE /* validate_non_uniform.cpp in Sources */,
+ A9C2F2B422E7833D001763CE /* strip_reflect_info_pass.cpp in Sources */,
+ A9C2F2AA22E7833D001763CE /* loop_unroller.cpp in Sources */,
+ A9C2F47222E7833D001763CE /* validate_arithmetics.cpp in Sources */,
+ A9C2F26822E7833D001763CE /* cfg_cleanup_pass.cpp in Sources */,
+ A9C2F44C22E7833D001763CE /* validate_decorations.cpp in Sources */,
+ A9C2F3A422E7833D001763CE /* loop_peeling.cpp in Sources */,
+ A9C2F21C22E7833D001763CE /* register_pressure.cpp in Sources */,
+ A9C2F1A422E7833D001763CE /* remove_instruction_reduction_opportunity.cpp in Sources */,
+ A9C2F27222E7833D001763CE /* loop_dependence.cpp in Sources */,
+ A9C2F36422E7833D001763CE /* dominator_analysis.cpp in Sources */,
+ A9C2F26222E7833D001763CE /* merge_return_pass.cpp in Sources */,
+ A9C2F29022E7833D001763CE /* generate_webgpu_initializers_pass.cpp in Sources */,
+ A9C2F47622E7833D001763CE /* validate_memory_semantics.cpp in Sources */,
+ A9C2F1AE22E7833D001763CE /* reducer.cpp in Sources */,
+ A9C2F46822E7833D001763CE /* validate_small_type_uses.cpp in Sources */,
+ A9C2F2C822E7833D001763CE /* dead_branch_elim_pass.cpp in Sources */,
+ A9C2F2C622E7833D001763CE /* simplification_pass.cpp in Sources */,
+ A9C2F39022E7833D001763CE /* loop_fusion.cpp in Sources */,
+ A9C2F29422E7833D001763CE /* inline_pass.cpp in Sources */,
+ A9C2F28822E7833D001763CE /* fold_spec_constant_op_and_composite_pass.cpp in Sources */,
+ A9C2F2F622E7833D001763CE /* strength_reduction_pass.cpp in Sources */,
+ A9C2F2A222E7833D001763CE /* split_invalid_unreachable_pass.cpp in Sources */,
+ A9C2F35C22E7833D001763CE /* inline_opaque_pass.cpp in Sources */,
+ A9C2F14222E7833D001763CE /* text.cpp in Sources */,
+ A9C2F48422E7833D001763CE /* validate_type.cpp in Sources */,
+ A9C2F43022E7833D001763CE /* disassemble.cpp in Sources */,
+ A9C2F2CA22E7833D001763CE /* flatten_decoration_pass.cpp in Sources */,
+ A9C2F21422E7833D001763CE /* ext_inst.cpp in Sources */,
+ A9C2F14A22E7833D001763CE /* pch_source.cpp in Sources */,
+ A9C2F2EE22E7833D001763CE /* if_conversion.cpp in Sources */,
+ A9C2F24222E7833D001763CE /* cfg.cpp in Sources */,
+ A9C2F31822E7833D001763CE /* block_merge_pass.cpp in Sources */,
+ A9C2F45E22E7833D001763CE /* construct.cpp in Sources */,
+ A9C2F2DE22E7833D001763CE /* function.cpp in Sources */,
+ A9C2F33822E7833D001763CE /* fold.cpp in Sources */,
+ A9C2F27022E7833D001763CE /* ssa_rewrite_pass.cpp in Sources */,
+ A9C2F2D822E7833D001763CE /* loop_descriptor.cpp in Sources */,
+ A9C2F18822E7833D001763CE /* remove_function_reduction_opportunity.cpp in Sources */,
+ A9C2F18E22E7833D001763CE /* remove_selection_reduction_opportunity_finder.cpp in Sources */,
+ A9C2F49422E7833D001763CE /* validation_state.cpp in Sources */,
+ A9C2F2AC22E7833D001763CE /* constants.cpp in Sources */,
+ A9C2F35822E7833D001763CE /* value_number_table.cpp in Sources */,
+ A9C2F19022E7833D001763CE /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp in Sources */,
+ A9C2F39222E7833D001763CE /* upgrade_memory_model.cpp in Sources */,
+ A9C2F1B822E7833D001763CE /* merge_blocks_reduction_opportunity_finder.cpp in Sources */,
+ A9C2F16A22E7833D001763CE /* table.cpp in Sources */,
+ A9C2F21022E7833D001763CE /* opcode.cpp in Sources */,
+ A9C2F29822E7833D001763CE /* ir_loader.cpp in Sources */,
+ A9C2F43A22E7833D001763CE /* validate_cfg.cpp in Sources */,
+ A9C2F3A222E7833D001763CE /* compact_ids_pass.cpp in Sources */,
+ A9C2F2F822E7833D001763CE /* block_merge_util.cpp in Sources */,
+ A9C2F24A22E7833D001763CE /* freeze_spec_constant_value_pass.cpp in Sources */,
+ A9C2F33422E7833D001763CE /* set_spec_constant_default_value_pass.cpp in Sources */,
+ A9C2F21822E7833D001763CE /* optimizer.cpp in Sources */,
+ A9C2F38022E7833D001763CE /* local_access_chain_convert_pass.cpp in Sources */,
+ A9C2F32E22E7833D001763CE /* propagator.cpp in Sources */,
+ A9C2F48A22E7833D001763CE /* validate_layout.cpp in Sources */,
+ A9C2F47C22E7833D001763CE /* validate_memory.cpp in Sources */,
+ A9C2F48C22E7833D001763CE /* basic_block.cpp in Sources */,
+ A9C2F1E422E7833D001763CE /* spirv_fuzzer_options.cpp in Sources */,
+ A9C2F47E22E7833D001763CE /* validate_image.cpp in Sources */,
+ A9C2F45222E7833D001763CE /* validate_interfaces.cpp in Sources */,
+ A9C2F48822E7833D001763CE /* validate_execution_limitations.cpp in Sources */,
+ A9C2F23A22E7833D001763CE /* code_sink.cpp in Sources */,
+ A9C2F1AC22E7833D001763CE /* pch_source_reduce.cpp in Sources */,
+ A9C2F24622E7833D001763CE /* decoration_manager.cpp in Sources */,
+ A9C2F31422E7833D001763CE /* scalar_analysis.cpp in Sources */,
+ A9C2F1BE22E7833D001763CE /* change_operand_to_undef_reduction_opportunity.cpp in Sources */,
+ A9C2F33C22E7833D001763CE /* scalar_replacement_pass.cpp in Sources */,
+ A9C2F18022E7833D001763CE /* remove_function_reduction_opportunity_finder.cpp in Sources */,
+ A9C2F13A22E7833D001763CE /* spirv_target_env.cpp in Sources */,
+ A9C2F16E22E7833D001763CE /* remove_selection_reduction_opportunity.cpp in Sources */,
+ A9C2F1BA22E7833D001763CE /* reduction_opportunity.cpp in Sources */,
+ A9C2F26E22E7833D001763CE /* strip_debug_info_pass.cpp in Sources */,
+ A9C2F2FC22E7833D001763CE /* copy_prop_arrays.cpp in Sources */,
+ A9C2F47422E7833D001763CE /* validate_mode_setting.cpp in Sources */,
+ A9C2F46E22E7833D001763CE /* validate_id.cpp in Sources */,
+ A9C2F39822E7833D001763CE /* scalar_analysis_simplification.cpp in Sources */,
+ A9C2F45422E7833D001763CE /* validate.cpp in Sources */,
+ A9C2F43622E7833D001763CE /* validate_annotation.cpp in Sources */,
+ A9C2F2A622E7833D001763CE /* vector_dce.cpp in Sources */,
+ A9C2F20222E7833D001763CE /* spirv_reducer_options.cpp in Sources */,
+ A9C2F20E22E7833D001763CE /* software_version.cpp in Sources */,
+ A9C2F15A22E7833D001763CE /* string_utils.cpp in Sources */,
+ A9C2F26022E7833D001763CE /* dominator_tree.cpp in Sources */,
+ A9C2F44022E7833D001763CE /* validate_barriers.cpp in Sources */,
+ A9C2F37822E7833D001763CE /* struct_cfg_analysis.cpp in Sources */,
+ A9C2F24822E7833D001763CE /* local_single_block_elim_pass.cpp in Sources */,
+ A9C2F16222E7833D001763CE /* parse_number.cpp in Sources */,
+ A9C2F1B022E7833D001763CE /* operand_to_undef_reduction_opportunity_finder.cpp in Sources */,
+ A9C2F20A22E7833D001763CE /* name_mapper.cpp in Sources */,
+ A9C2F2E022E7833D001763CE /* instruction_list.cpp in Sources */,
+ A9C2F44E22E7833D001763CE /* validate_debug.cpp in Sources */,
+ A9C2F35222E7833D001763CE /* reduce_load_size.cpp in Sources */,
+ A9C2F17A22E7833D001763CE /* reduction_util.cpp in Sources */,
+ A9C2F41E22E7833D001763CE /* diagnostic.cpp in Sources */,
+ A9C2F2C222E7833D001763CE /* aggressive_dead_code_elim_pass.cpp in Sources */,
+ A9C2F1D622E7833D001763CE /* remove_block_reduction_opportunity.cpp in Sources */,
+ A9C2F28222E7833D001763CE /* dead_variable_elimination.cpp in Sources */,
+ A9C2F23C22E7833D001763CE /* types.cpp in Sources */,
+ A9C2F27C22E7833D001763CE /* mem_pass.cpp in Sources */,
+ A9C2F14422E7833D001763CE /* assembly_grammar.cpp in Sources */,
+ A9C2F47A22E7833D001763CE /* validate_derivatives.cpp in Sources */,
+ A9C2F21E22E7833D001763CE /* loop_utils.cpp in Sources */,
+ A9C2F44A22E7833D001763CE /* validate_instruction.cpp in Sources */,
+ A9C2F25E22E7833D001763CE /* loop_fission.cpp in Sources */,
+ A9C2F44422E7833D001763CE /* validate_scopes.cpp in Sources */,
+ A9C2F49222E7833D001763CE /* validate_composites.cpp in Sources */,
+ A9C2F46022E7833D001763CE /* function.cpp in Sources */,
+ A9C2F1D222E7833D001763CE /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp in Sources */,
+ A9C2F19622E7833D001763CE /* change_operand_reduction_opportunity.cpp in Sources */,
+ A9C2F48222E7833D001763CE /* instruction.cpp in Sources */,
+ A9C2F35E22E7833D001763CE /* replace_invalid_opc.cpp in Sources */,
+ A9C2F22622E7833D001763CE /* combine_access_chains.cpp in Sources */,
+ A9C2F18C22E7833D001763CE /* simple_conditional_branch_to_branch_opportunity_finder.cpp in Sources */,
+ A9C2F20422E7833D001763CE /* parsed_operand.cpp in Sources */,
+ A9C2F29E22E7833D001763CE /* eliminate_dead_functions_pass.cpp in Sources */,
+ A9C2F2FE22E7833D001763CE /* pass_manager.cpp in Sources */,
+ A9C2F26A22E7833D001763CE /* const_folding_rules.cpp in Sources */,
+ A9C2F42A22E7833D001763CE /* operand.cpp in Sources */,
+ A9C2F19E22E7833D001763CE /* remove_unreferenced_instruction_reduction_opportunity_finder.cpp in Sources */,
+ A9C2F36622E7833D001763CE /* decompose_initialized_variables_pass.cpp in Sources */,
+ A9C2F34622E7833D001763CE /* workaround1209.cpp in Sources */,
+ A9C2F16422E7833D001763CE /* bit_vector.cpp in Sources */,
+ A9C2F20C22E7833D001763CE /* linker.cpp in Sources */,
+ A9C2F14822E7833D001763CE /* extensions.cpp in Sources */,
+ A9C2F46A22E7833D001763CE /* validate_datarules.cpp in Sources */,
+ A9C2F43822E7833D001763CE /* validate_misc.cpp in Sources */,
+ A9C2F30022E7833D001763CE /* inline_exhaustive_pass.cpp in Sources */,
+ A9C2F26622E7833D001763CE /* eliminate_dead_constant_pass.cpp in Sources */,
+ A9C2F17C22E7833D001763CE /* structured_loop_to_selection_reduction_opportunity_finder.cpp in Sources */,
+ A9C2F19422E7833D001763CE /* merge_blocks_reduction_opportunity.cpp in Sources */,
+ A9C2F2E422E7833D001763CE /* process_lines_pass.cpp in Sources */,
+ A9C2F25022E7833D001763CE /* inst_bindless_check_pass.cpp in Sources */,
+ A9C2F1EA22E7833D001763CE /* print.cpp in Sources */,
+ A9C2F1E822E7833D001763CE /* spirv_validator_options.cpp in Sources */,
+ A9C2F44622E7833D001763CE /* validate_atomics.cpp in Sources */,
+ A9C2F17422E7833D001763CE /* reduction_pass.cpp in Sources */,
+ A9C2F46622E7833D001763CE /* validate_conversion.cpp in Sources */,
+ A9C2F22822E7833D001763CE /* build_module.cpp in Sources */,
+ A9C2F39E22E7833D001763CE /* legalize_vector_shuffle_pass.cpp in Sources */,
+ A9C2F25222E7833D001763CE /* local_redundancy_elimination.cpp in Sources */,
+ A9C2F15622E7833D001763CE /* timer.cpp in Sources */,
+ A9C2F2F422E7833D001763CE /* eliminate_dead_members_pass.cpp in Sources */,
+ A9C2F45A22E7833D001763CE /* validate_bitwise.cpp in Sources */,
+ A9C2F2DA22E7833D001763CE /* local_ssa_elim_pass.cpp in Sources */,
+ A9C2F2E222E7833D001763CE /* composite.cpp in Sources */,
+ A9C2F42222E7833D001763CE /* libspirv.cpp in Sources */,
+ A9C2F1DC22E7833D001763CE /* spirv_optimizer_options.cpp in Sources */,
+ A9C2F25A22E7833D001763CE /* feature_manager.cpp in Sources */,
+ A9C2F1D422E7833D001763CE /* structured_loop_to_selection_reduction_opportunity.cpp in Sources */,
+ A9C2F28E22E7833D001763CE /* type_manager.cpp in Sources */,
+ A9C2F2B822E7833D001763CE /* ccp_pass.cpp in Sources */,
+ A9C2F46422E7833D001763CE /* validate_adjacency.cpp in Sources */,
+ A9C2F1AA22E7833D001763CE /* remove_opname_instruction_reduction_opportunity_finder.cpp in Sources */,
+ A9C2F25422E7833D001763CE /* instrument_pass.cpp in Sources */,
+ A9C2F43C22E7833D001763CE /* validate_capability.cpp in Sources */,
+ A9C2F48022E7833D001763CE /* validate_literals.cpp in Sources */,
+ A9C2F34222E7833D001763CE /* redundancy_elimination.cpp in Sources */,
+ A9C2F45822E7833D001763CE /* validate_constants.cpp in Sources */,
+ A9C2F34E22E7833D001763CE /* instruction.cpp in Sources */,
+ A9C2F28A22E7833D001763CE /* loop_unswitch_pass.cpp in Sources */,
+ A9C2F1F622E7833D001763CE /* binary.cpp in Sources */,
+ A9C2F29C22E7833D001763CE /* licm_pass.cpp in Sources */,
+ A9C2F17622E7833D001763CE /* operand_to_const_reduction_opportunity_finder.cpp in Sources */,
+ A9C2F28022E7833D001763CE /* remove_duplicates_pass.cpp in Sources */,
+ A9C2F48E22E7833D001763CE /* validate_function.cpp in Sources */,
+ A9C2F24422E7833D001763CE /* strip_atomic_counter_memory_pass.cpp in Sources */,
+ A9C2F49622E7833D001763CE /* validate_primitives.cpp in Sources */,
+ A9C2F43422E7833D001763CE /* text_handler.cpp in Sources */,
+ A9C2F25C22E7833D001763CE /* pass.cpp in Sources */,
+ A9C2F32622E7833D001763CE /* local_single_store_elim_pass.cpp in Sources */,
+ A9C2F45C22E7833D001763CE /* validate_extensions.cpp in Sources */,
+ A9C2F47822E7833D001763CE /* validate_logicals.cpp in Sources */,
+ A9C2F35622E7833D001763CE /* fix_storage_class.cpp in Sources */,
+ A9C2F32A22E7833D001763CE /* private_to_local_pass.cpp in Sources */,
+ A9C2F28C22E7833D001763CE /* unify_const_pass.cpp in Sources */,
+ A9C2F38222E7833D001763CE /* basic_block.cpp in Sources */,
+ A9C2F1CC22E7833D001763CE /* remove_block_reduction_opportunity_finder.cpp in Sources */,
+ A9C2F2C422E7833D001763CE /* eliminate_dead_functions_util.cpp in Sources */,
+ A9C2F1FA22E7833D001763CE /* enum_string_mapping.cpp in Sources */,
+ A9C2F1F022E7833D001763CE /* spirv_endian.cpp in Sources */,
+ A9C2F2D222E7833D001763CE /* ir_context.cpp in Sources */,
+ A9C2F2B222E7833D001763CE /* def_use_manager.cpp in Sources */,
+ A9C2F2CE22E7833D001763CE /* folding_rules.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
diff --git a/ExternalRevisions/README.md b/ExternalRevisions/README.md
index bc19d88..c9c70c2 100644
--- a/ExternalRevisions/README.md
+++ b/ExternalRevisions/README.md
@@ -182,12 +182,11 @@
1. In the *Project Navigator*, remove the *Group* named `source` from under the *Group* named
`External/SPIRV-Tools`.
-2. Drag the `External/glslang/Extermal/spirv-tools/source` file folder to the `External/SPIRV-Tools`
+2. Drag the `External/glslang/External/spirv-tools/source` file folder to the `External/SPIRV-Tools`
group in the *Project Navigator* panel. In the _**Choose options for adding these files**_ dialog
that opens, select the _**Create groups**_ option, add the files to *both* the `SPIRV-Tools-macOS`
and `SPIRV-Tools-iOS` targets, and click the ***Finish*** button.
-
3. Remove the *Group* named `fuzz` from under the *Group* named `External/SPIRV-Tools/source`.
4. In the *Project Navigator* panel, select the `ExternalDependencies` *Xcode* project, then
diff --git a/ExternalRevisions/SPIRV-Cross_repo_revision b/ExternalRevisions/SPIRV-Cross_repo_revision
index 30297b1..337aa79 100644
--- a/ExternalRevisions/SPIRV-Cross_repo_revision
+++ b/ExternalRevisions/SPIRV-Cross_repo_revision
@@ -1 +1 @@
-4104e363005a079acc215f0920743a8affb31278
+07bb1a53e0cb86cfb9b116623493df974ad9ccee
diff --git a/ExternalRevisions/Vulkan-Headers_repo_revision b/ExternalRevisions/Vulkan-Headers_repo_revision
index 6dd277b..ddbb6f5 100644
--- a/ExternalRevisions/Vulkan-Headers_repo_revision
+++ b/ExternalRevisions/Vulkan-Headers_repo_revision
@@ -1 +1 @@
-097a1045098213919fd56442f52c716fc78eeb27
+e3f96a9ccab9397481eb81c4d9bce4ea7590dc33
diff --git a/ExternalRevisions/Vulkan-Tools_repo_revision b/ExternalRevisions/Vulkan-Tools_repo_revision
index 8d640f2..b6a15de 100644
--- a/ExternalRevisions/Vulkan-Tools_repo_revision
+++ b/ExternalRevisions/Vulkan-Tools_repo_revision
@@ -1 +1 @@
-d2de4ac0a28766c6fb10968fdcc4d75566eef8d7
+fb1fd1d63eb20cc6f922228f04d8b96cec452b46
diff --git a/ExternalRevisions/VulkanSamples_repo_revision b/ExternalRevisions/VulkanSamples_repo_revision
index bd4a2eb..1f3f4e1 100644
--- a/ExternalRevisions/VulkanSamples_repo_revision
+++ b/ExternalRevisions/VulkanSamples_repo_revision
@@ -1 +1 @@
-c6df494e270b5afad6bf5aaca725a037abe10501
+5a52ebd648b5baf94f2346819b5cf3fdc14b4127
diff --git a/ExternalRevisions/glslang_repo_revision b/ExternalRevisions/glslang_repo_revision
index d04e537..1c370c0 100644
--- a/ExternalRevisions/glslang_repo_revision
+++ b/ExternalRevisions/glslang_repo_revision
@@ -1 +1 @@
-21eebe74214488264bbf0d19323a03c13a9e53a7
+333d1c95792692205472c457d7bec915a94c8000
diff --git a/MoltenVK/MoltenVK/API/mvk_datatypes.h b/MoltenVK/MoltenVK/API/mvk_datatypes.h
index b2c59ba..a3e9792 100644
--- a/MoltenVK/MoltenVK/API/mvk_datatypes.h
+++ b/MoltenVK/MoltenVK/API/mvk_datatypes.h
@@ -464,8 +464,8 @@
/** Returns the Metal CPU cache mode corresponding to the specified Vulkan memory flags. */
MTLCPUCacheMode mvkMTLCPUCacheModeFromVkMemoryPropertyFlags(VkMemoryPropertyFlags vkFlags);
-/** Returns the Metal resource option flags corresponding to the specified Vulkan memory flags. */
-MTLResourceOptions mvkMTLResourceOptionsFromVkMemoryPropertyFlags(VkMemoryPropertyFlags vkFlags);
+/** Returns the Metal resource option flags corresponding to the Metal storage mode and cache mode. */
+MTLResourceOptions mvkMTLResourceOptions(MTLStorageMode mtlStorageMode, MTLCPUCacheMode mtlCPUCacheMode);
#ifdef __cplusplus
diff --git a/MoltenVK/MoltenVK/API/mvk_vulkan.h b/MoltenVK/MoltenVK/API/mvk_vulkan.h
index 1277064..aba9865 100644
--- a/MoltenVK/MoltenVK/API/mvk_vulkan.h
+++ b/MoltenVK/MoltenVK/API/mvk_vulkan.h
@@ -18,11 +18,13 @@
/**
- * This is a convenience header file that loads vulkan.h with the appropriate MoltenVK
- * Vulkan platform extensions automatically enabled for iOS or macOS.
+ * This is a convenience header file that loads vulkan.h with the appropriate Vulkan platform extensions.
*
- * When building for iOS, this header automatically enables the VK_MVK_ios_surface Vulkan extension.
- * When building for macOS, this header automatically enables the VK_MVK_macos_surface Vulkan extension.
+ * This header automatically enables the VK_EXT_metal_surface Vulkan extension.
+ *
+ * When building for iOS, this header also automatically enables the obsolete VK_MVK_ios_surface Vulkan extension.
+ * When building for macOS, this header also automatically enables the obsolete VK_MVK_macos_surface Vulkan extension.
+ * Both of these extensions are obsolete. Consider using the portable VK_EXT_metal_surface extension instead.
*/
#ifndef __mvk_vulkan_h_
@@ -31,6 +33,8 @@
#include <Availability.h>
+#define VK_USE_PLATFORM_METAL_EXT 1
+
#ifdef __IPHONE_OS_VERSION_MAX_ALLOWED
# define VK_USE_PLATFORM_IOS_MVK 1
#endif
diff --git a/MoltenVK/MoltenVK/API/vk_mvk_moltenvk.h b/MoltenVK/MoltenVK/API/vk_mvk_moltenvk.h
index 31452e2..f5d029d 100644
--- a/MoltenVK/MoltenVK/API/vk_mvk_moltenvk.h
+++ b/MoltenVK/MoltenVK/API/vk_mvk_moltenvk.h
@@ -55,7 +55,7 @@
#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)
-#define VK_MVK_MOLTENVK_SPEC_VERSION 20
+#define VK_MVK_MOLTENVK_SPEC_VERSION 21
#define VK_MVK_MOLTENVK_EXTENSION_NAME "VK_MVK_moltenvk"
/**
@@ -102,8 +102,14 @@
* 2: Log errors and informational messages.
* If neither is set, errors and informational messages are logged.
*
- * 2. Setting the MVK_CONFIG_TRACE_VULKAN_CALLS runtime environment variable or MoltenVK compile-time
- * build setting to 1 will cause MoltenVK to log the name of each Vulkan call made by the application.
+ * 2. Setting the MVK_CONFIG_TRACE_VULKAN_CALLS runtime environment variable or MoltenVK compile-time build
+ * setting will cause MoltenVK to log the name of each Vulkan call made by the application. The logging
+ * format options can be controlled by setting the value of MVK_CONFIG_TRACE_VULKAN_CALLS as follows:
+ * 0: No Vulkan call logging.
+ * 1: Log the name of each Vulkan call when the call is entered.
+ * 2: Log the name of each Vulkan call when the call is entered and exited. This effectively
+ * brackets any other logging activity within the scope of the Vulkan call.
+ * 3: Same as option 2, plus logs the time spent inside the Vulkan function.
*
* 3. Setting the MVK_CONFIG_FORCE_LOW_POWER_GPU runtime environment variable or MoltenVK compile-time
* build setting to 1 will force MoltenVK to use a low-power GPU, if one is availble on the device.
@@ -531,6 +537,9 @@
VkBool32 events; /**< If true, Metal synchronization events are supported. */
VkBool32 memoryBarriers; /**< If true, full memory barriers within Metal render passes are supported. */
VkBool32 multisampleLayeredRendering; /**< If true, layered rendering to multiple multi-sampled cube or texture array layers is supported. */
+ VkBool32 stencilFeedback; /**< If true, fragment shaders that write to [[stencil]] outputs are supported. */
+ VkBool32 textureBuffers; /**< If true, textures of type MTLTextureTypeBuffer are supported. */
+ VkBool32 postDepthCoverage; /**< If true, coverage masks in fragment shaders post-depth-test are supported. */
} MVKPhysicalDeviceMetalFeatures;
/**
@@ -584,7 +593,8 @@
/** MoltenVK performance of queue activities. */
typedef struct {
- MVKPerformanceTracker mtlQueueAccess; /** Create an MTLCommmandQueue or access an existing cached instance. */
+ MVKPerformanceTracker mtlQueueAccess; /** Create an MTLCommmandQueue or access an existing cached instance. */
+ MVKPerformanceTracker mtlCommandBufferCompletion; /** Completion of a MTLCommandBuffer on the GPU, from commit to completion callback. */
} MVKQueuePerformance;
/**
@@ -659,6 +669,12 @@
* that MoltenVK expects the size of MVKConfiguration to be by setting the value of pConfiguration
* to NULL. In that case, this function will set *pConfigurationSize to the size that MoltenVK
* expects MVKConfiguration to be.
+ *
+ * This function is not supported by the Vulkan SDK Loader and Layers framework.
+ * The VkInstance object you provide here must have been retrieved directly from MoltenVK,
+ * and not through the Vulkan SDK Loader and Layers framework. Opaque Vulkan objects
+ * are often changed by layers, and passing them from one layer to another, or from
+ * a layer directly to MoltenVK, will result in undefined behaviour.
*/
VKAPI_ATTR VkResult VKAPI_CALL vkGetMoltenVKConfigurationMVK(
VkInstance instance,
@@ -693,6 +709,12 @@
* that MoltenVK expects the size of MVKConfiguration to be by setting the value of pConfiguration
* to NULL. In that case, this function will set *pConfigurationSize to the size that MoltenVK
* expects MVKConfiguration to be.
+ *
+ * This function is not supported by the Vulkan SDK Loader and Layers framework.
+ * The VkInstance object you provide here must have been retrieved directly from MoltenVK,
+ * and not through the Vulkan SDK Loader and Layers framework. Opaque Vulkan objects
+ * are often changed by layers, and passing them from one layer to another, or from
+ * a layer directly to MoltenVK, will result in undefined behaviour.
*/
VKAPI_ATTR VkResult VKAPI_CALL vkSetMoltenVKConfigurationMVK(
VkInstance instance,
@@ -721,6 +743,12 @@
* expects the size of MVKPhysicalDeviceMetalFeatures to be by setting the value of pMetalFeatures to NULL.
* In that case, this function will set *pMetalFeaturesSize to the size that MoltenVK expects
* MVKPhysicalDeviceMetalFeatures to be.
+ *
+ * This function is not supported by the Vulkan SDK Loader and Layers framework.
+ * The VkPhysicalDevice object you provide here must have been retrieved directly from
+ * MoltenVK, and not through the Vulkan SDK Loader and Layers framework. Opaque Vulkan
+ * objects are often changed by layers, and passing them from one layer to another,
+ * or from a layer directly to MoltenVK, will result in undefined behaviour.
*/
VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceMetalFeaturesMVK(
VkPhysicalDevice physicalDevice,
@@ -748,6 +776,12 @@
* that MoltenVK expects the size of MVKSwapchainPerformance to be by setting the value of
* pSwapchainPerf to NULL. In that case, this function will set *pSwapchainPerfSize to the
* size that MoltenVK expects MVKSwapchainPerformance to be.
+ *
+ * This function is not supported by the Vulkan SDK Loader and Layers framework.
+ * The VkDevice and VkSwapchainKHR objects you provide here must have been retrieved directly
+ * from MoltenVK, and not through the Vulkan SDK Loader and Layers framework. Opaque Vulkan
+ * objects are often changed by layers, and passing them from one layer to another,
+ * or from a layer directly to MoltenVK, will result in undefined behaviour.
*/
VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainPerformanceMVK(
VkDevice device,
@@ -776,6 +810,12 @@
* that MoltenVK expects the size of MVKPerformanceStatistics to be by setting the value of
* pPerf to NULL. In that case, this function will set *pPerfSize to the size that MoltenVK
* expects MVKPerformanceStatistics to be.
+ *
+ * This function is not supported by the Vulkan SDK Loader and Layers framework.
+ * The VkDevice object you provide here must have been retrieved directly from
+ * MoltenVK, and not through the Vulkan SDK Loader and Layers framework. Opaque Vulkan
+ * objects are often changed by layers, and passing them from one layer to another,
+ * or from a layer directly to MoltenVK, will result in undefined behaviour.
*/
VKAPI_ATTR VkResult VKAPI_CALL vkGetPerformanceStatisticsMVK(
VkDevice device,
@@ -801,6 +841,12 @@
* This needs to be called if you are creating compute shader modules from MSL
* source code or MSL compiled code. Workgroup size is determined automatically
* if you're using SPIR-V.
+ *
+ * This function is not supported by the Vulkan SDK Loader and Layers framework.
+ * The VkShaderModule object you provide here must have been retrieved directly from
+ * MoltenVK, and not through the Vulkan SDK Loader and Layers framework. Opaque Vulkan
+ * objects are often changed by layers, and passing them from one layer to another,
+ * or from a layer directly to MoltenVK, will result in undefined behaviour.
*/
VKAPI_ATTR void VKAPI_CALL vkSetWorkgroupSizeMVK(
VkShaderModule shaderModule,
@@ -810,7 +856,15 @@
#ifdef __OBJC__
-/** Returns, in the pMTLDevice pointer, the MTLDevice used by the VkPhysicalDevice. */
+/**
+ * Returns, in the pMTLDevice pointer, the MTLDevice used by the VkPhysicalDevice.
+ *
+ * This function is not supported by the Vulkan SDK Loader and Layers framework.
+ * The VkPhysicalDevice object you provide here must have been retrieved directly from
+ * MoltenVK, and not through the Vulkan SDK Loader and Layers framework. Opaque Vulkan
+ * objects are often changed by layers, and passing them from one layer to another,
+ * or from a layer directly to MoltenVK, will result in undefined behaviour.
+ */
VKAPI_ATTR void VKAPI_CALL vkGetMTLDeviceMVK(
VkPhysicalDevice physicalDevice,
id<MTLDevice>* pMTLDevice);
@@ -824,12 +878,26 @@
* If a MTLTexture has already been created for this image, it will be destroyed.
*
* Returns VK_SUCCESS.
+ *
+ * This function is not supported by the Vulkan SDK Loader and Layers framework.
+ * The VkImage object you provide here must have been retrieved directly from
+ * MoltenVK, and not through the Vulkan SDK Loader and Layers framework. Opaque Vulkan
+ * objects are often changed by layers, and passing them from one layer to another,
+ * or from a layer directly to MoltenVK, will result in undefined behaviour.
*/
VKAPI_ATTR VkResult VKAPI_CALL vkSetMTLTextureMVK(
VkImage image,
id<MTLTexture> mtlTexture);
-/** Returns, in the pMTLTexture pointer, the MTLTexture currently underlaying the VkImage. */
+/**
+ * Returns, in the pMTLTexture pointer, the MTLTexture currently underlaying the VkImage.
+ *
+ * This function is not supported by the Vulkan SDK Loader and Layers framework.
+ * The VkImage object you provide here must have been retrieved directly from
+ * MoltenVK, and not through the Vulkan SDK Loader and Layers framework. Opaque Vulkan
+ * objects are often changed by layers, and passing them from one layer to another,
+ * or from a layer directly to MoltenVK, will result in undefined behaviour.
+ */
VKAPI_ATTR void VKAPI_CALL vkGetMTLTextureMVK(
VkImage image,
id<MTLTexture>* pMTLTexture);
@@ -857,6 +925,12 @@
* - VK_SUCCESS.
* - VK_ERROR_FEATURE_NOT_PRESENT if IOSurfaces are not supported on the platform.
* - VK_ERROR_INITIALIZATION_FAILED if ioSurface is specified and is not compatible with this VkImage.
+ *
+ * This function is not supported by the Vulkan SDK Loader and Layers framework.
+ * The VkImage object you provide here must have been retrieved directly from
+ * MoltenVK, and not through the Vulkan SDK Loader and Layers framework. Opaque Vulkan
+ * objects are often changed by layers, and passing them from one layer to another,
+ * or from a layer directly to MoltenVK, will result in undefined behaviour.
*/
VKAPI_ATTR VkResult VKAPI_CALL vkUseIOSurfaceMVK(
VkImage image,
@@ -866,6 +940,12 @@
* Returns, in the pIOSurface pointer, the IOSurface currently underlaying the VkImage,
* as set by the useIOSurfaceMVK() function, or returns null if the VkImage is not using
* an IOSurface, or if the platform does not support IOSurfaces.
+ *
+ * This function is not supported by the Vulkan SDK Loader and Layers framework.
+ * The VkImage object you provide here must have been retrieved directly from
+ * MoltenVK, and not through the Vulkan SDK Loader and Layers framework. Opaque Vulkan
+ * objects are often changed by layers, and passing them from one layer to another,
+ * or from a layer directly to MoltenVK, will result in undefined behaviour.
*/
VKAPI_ATTR void VKAPI_CALL vkGetIOSurfaceMVK(
VkImage image,
diff --git a/MoltenVK/MoltenVK/Commands/MVKCmdDebug.mm b/MoltenVK/MoltenVK/Commands/MVKCmdDebug.mm
index b7eda12..3e15659 100644
--- a/MoltenVK/MoltenVK/Commands/MVKCmdDebug.mm
+++ b/MoltenVK/MoltenVK/Commands/MVKCmdDebug.mm
@@ -27,7 +27,7 @@
void MVKCmdDebugMarker::setContent(const char* pMarkerName, const float color[4]) {
[_markerName release];
- _markerName = [@(pMarkerName) retain];
+ _markerName = [[NSString alloc] initWithUTF8String: pMarkerName]; // retained
}
MVKCmdDebugMarker::MVKCmdDebugMarker(MVKCommandTypePool<MVKCmdDebugMarker>* pool)
diff --git a/MoltenVK/MoltenVK/Commands/MVKCmdPipeline.mm b/MoltenVK/MoltenVK/Commands/MVKCmdPipeline.mm
index 5eff3e4..18fe127 100644
--- a/MoltenVK/MoltenVK/Commands/MVKCmdPipeline.mm
+++ b/MoltenVK/MoltenVK/Commands/MVKCmdPipeline.mm
@@ -197,7 +197,7 @@
_offset = offset;
_pushConstants.resize(size);
- std::copy_n((char*)pValues, size, _pushConstants.begin());
+ std::copy_n((char*)pValues, size, _pushConstants.begin());
}
void MVKCmdPushConstants::encode(MVKCommandEncoder* cmdEncoder) {
@@ -209,7 +209,7 @@
VK_SHADER_STAGE_COMPUTE_BIT
};
for (auto stage : stages) {
- if (mvkAreFlagsEnabled(_stageFlags, stage)) {
+ if (mvkAreAllFlagsEnabled(_stageFlags, stage)) {
cmdEncoder->getPushConstants(stage)->setPushConstants(_offset, _pushConstants);
}
}
diff --git a/MoltenVK/MoltenVK/Commands/MVKCmdTransfer.h b/MoltenVK/MoltenVK/Commands/MVKCmdTransfer.h
index 3e3b007..231924a 100644
--- a/MoltenVK/MoltenVK/Commands/MVKCmdTransfer.h
+++ b/MoltenVK/MoltenVK/Commands/MVKCmdTransfer.h
@@ -33,17 +33,6 @@
#pragma mark -
#pragma mark MVKCmdCopyImage
-/** Describes the Metal texture copying parameters. */
-typedef struct {
- uint32_t srcLevel;
- uint32_t srcSlice;
- MTLOrigin srcOrigin;
- MTLSize srcSize;
- uint32_t dstLevel;
- uint32_t dstSlice;
- MTLOrigin dstOrigin;
-} MVKMetalCopyTextureRegion;
-
/** Vulkan command to copy image regions. */
class MVKCmdCopyImage : public MVKCommand {
@@ -62,14 +51,28 @@
MVKCommand::MVKCommand((MVKCommandTypePool<MVKCommand>*)pool) {}
protected:
- void addMetalCopyRegions(const VkImageCopy* pRegion);
+ void setContent(VkImage srcImage, VkImageLayout srcImageLayout,
+ VkImage dstImage, VkImageLayout dstImageLayout, MVKCommandUse commandUse);
+ void addImageCopyRegion(const VkImageCopy& region);
+ void addTempBufferImageCopyRegion(const VkImageCopy& region);
MVKImage* _srcImage;
VkImageLayout _srcLayout;
MVKImage* _dstImage;
VkImageLayout _dstLayout;
- std::vector<MVKMetalCopyTextureRegion> _mtlTexCopyRegions;
- MVKCommandUse _commandUse = kMVKCommandUseNone;
+ MTLPixelFormat _srcMTLPixFmt;
+ MTLPixelFormat _dstMTLPixFmt;
+ uint32_t _srcSampleCount;
+ uint32_t _dstSampleCount;
+ bool _isSrcCompressed;
+ bool _isDstCompressed;
+ bool _canCopyFormats;
+ bool _useTempBuffer;
+ std::vector<VkImageCopy> _imageCopyRegions;
+ std::vector<VkBufferImageCopy> _srcTmpBuffImgCopies;
+ std::vector<VkBufferImageCopy> _dstTmpBuffImgCopies;
+ size_t _tmpBuffSize;
+ MVKCommandUse _commandUse;
};
@@ -79,14 +82,11 @@
/** Number of vertices in a BLIT rectangle. */
#define kMVKBlitVertexCount 4
-/** Describes Metal texture rendering parameters. */
+/** Combines a VkImageBlit with vertices to render it. */
typedef struct {
- uint32_t srcLevel;
- uint32_t srcSlice;
- uint32_t dstLevel;
- uint32_t dstSlice;
+ VkImageBlit region;
MVKVertexPosTex vertices[kMVKBlitVertexCount];
-} MVKMetalBlitTextureRender;
+} MVKImageBlitRender;
/** Vulkan command to BLIT image regions. */
class MVKCmdBlitImage : public MVKCmdCopyImage {
@@ -108,17 +108,16 @@
~MVKCmdBlitImage() override;
protected:
- bool canCopy(const VkImageBlit* pRegion);
- void addMetalCopyRegions(const VkImageBlit* pRegion);
- void addMetalBlitRenders(const VkImageBlit* pRegion);
- void populateVertices(MVKVertexPosTex* vertices, const VkImageBlit* pRegion);
+ bool canCopy(const VkImageBlit& region);
+ void addImageBlitRegion(const VkImageBlit& region);
+ void addImageCopyRegionFromBlitRegion(const VkImageBlit& region);
+ void populateVertices(MVKVertexPosTex* vertices, const VkImageBlit& region);
void initMTLRenderPassDescriptor();
MTLRenderPassDescriptor* _mtlRenderPassDescriptor;
MTLSamplerMinMagFilter _mtlFilter;
- MTLPixelFormat _mtlPixFmt;
MVKRPSKeyBlitImg _blitKey;
- std::vector<MVKMetalBlitTextureRender> _mtlTexBlitRenders;
+ std::vector<MVKImageBlitRender> _mvkImageBlitRenders;
};
@@ -211,10 +210,12 @@
MVKCommand::MVKCommand((MVKCommandTypePool<MVKCommand>*)pool) {}
protected:
+ bool isArrayTexture();
+
MVKBuffer* _buffer;
MVKImage* _image;
VkImageLayout _imageLayout;
- std::vector<VkBufferImageCopy> _mtlBuffImgCopyRegions;
+ std::vector<VkBufferImageCopy> _bufferImageCopyRegions;
bool _toImage = false;
};
diff --git a/MoltenVK/MoltenVK/Commands/MVKCmdTransfer.mm b/MoltenVK/MoltenVK/Commands/MVKCmdTransfer.mm
index db6c561..40c1fa1 100644
--- a/MoltenVK/MoltenVK/Commands/MVKCmdTransfer.mm
+++ b/MoltenVK/MoltenVK/Commands/MVKCmdTransfer.mm
@@ -38,81 +38,167 @@
VkImage dstImage,
VkImageLayout dstImageLayout,
uint32_t regionCount,
- const VkImageCopy* pRegions,
- MVKCommandUse commandUse) {
- _srcImage = (MVKImage*)srcImage;
- _srcLayout = srcImageLayout;
- _dstImage = (MVKImage*)dstImage;
- _dstLayout = dstImageLayout;
- _commandUse = commandUse;
+ const VkImageCopy* pRegions,
+ MVKCommandUse commandUse) {
- // Deterine the total number of texture layers being affected
- uint32_t layerCnt = 0;
- for (uint32_t i = 0; i < regionCount; i++) {
- layerCnt += pRegions[i].srcSubresource.layerCount;
- }
+ setContent(srcImage, srcImageLayout, dstImage, dstImageLayout, commandUse);
- // Add image regions
- _mtlTexCopyRegions.clear(); // Clear for reuse
- _mtlTexCopyRegions.reserve(layerCnt);
for (uint32_t i = 0; i < regionCount; i++) {
- addMetalCopyRegions(&pRegions[i]);
+ addImageCopyRegion(pRegions[i]);
}
- // Validate
- if ((_srcImage->getMTLTextureType() == MTLTextureType3D) != (_dstImage->getMTLTextureType() == MTLTextureType3D)) {
- setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCmdCopyImage(): Metal does not support copying to or from slices of a 3D texture."));
- }
+ // Validate
+ if ( !_canCopyFormats ) {
+ setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCmdCopyImage(): Cannot copy between incompatible formats, such as formats of different pixel sizes."));
+ }
+ if ((_srcImage->getMTLTextureType() == MTLTextureType3D) != (_dstImage->getMTLTextureType() == MTLTextureType3D)) {
+ setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCmdCopyImage(): Metal does not support copying to or from slices of a 3D texture."));
+ }
}
-// Adds a Metal copy region structure for each layer in the specified copy region.
-void MVKCmdCopyImage::addMetalCopyRegions(const VkImageCopy* pRegion) {
+// Sets basic content for use by this class and subclasses
+void MVKCmdCopyImage::setContent(VkImage srcImage,
+ VkImageLayout srcImageLayout,
+ VkImage dstImage,
+ VkImageLayout dstImageLayout,
+ MVKCommandUse commandUse) {
+ _srcImage = (MVKImage*)srcImage;
+ _srcLayout = srcImageLayout;
+ _srcMTLPixFmt = _srcImage->getMTLPixelFormat();
+ _srcSampleCount = mvkSampleCountFromVkSampleCountFlagBits(_srcImage->getSampleCount());
+ _isSrcCompressed = _srcImage->getIsCompressed();
+ uint32_t srcBytesPerBlock = mvkMTLPixelFormatBytesPerBlock(_srcMTLPixFmt);
- MVKMetalCopyTextureRegion mtlImgRgn;
- mtlImgRgn.srcOrigin = mvkMTLOriginFromVkOffset3D(pRegion->srcOffset);
- mtlImgRgn.dstOrigin = mvkMTLOriginFromVkOffset3D(pRegion->dstOffset);
- mtlImgRgn.srcSize = mvkMTLSizeFromVkExtent3D(pRegion->extent);
- mtlImgRgn.srcLevel = pRegion->srcSubresource.mipLevel;
- mtlImgRgn.dstLevel = pRegion->dstSubresource.mipLevel;
+ _dstImage = (MVKImage*)dstImage;
+ _dstLayout = dstImageLayout;
+ _dstMTLPixFmt = _dstImage->getMTLPixelFormat();
+ _dstSampleCount = mvkSampleCountFromVkSampleCountFlagBits(_dstImage->getSampleCount());
+ _isDstCompressed = _dstImage->getIsCompressed();
+ uint32_t dstBytesPerBlock = mvkMTLPixelFormatBytesPerBlock(_dstMTLPixFmt);
- uint32_t srcBaseLayer = pRegion->srcSubresource.baseArrayLayer;
- uint32_t dstBaseLayer = pRegion->dstSubresource.baseArrayLayer;
- uint32_t layCnt = pRegion->srcSubresource.layerCount;
+ _canCopyFormats = (srcBytesPerBlock == dstBytesPerBlock) && (_srcSampleCount == _dstSampleCount);
+ _useTempBuffer = (_srcMTLPixFmt != _dstMTLPixFmt) && (_isSrcCompressed || _isDstCompressed); // Different formats and at least one is compressed
- for (uint32_t layIdx = 0; layIdx < layCnt; layIdx++) {
- mtlImgRgn.srcSlice = srcBaseLayer + layIdx;
- mtlImgRgn.dstSlice = dstBaseLayer + layIdx;
- _mtlTexCopyRegions.push_back(mtlImgRgn);
+ _commandUse = commandUse;
+ _tmpBuffSize = 0;
+
+ _imageCopyRegions.clear(); // Clear for reuse
+ _srcTmpBuffImgCopies.clear(); // Clear for reuse
+ _dstTmpBuffImgCopies.clear(); // Clear for reuse
+}
+
+void MVKCmdCopyImage::addImageCopyRegion(const VkImageCopy& region) {
+ if (_useTempBuffer) {
+ addTempBufferImageCopyRegion(region); // Convert to image->buffer->image copies
+ } else {
+ _imageCopyRegions.push_back(region);
}
}
+// Add an image->buffer copy and buffer->image copy to replace the image->image copy
+void MVKCmdCopyImage::addTempBufferImageCopyRegion(const VkImageCopy& region) {
+ VkBufferImageCopy buffImgCpy;
+
+ // Add copy from source image to temp buffer.
+ buffImgCpy.bufferOffset = _tmpBuffSize;
+ buffImgCpy.bufferRowLength = 0;
+ buffImgCpy.bufferImageHeight = 0;
+ buffImgCpy.imageSubresource = region.srcSubresource;
+ buffImgCpy.imageOffset = region.srcOffset;
+ buffImgCpy.imageExtent = region.extent;
+ _srcTmpBuffImgCopies.push_back(buffImgCpy);
+
+ // Add copy from temp buffer to destination image.
+ // Extent is provided in source texels. If the source is compressed but the
+ // destination is not, each destination pixel will consume an entire source block,
+ // so we must downscale the destination extent by the size of the source block.
+ VkExtent3D dstExtent = region.extent;
+ if (_isSrcCompressed && !_isDstCompressed) {
+ VkExtent2D srcBlockExtent = mvkMTLPixelFormatBlockTexelSize(_srcMTLPixFmt);
+ dstExtent.width /= srcBlockExtent.width;
+ dstExtent.height /= srcBlockExtent.height;
+ }
+ buffImgCpy.bufferOffset = _tmpBuffSize;
+ buffImgCpy.bufferRowLength = 0;
+ buffImgCpy.bufferImageHeight = 0;
+ buffImgCpy.imageSubresource = region.dstSubresource;
+ buffImgCpy.imageOffset = region.dstOffset;
+ buffImgCpy.imageExtent = dstExtent;
+ _dstTmpBuffImgCopies.push_back(buffImgCpy);
+
+ NSUInteger bytesPerRow = mvkMTLPixelFormatBytesPerRow(_srcMTLPixFmt, region.extent.width);
+ NSUInteger bytesPerRegion = mvkMTLPixelFormatBytesPerLayer(_srcMTLPixFmt, bytesPerRow, region.extent.height);
+ _tmpBuffSize += bytesPerRegion;
+}
+
void MVKCmdCopyImage::encode(MVKCommandEncoder* cmdEncoder) {
- id<MTLTexture> srcMTLTex = _srcImage->getMTLTexture();
- id<MTLTexture> dstMTLTex = _dstImage->getMTLTexture();
- if ( !srcMTLTex || !dstMTLTex ) { return; }
+ // Unless we need to use an intermediary buffer copy, map the source pixel format to the
+ // dest pixel format through a texture view on the source texture. If the source and dest
+ // pixel formats are the same, this will simply degenerate to the source texture itself.
+ MTLPixelFormat mapSrcMTLPixFmt = _useTempBuffer ? _srcMTLPixFmt : _dstMTLPixFmt;
+ id<MTLTexture> srcMTLTex = _srcImage->getMTLTexture(mapSrcMTLPixFmt);
+ id<MTLTexture> dstMTLTex = _dstImage->getMTLTexture();
+ if ( !srcMTLTex || !dstMTLTex ) { return; }
- if (srcMTLTex.pixelFormat != dstMTLTex.pixelFormat &&
- mvkFormatTypeFromVkFormat(_dstImage->getVkFormat()) != kMVKFormatCompressed &&
- mvkFormatTypeFromVkFormat(_srcImage->getVkFormat()) != kMVKFormatCompressed) {
- // If the pixel formats don't match, Metal won't abort, but it won't
- // do the copy either. But we can easily work around that... unless the
- // source format is compressed.
- srcMTLTex = [[srcMTLTex newTextureViewWithPixelFormat: dstMTLTex.pixelFormat] autorelease];
- }
+ id<MTLBlitCommandEncoder> mtlBlitEnc = cmdEncoder->getMTLBlitEncoder(_commandUse);
- id<MTLBlitCommandEncoder> mtlBlitEnc = cmdEncoder->getMTLBlitEncoder(_commandUse);
+ // If copies can be performed using direct texture-texture copying, do so
+ for (auto& cpyRgn : _imageCopyRegions) {
+ uint32_t srcLevel = cpyRgn.srcSubresource.mipLevel;;
+ MTLOrigin srcOrigin = mvkMTLOriginFromVkOffset3D(cpyRgn.srcOffset);;
+ MTLSize srcSize = mvkMTLSizeFromVkExtent3D(cpyRgn.extent);
+ uint32_t dstLevel = cpyRgn.dstSubresource.mipLevel;
+ MTLOrigin dstOrigin = mvkMTLOriginFromVkOffset3D(cpyRgn.dstOffset);
- for (auto& cpyRgn : _mtlTexCopyRegions) {
- [mtlBlitEnc copyFromTexture: srcMTLTex
- sourceSlice: cpyRgn.srcSlice
- sourceLevel: cpyRgn.srcLevel
- sourceOrigin: cpyRgn.srcOrigin
- sourceSize: cpyRgn.srcSize
- toTexture: dstMTLTex
- destinationSlice: cpyRgn.dstSlice
- destinationLevel: cpyRgn.dstLevel
- destinationOrigin: cpyRgn.dstOrigin];
- }
+ uint32_t srcBaseLayer = cpyRgn.srcSubresource.baseArrayLayer;
+ uint32_t dstBaseLayer = cpyRgn.dstSubresource.baseArrayLayer;
+ uint32_t layCnt = cpyRgn.srcSubresource.layerCount;
+
+ for (uint32_t layIdx = 0; layIdx < layCnt; layIdx++) {
+ [mtlBlitEnc copyFromTexture: srcMTLTex
+ sourceSlice: srcBaseLayer + layIdx
+ sourceLevel: srcLevel
+ sourceOrigin: srcOrigin
+ sourceSize: srcSize
+ toTexture: dstMTLTex
+ destinationSlice: dstBaseLayer + layIdx
+ destinationLevel: dstLevel
+ destinationOrigin: dstOrigin];
+ }
+ }
+
+ // If copies could not be performed directly between images,
+ // use a temporary buffer acting as a waystation between the images.
+ if ( !_srcTmpBuffImgCopies.empty() ) {
+ MVKBufferDescriptorData tempBuffData;
+ tempBuffData.size = _tmpBuffSize;
+ tempBuffData.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT;
+ MVKBuffer* tempBuff = getCommandEncodingPool()->getTransferMVKBuffer(tempBuffData);
+
+ MVKCmdBufferImageCopy cpyCmd(&getCommandPool()->_cmdBufferImageCopyPool);
+
+ // Copy from source image to buffer
+ // Create and execute a temporary buffer image command.
+ // To be threadsafe...do NOT acquire and return the command from the pool.
+ cpyCmd.setContent((VkBuffer) tempBuff,
+ (VkImage) _srcImage,
+ _srcLayout,
+ (uint32_t)_srcTmpBuffImgCopies.size(),
+ _srcTmpBuffImgCopies.data(),
+ false);
+ cpyCmd.encode(cmdEncoder);
+
+ // Copy from buffer to destination image
+ // Create and execute a temporary buffer image command.
+ // To be threadsafe...do NOT acquire and return the command from the pool.
+ cpyCmd.setContent((VkBuffer) tempBuff,
+ (VkImage) _dstImage,
+ _dstLayout,
+ (uint32_t)_dstTmpBuffImgCopies.size(),
+ _dstTmpBuffImgCopies.data(),
+ true);
+ cpyCmd.encode(cmdEncoder);
+ }
}
@@ -125,134 +211,88 @@
VkImageLayout dstImageLayout,
uint32_t regionCount,
const VkImageBlit* pRegions,
- VkFilter filter,
- MVKCommandUse commandUse) {
- _srcImage = (MVKImage*)srcImage;
- _srcLayout = srcImageLayout;
- _dstImage = (MVKImage*)dstImage;
- _dstLayout = dstImageLayout;
+ VkFilter filter,
+ MVKCommandUse commandUse) {
- _mtlPixFmt = _dstImage->getMTLPixelFormat();
- _mtlFilter = mvkMTLSamplerMinMagFilterFromVkFilter(filter);
+ MVKCmdCopyImage::setContent(srcImage, srcImageLayout, dstImage, dstImageLayout, commandUse);
- _blitKey.mtlPixFmt = (uint32_t)_mtlPixFmt;
- _blitKey.mtlTexType = (uint32_t)_srcImage->getMTLTextureType();
+ _mtlFilter = mvkMTLSamplerMinMagFilterFromVkFilter(filter);
- _commandUse = commandUse;
+ _blitKey.srcMTLPixelFormat = (uint32_t)_srcMTLPixFmt;
+ _blitKey.srcMTLTextureType = (uint32_t)_srcImage->getMTLTextureType();
+ _blitKey.dstMTLPixelFormat = (uint32_t)_dstMTLPixFmt;
+ _blitKey.dstSampleCount = _dstSampleCount;
- // Determine which regions can be copied and which must be rendered to the destination texture
- bool canCopyRegion[regionCount];
- uint32_t copyRegionCount = 0;
- uint32_t renderRegionCount = 0;
+ _mvkImageBlitRenders.clear(); // Clear for reuse
for (uint32_t i = 0; i < regionCount; i++) {
- const VkImageBlit* pRegion = &pRegions[i];
- uint32_t layCnt = pRegion->srcSubresource.layerCount;
- if ( canCopy(pRegion) && (_srcImage->getMTLPixelFormat() == _mtlPixFmt) ) {
- canCopyRegion[i] = true;
- copyRegionCount += layCnt;
- } else {
- canCopyRegion[i] = false;
- renderRegionCount += layCnt;
- }
+ addImageBlitRegion(pRegions[i]);
}
- // Add copy and BLIT regions accordingly
- _mtlTexCopyRegions.clear(); // Clear for reuse
- _mtlTexCopyRegions.reserve(copyRegionCount);
- _mtlTexBlitRenders.clear(); // Clear for reuse
- _mtlTexBlitRenders.reserve(renderRegionCount);
+ // Validate
+ if ( !_mvkImageBlitRenders.empty() &&
+ (mvkMTLPixelFormatIsDepthFormat(_srcMTLPixFmt) ||
+ mvkMTLPixelFormatIsStencilFormat(_srcMTLPixFmt)) ) {
- for (uint32_t i = 0; i < regionCount; i++) {
- const VkImageBlit* pRegion = &pRegions[i];
- if (canCopyRegion[i]) {
- addMetalCopyRegions(pRegion);
- } else {
- addMetalBlitRenders(pRegion);
- }
+ setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCmdBlitImage(): Scaling or inverting depth/stencil images is not supported."));
+ _mvkImageBlitRenders.clear();
}
-
- // Validate
- if (_blitKey.isDepthFormat() && renderRegionCount > 0) {
- setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCmdBlitImage(): Scaling of depth/stencil images is not supported."));
- }
- if ( !_mtlTexBlitRenders.empty() && mvkMTLPixelFormatIsStencilFormat(_mtlPixFmt)) {
- setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCmdBlitImage(): Stencil image formats cannot be scaled or inverted."));
- }
}
-bool MVKCmdBlitImage::canCopy(const VkImageBlit* pRegion) {
- VkOffset3D srcSize = mvkVkOffset3DDifference(pRegion->srcOffsets[1], pRegion->srcOffsets[0]);
- VkOffset3D dstSize = mvkVkOffset3DDifference(pRegion->dstOffsets[1], pRegion->dstOffsets[0]);
+void MVKCmdBlitImage::addImageBlitRegion(const VkImageBlit& region) {
+ if (_canCopyFormats && canCopy(region)) {
+ addImageCopyRegionFromBlitRegion(region); // Convert to image copy
+ } else {
+ MVKImageBlitRender blitRender;
+ blitRender.region = region;
+ populateVertices(blitRender.vertices, region);
+ _mvkImageBlitRenders.push_back(blitRender);
+ }
+}
- // The source and destination sizes must be equal and not be negative in any direction
+// The source and destination sizes must be equal and not be negative in any direction
+bool MVKCmdBlitImage::canCopy(const VkImageBlit& region) {
+ VkOffset3D srcSize = mvkVkOffset3DDifference(region.srcOffsets[1], region.srcOffsets[0]);
+ VkOffset3D dstSize = mvkVkOffset3DDifference(region.dstOffsets[1], region.dstOffsets[0]);
return (mvkVkOffset3DsAreEqual(srcSize, dstSize) &&
(srcSize.x >= 0) && (srcSize.y >= 0) && (srcSize.z >= 0));
}
-// Adds a Metal copy region structure for each layer in the specified BLIT region.
-void MVKCmdBlitImage::addMetalCopyRegions(const VkImageBlit* pRegion) {
+void MVKCmdBlitImage::addImageCopyRegionFromBlitRegion(const VkImageBlit& region) {
+ const VkOffset3D& so0 = region.srcOffsets[0];
+ const VkOffset3D& so1 = region.srcOffsets[1];
- const VkOffset3D* pSo0 = &pRegion->srcOffsets[0];
- const VkOffset3D* pSo1 = &pRegion->srcOffsets[1];
+ VkImageCopy cpyRgn;
+ cpyRgn.srcSubresource = region.srcSubresource;
+ cpyRgn.srcOffset = region.srcOffsets[0];
+ cpyRgn.dstSubresource = region.dstSubresource;
+ cpyRgn.dstOffset = region.dstOffsets[0];
+ cpyRgn.extent.width = so1.x - so0.x;
+ cpyRgn.extent.height = so1.y - so0.y;
+ cpyRgn.extent.depth = so1.z - so0.z;
- MVKMetalCopyTextureRegion mtlImgRgn;
- mtlImgRgn.srcOrigin = mvkMTLOriginFromVkOffset3D(*pSo0);
- mtlImgRgn.dstOrigin = mvkMTLOriginFromVkOffset3D(pRegion->dstOffsets[0]);
- mtlImgRgn.srcSize = MTLSizeMake((pSo1->x - pSo0->x), (pSo1->y - pSo0->y), (pSo1->z - pSo0->z));
- mtlImgRgn.srcLevel = pRegion->srcSubresource.mipLevel;
- mtlImgRgn.dstLevel = pRegion->dstSubresource.mipLevel;
-
- uint32_t srcBaseLayer = pRegion->srcSubresource.baseArrayLayer;
- uint32_t dstBaseLayer = pRegion->dstSubresource.baseArrayLayer;
- uint32_t layCnt = pRegion->srcSubresource.layerCount;
-
- for (uint32_t layIdx = 0; layIdx < layCnt; layIdx++) {
- mtlImgRgn.srcSlice = srcBaseLayer + layIdx;
- mtlImgRgn.dstSlice = dstBaseLayer + layIdx;
- _mtlTexCopyRegions.push_back(mtlImgRgn);
- }
+ MVKCmdCopyImage::addImageCopyRegion(cpyRgn);
}
-// Adds a Metal BLIT render region structure for each layer in the specified BLIT region.
-void MVKCmdBlitImage::addMetalBlitRenders(const VkImageBlit* pRegion) {
-
- MVKMetalBlitTextureRender mtlBlitRndr;
- mtlBlitRndr.srcLevel = pRegion->srcSubresource.mipLevel;
- mtlBlitRndr.dstLevel = pRegion->dstSubresource.mipLevel;
- populateVertices(mtlBlitRndr.vertices, pRegion);
-
- uint32_t srcBaseLayer = pRegion->srcSubresource.baseArrayLayer;
- uint32_t dstBaseLayer = pRegion->dstSubresource.baseArrayLayer;
- uint32_t layCnt = pRegion->srcSubresource.layerCount;
-
- for (uint32_t layIdx = 0; layIdx < layCnt; layIdx++) {
- mtlBlitRndr.srcSlice = srcBaseLayer + layIdx;
- mtlBlitRndr.dstSlice = dstBaseLayer + layIdx;
- _mtlTexBlitRenders.push_back(mtlBlitRndr);
- }
-}
-
-// Populates the vertices in the specified array from the specified region.
-void MVKCmdBlitImage::populateVertices(MVKVertexPosTex* vertices, const VkImageBlit* pRegion) {
- const VkOffset3D* pSo0 = &pRegion->srcOffsets[0];
- const VkOffset3D* pSo1 = &pRegion->srcOffsets[1];
- const VkOffset3D* pDo0 = &pRegion->dstOffsets[0];
- const VkOffset3D* pDo1 = &pRegion->dstOffsets[1];
+void MVKCmdBlitImage::populateVertices(MVKVertexPosTex* vertices, const VkImageBlit& region) {
+ const VkOffset3D& so0 = region.srcOffsets[0];
+ const VkOffset3D& so1 = region.srcOffsets[1];
+ const VkOffset3D& do0 = region.dstOffsets[0];
+ const VkOffset3D& do1 = region.dstOffsets[1];
// Get the extents of the source and destination textures.
- VkExtent3D srcExtent = _srcImage->getExtent3D(pRegion->srcSubresource.mipLevel);
- VkExtent3D dstExtent = _dstImage->getExtent3D(pRegion->dstSubresource.mipLevel);
+ VkExtent3D srcExtent = _srcImage->getExtent3D(region.srcSubresource.mipLevel);
+ VkExtent3D dstExtent = _dstImage->getExtent3D(region.dstSubresource.mipLevel);
// Determine the bottom-left and top-right corners of the source and destination
// texture regions, each as a fraction of the corresponding texture size.
- CGPoint srcBL = CGPointMake((CGFloat)(pSo0->x) / (CGFloat)srcExtent.width,
- (CGFloat)(srcExtent.height - pSo1->y) / (CGFloat)srcExtent.height);
- CGPoint srcTR = CGPointMake((CGFloat)(pSo1->x) / (CGFloat)srcExtent.width,
- (CGFloat)(srcExtent.height - pSo0->y) / (CGFloat)srcExtent.height);
- CGPoint dstBL = CGPointMake((CGFloat)(pDo0->x) / (CGFloat)dstExtent.width,
- (CGFloat)(dstExtent.height - pDo1->y) / (CGFloat)dstExtent.height);
- CGPoint dstTR = CGPointMake((CGFloat)(pDo1->x) / (CGFloat)dstExtent.width,
- (CGFloat)(dstExtent.height - pDo0->y) / (CGFloat)dstExtent.height);
+ CGPoint srcBL = CGPointMake((CGFloat)(so0.x) / (CGFloat)srcExtent.width,
+ (CGFloat)(srcExtent.height - so1.y) / (CGFloat)srcExtent.height);
+ CGPoint srcTR = CGPointMake((CGFloat)(so1.x) / (CGFloat)srcExtent.width,
+ (CGFloat)(srcExtent.height - so0.y) / (CGFloat)srcExtent.height);
+ CGPoint dstBL = CGPointMake((CGFloat)(do0.x) / (CGFloat)dstExtent.width,
+ (CGFloat)(dstExtent.height - do1.y) / (CGFloat)dstExtent.height);
+ CGPoint dstTR = CGPointMake((CGFloat)(do1.x) / (CGFloat)dstExtent.width,
+ (CGFloat)(dstExtent.height - do0.y) / (CGFloat)dstExtent.height);
// The destination region is used for vertex positions,
// which are bounded by (-1.0 < p < 1.0) in clip-space.
@@ -282,7 +322,7 @@
pVtx->position.y = dstTR.y;
pVtx->texCoord.x = srcBL.x;
pVtx->texCoord.y = (1.0 - srcTR.y);
-
+
// Top right vertex
pVtx = &vertices[3];
pVtx->position.x = dstTR.x;
@@ -293,50 +333,56 @@
void MVKCmdBlitImage::encode(MVKCommandEncoder* cmdEncoder) {
- // Perform those BLITs that can be covered by simple texture copying.
- if ( !_mtlTexCopyRegions.empty() ) {
- MVKCmdCopyImage::encode(cmdEncoder);
- }
+ // Perform those BLITs that can be covered by simple texture copying.
+ if ( !_imageCopyRegions.empty() ) {
+ MVKCmdCopyImage::encode(cmdEncoder);
+ }
- // Perform those BLITs that require rendering to destination texture.
- if ( !_mtlTexBlitRenders.empty() && !_blitKey.isDepthFormat() ) {
+ // Perform those BLITs that require rendering to destination texture.
+ if ( !_mvkImageBlitRenders.empty() ) {
- cmdEncoder->endCurrentMetalEncoding();
+ cmdEncoder->endCurrentMetalEncoding();
- id<MTLTexture> srcMTLTex = _srcImage->getMTLTexture();
- id<MTLTexture> dstMTLTex = _dstImage->getMTLTexture();
- if ( !srcMTLTex || !dstMTLTex ) { return; }
+ id<MTLTexture> srcMTLTex = _srcImage->getMTLTexture();
+ id<MTLTexture> dstMTLTex = _dstImage->getMTLTexture();
+ if ( !srcMTLTex || !dstMTLTex ) { return; }
- bool isArrayType = _blitKey.isArrayType();
+ MTLRenderPassColorAttachmentDescriptor* mtlColorAttDesc = _mtlRenderPassDescriptor.colorAttachments[0];
+ mtlColorAttDesc.texture = dstMTLTex;
- MTLRenderPassColorAttachmentDescriptor* mtlColorAttDesc = _mtlRenderPassDescriptor.colorAttachments[0];
- mtlColorAttDesc.texture = dstMTLTex;
+ uint32_t vtxBuffIdx = getDevice()->getMetalBufferIndexForVertexAttributeBinding(kMVKVertexContentBufferIndex);
- uint32_t vtxBuffIdx = getDevice()->getMetalBufferIndexForVertexAttributeBinding(kMVKVertexContentBufferIndex);
+ MVKCommandEncodingPool* cmdEncPool = getCommandEncodingPool();
- MVKCommandEncodingPool* cmdEncPool = getCommandEncodingPool();
+ for (auto& bltRend : _mvkImageBlitRenders) {
- for (auto& bltRend : _mtlTexBlitRenders) {
+ mtlColorAttDesc.level = bltRend.region.dstSubresource.mipLevel;
- // Update the render pass descriptor for the texture level and slice, and create a render encoder.
- mtlColorAttDesc.level = bltRend.dstLevel;
- mtlColorAttDesc.slice = bltRend.dstSlice;
- id<MTLRenderCommandEncoder> mtlRendEnc = [cmdEncoder->_mtlCmdBuffer renderCommandEncoderWithDescriptor: _mtlRenderPassDescriptor];
- setLabelIfNotNil(mtlRendEnc, mvkMTLRenderCommandEncoderLabel(_commandUse));
+ uint32_t srcBaseLayer = bltRend.region.srcSubresource.baseArrayLayer;
+ uint32_t dstBaseLayer = bltRend.region.dstSubresource.baseArrayLayer;
- [mtlRendEnc pushDebugGroup: @"vkCmdBlitImage"];
- [mtlRendEnc setRenderPipelineState: cmdEncPool->getCmdBlitImageMTLRenderPipelineState(_blitKey)];
- cmdEncoder->setVertexBytes(mtlRendEnc, bltRend.vertices, sizeof(bltRend.vertices), vtxBuffIdx);
- [mtlRendEnc setFragmentTexture: srcMTLTex atIndex: 0];
- [mtlRendEnc setFragmentSamplerState: cmdEncPool->getCmdBlitImageMTLSamplerState(_mtlFilter) atIndex: 0];
- if (isArrayType) {
- cmdEncoder->setFragmentBytes(mtlRendEnc, &bltRend, sizeof(bltRend), 0);
+ uint32_t layCnt = bltRend.region.srcSubresource.layerCount;
+ for (uint32_t layIdx = 0; layIdx < layCnt; layIdx++) {
+ // Update the render pass descriptor for the texture level and slice, and create a render encoder.
+ mtlColorAttDesc.slice = dstBaseLayer + layIdx;
+ id<MTLRenderCommandEncoder> mtlRendEnc = [cmdEncoder->_mtlCmdBuffer renderCommandEncoderWithDescriptor: _mtlRenderPassDescriptor];
+ setLabelIfNotNil(mtlRendEnc, mvkMTLRenderCommandEncoderLabel(_commandUse));
+
+ [mtlRendEnc pushDebugGroup: @"vkCmdBlitImage"];
+ [mtlRendEnc setRenderPipelineState: cmdEncPool->getCmdBlitImageMTLRenderPipelineState(_blitKey)];
+ cmdEncoder->setVertexBytes(mtlRendEnc, bltRend.vertices, sizeof(bltRend.vertices), vtxBuffIdx);
+
+ [mtlRendEnc setFragmentTexture: srcMTLTex atIndex: 0];
+ [mtlRendEnc setFragmentSamplerState: cmdEncPool->getCmdBlitImageMTLSamplerState(_mtlFilter) atIndex: 0];
+ uint32_t srcSlice = srcBaseLayer + layIdx;
+ cmdEncoder->setFragmentBytes(mtlRendEnc, &srcSlice, sizeof(srcSlice), 0);
+
+ [mtlRendEnc drawPrimitives: MTLPrimitiveTypeTriangleStrip vertexStart: 0 vertexCount: kMVKBlitVertexCount];
+ [mtlRendEnc popDebugGroup];
+ [mtlRendEnc endEncoding];
}
- [mtlRendEnc drawPrimitives: MTLPrimitiveTypeTriangleStrip vertexStart: 0 vertexCount: kMVKBlitVertexCount];
- [mtlRendEnc popDebugGroup];
- [mtlRendEnc endEncoding];
- }
- }
+ }
+ }
}
@@ -397,7 +443,8 @@
addResolveSlices(rslvRgn);
}
- _srcImage->getTransferDescriptorData(_transferImageData);
+ _dstImage->getTransferDescriptorData(_transferImageData);
+ _transferImageData.samples = _srcImage->getSampleCount();
}
/**
@@ -487,7 +534,7 @@
if (expRgnCnt > 0) {
MVKCmdBlitImage expandCmd(&getCommandPool()->_cmdBlitImagePool);
expandCmd.setContent((VkImage)_dstImage, _dstLayout, (VkImage)xfrImage, _dstLayout,
- uint32_t(_expansionRegions.size()), _expansionRegions.data(),
+ expRgnCnt, _expansionRegions.data(),
VK_FILTER_LINEAR, kMVKCommandUseResolveExpandImage);
expandCmd.encode(cmdEncoder);
}
@@ -499,7 +546,7 @@
if (cpyRgnCnt > 0) {
MVKCmdCopyImage copyCmd(&getCommandPool()->_cmdCopyImagePool);
copyCmd.setContent((VkImage)_srcImage, _srcLayout, (VkImage)xfrImage, _dstLayout,
- uint32_t(_copyRegions.size()), _copyRegions.data(), kMVKCommandUseResolveCopyImage);
+ cpyRgnCnt, _copyRegions.data(), kMVKCommandUseResolveCopyImage);
copyCmd.encode(cmdEncoder);
}
@@ -641,10 +688,10 @@
_toImage = toImage;
// Add buffer regions
- _mtlBuffImgCopyRegions.clear(); // Clear for reuse
- _mtlBuffImgCopyRegions.reserve(regionCount);
+ _bufferImageCopyRegions.clear(); // Clear for reuse
+ _bufferImageCopyRegions.reserve(regionCount);
for (uint32_t i = 0; i < regionCount; i++) {
- _mtlBuffImgCopyRegions.push_back(pRegions[i]);
+ _bufferImageCopyRegions.push_back(pRegions[i]);
}
// Validate
@@ -663,7 +710,7 @@
MTLPixelFormat mtlPixFmt = _image->getMTLPixelFormat();
MVKCommandUse cmdUse = _toImage ? kMVKCommandUseCopyBufferToImage : kMVKCommandUseCopyImageToBuffer;
- for (auto& cpyRgn : _mtlBuffImgCopyRegions) {
+ for (auto& cpyRgn : _bufferImageCopyRegions) {
MTLOrigin mtlTxtOrigin = mvkMTLOriginFromVkOffset3D(cpyRgn.imageOffset);
MTLSize mtlTxtSize = mvkMTLSizeFromVkExtent3D(cpyRgn.imageExtent);
@@ -683,8 +730,8 @@
MTLBlitOption blitOptions = MTLBlitOptionNone;
if (mvkMTLPixelFormatIsDepthFormat(mtlPixFmt) && mvkMTLPixelFormatIsStencilFormat(mtlPixFmt)) {
VkImageAspectFlags imgFlags = cpyRgn.imageSubresource.aspectMask;
- bool wantDepth = mvkAreFlagsEnabled(imgFlags, VK_IMAGE_ASPECT_DEPTH_BIT);
- bool wantStencil = mvkAreFlagsEnabled(imgFlags, VK_IMAGE_ASPECT_STENCIL_BIT);
+ bool wantDepth = mvkAreAllFlagsEnabled(imgFlags, VK_IMAGE_ASPECT_DEPTH_BIT);
+ bool wantStencil = mvkAreAllFlagsEnabled(imgFlags, VK_IMAGE_ASPECT_STENCIL_BIT);
// The stencil component is always 1 byte per pixel.
// Don't reduce depths of 32-bit depth/stencil formats.
@@ -708,12 +755,10 @@
#endif
#if MVK_MACOS
- if (_toImage && mvkFormatTypeFromMTLPixelFormat(mtlPixFmt) == kMVKFormatCompressed &&
- mtlTexture.textureType == MTLTextureType3D) {
- // If we're copying to a compressed 3D image, the image data need to be decompressed.
- // If we're copying to mip level 0, we can skip the copy and just decode
- // directly into the image. Otherwise, we need to use an intermediate
- // buffer.
+ // If we're copying to a compressed 3D image, the image data need to be decompressed.
+ // If we're copying to mip level 0, we can skip the copy and just decode
+ // directly into the image. Otherwise, we need to use an intermediate buffer.
+ if (_toImage && _image->getIsCompressed() && mtlTexture.textureType == MTLTextureType3D) {
MVKCmdCopyBufferToImageInfo info;
info.srcRowStride = bytesPerRow & 0xffffffff;
info.srcRowStrideHigh = bytesPerRow >> 32;
@@ -778,6 +823,10 @@
if (!needsTempBuff) { continue; }
}
#endif
+
+ // Don't supply bytes per image if not an arrayed texture
+ if ( !isArrayTexture() ) { bytesPerImg = 0; }
+
id<MTLBlitCommandEncoder> mtlBlitEnc = cmdEncoder->getMTLBlitEncoder(cmdUse);
for (uint32_t lyrIdx = 0; lyrIdx < cpyRgn.imageSubresource.layerCount; lyrIdx++) {
@@ -808,6 +857,16 @@
}
}
+bool MVKCmdBufferImageCopy::isArrayTexture() {
+ MTLTextureType mtlTexType = _image->getMTLTextureType();
+ return (mtlTexType == MTLTextureType3D ||
+ mtlTexType == MTLTextureType2DArray ||
+#if MVK_MACOS
+ mtlTexType == MTLTextureType2DMultisampleArray ||
+#endif
+ mtlTexType == MTLTextureType1DArray);
+}
+
#pragma mark -
#pragma mark MVKCmdClearAttachments
@@ -852,22 +911,22 @@
// The depth value (including vertex position Z value) is held in the last index.
_clearColors[kMVKClearAttachmentDepthStencilIndex] = { mtlDepthVal, mtlDepthVal, mtlDepthVal, mtlDepthVal };
- _clearRects.clear();
+ _clearRects.clear(); // Clear for reuse
_clearRects.reserve(rectCount);
for (uint32_t i = 0; i < rectCount; i++) {
_clearRects.push_back(pRects[i]);
}
+ _vertices.clear(); // Clear for reuse
_vertices.reserve(rectCount * 6);
}
-/** Populates the vertices for all clear rectangles within an attachment of the specified size. */
+// Populates the vertices for all clear rectangles within an attachment of the specified size.
void MVKCmdClearAttachments::populateVertices(float attWidth, float attHeight) {
- _vertices.clear();
for (auto& rect : _clearRects) { populateVertices(rect, attWidth, attHeight); }
}
-/** Populates the vertices from the specified rectangle within an attachment of the specified size. */
+// Populates the vertices from the specified rectangle within an attachment of the specified size.
void MVKCmdClearAttachments::populateVertices(VkClearRect& clearRect, float attWidth, float attHeight) {
// Determine the positions of the four edges of the
@@ -989,13 +1048,20 @@
_mtlStencilClearValue = mvkMTLClearStencilFromVkClearValue(clearValue);
// Add subresource ranges
- _subresourceRanges.clear();
+ _subresourceRanges.clear(); // Clear for reuse
_subresourceRanges.reserve(rangeCount);
for (uint32_t i = 0; i < rangeCount; i++) {
_subresourceRanges.push_back(pRanges[i]);
}
+
+ // Validate
+ if ( !_image->getSupportsAllFormatFeatures(VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT) ) {
+ setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCmdClearImage(): Format %s cannot be cleared on this device.", mvkVkFormatName(_image->getVkFormat())));
+ }
}
void MVKCmdClearImage::encode(MVKCommandEncoder* cmdEncoder) {
+ if (getConfigurationResult()) { return; }
+
id<MTLTexture> imgMTLTex = _image->getMTLTexture();
if ( !imgMTLTex ) { return; }
diff --git a/MoltenVK/MoltenVK/Commands/MVKCommandBuffer.mm b/MoltenVK/MoltenVK/Commands/MVKCommandBuffer.mm
index 48fdab7..40dfbd9 100644
--- a/MoltenVK/MoltenVK/Commands/MVKCommandBuffer.mm
+++ b/MoltenVK/MoltenVK/Commands/MVKCommandBuffer.mm
@@ -42,14 +42,14 @@
_canAcceptCommands = true;
VkCommandBufferUsageFlags usage = pBeginInfo->flags;
- _isReusable = !mvkAreFlagsEnabled(usage, VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT);
- _supportsConcurrentExecution = mvkAreFlagsEnabled(usage, VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT);
+ _isReusable = !mvkAreAllFlagsEnabled(usage, VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT);
+ _supportsConcurrentExecution = mvkAreAllFlagsEnabled(usage, VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT);
// If this is a secondary command buffer, and contains inheritance info, set the inheritance info and determine
// whether it contains render pass continuation info. Otherwise, clear the inheritance info, and ignore it.
const VkCommandBufferInheritanceInfo* pInheritInfo = (_isSecondary ? pBeginInfo->pInheritanceInfo : NULL);
bool hasInheritInfo = mvkSetOrClear(&_secondaryInheritanceInfo, pInheritInfo);
- _doesContinueRenderPass = mvkAreFlagsEnabled(usage, VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT) && hasInheritInfo;
+ _doesContinueRenderPass = mvkAreAllFlagsEnabled(usage, VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT) && hasInheritInfo;
return getConfigurationResult();
}
@@ -76,7 +76,7 @@
_initialVisibilityResultMTLBuffer = nil; // not retained
setConfigurationResult(VK_NOT_READY);
- if (mvkAreFlagsEnabled(flags, VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT)) {
+ if (mvkAreAllFlagsEnabled(flags, VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT)) {
// TODO: what are we releasing or returning here?
}
diff --git a/MoltenVK/MoltenVK/Commands/MVKCommandEncoderState.mm b/MoltenVK/MoltenVK/Commands/MVKCommandEncoderState.mm
index 328ff5c..641832e 100644
--- a/MoltenVK/MoltenVK/Commands/MVKCommandEncoderState.mm
+++ b/MoltenVK/MoltenVK/Commands/MVKCommandEncoderState.mm
@@ -44,7 +44,10 @@
MVKPipeline* MVKPipelineCommandEncoderState::getPipeline() { return _pipeline; }
void MVKPipelineCommandEncoderState::encodeImpl(uint32_t stage) {
- if (_pipeline) { _pipeline->encode(_cmdEncoder, stage); }
+ if (_pipeline) {
+ _pipeline->encode(_cmdEncoder, stage);
+ _pipeline->bindPushConstants(_cmdEncoder);
+ }
}
void MVKPipelineCommandEncoderState::resetImpl() {
@@ -167,9 +170,14 @@
}
}
+// At this point, I have been marked not-dirty, under the assumption that I will make changes to the encoder.
+// However, some of the paths below decide not to actually make any changes to the encoder. In that case,
+// I should remain dirty until I actually do make encoder changes.
void MVKPushConstantsCommandEncoderState::encodeImpl(uint32_t stage) {
if (_pushConstants.empty() ) { return; }
+ _isDirty = true; // Stay dirty until I actually decide to make a change to the encoder
+
switch (_shaderStage) {
case VK_SHADER_STAGE_VERTEX_BIT:
if (stage == (isTessellating() ? kMVKGraphicsStageVertex : kMVKGraphicsStageRasterization)) {
@@ -177,6 +185,7 @@
_pushConstants.data(),
_pushConstants.size(),
_mtlBufferIndex);
+ _isDirty = false; // Okay, I changed the encoder
}
break;
case VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT:
@@ -185,6 +194,7 @@
_pushConstants.data(),
_pushConstants.size(),
_mtlBufferIndex);
+ _isDirty = false; // Okay, I changed the encoder
}
break;
case VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT:
@@ -193,6 +203,7 @@
_pushConstants.data(),
_pushConstants.size(),
_mtlBufferIndex);
+ _isDirty = false; // Okay, I changed the encoder
}
break;
case VK_SHADER_STAGE_FRAGMENT_BIT:
@@ -201,6 +212,7 @@
_pushConstants.data(),
_pushConstants.size(),
_mtlBufferIndex);
+ _isDirty = false; // Okay, I changed the encoder
}
break;
case VK_SHADER_STAGE_COMPUTE_BIT:
@@ -208,6 +220,7 @@
_pushConstants.data(),
_pushConstants.size(),
_mtlBufferIndex);
+ _isDirty = false; // Okay, I changed the encoder
break;
default:
MVKAssert(false, "Unsupported shader stage: %d", _shaderStage);
@@ -272,10 +285,10 @@
if ( !(_cmdEncoder->supportsDynamicState(VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK) &&
mvkIsAnyFlagEnabled(faceMask, VK_STENCIL_FRONT_AND_BACK)) ) { return; }
- if (mvkAreFlagsEnabled(faceMask, VK_STENCIL_FACE_FRONT_BIT)) {
+ if (mvkAreAllFlagsEnabled(faceMask, VK_STENCIL_FACE_FRONT_BIT)) {
_depthStencilData.frontFaceStencilData.readMask = stencilCompareMask;
}
- if (mvkAreFlagsEnabled(faceMask, VK_STENCIL_FACE_BACK_BIT)) {
+ if (mvkAreAllFlagsEnabled(faceMask, VK_STENCIL_FACE_BACK_BIT)) {
_depthStencilData.backFaceStencilData.readMask = stencilCompareMask;
}
@@ -289,10 +302,10 @@
if ( !(_cmdEncoder->supportsDynamicState(VK_DYNAMIC_STATE_STENCIL_WRITE_MASK) &&
mvkIsAnyFlagEnabled(faceMask, VK_STENCIL_FRONT_AND_BACK)) ) { return; }
- if (mvkAreFlagsEnabled(faceMask, VK_STENCIL_FACE_FRONT_BIT)) {
+ if (mvkAreAllFlagsEnabled(faceMask, VK_STENCIL_FACE_FRONT_BIT)) {
_depthStencilData.frontFaceStencilData.writeMask = stencilWriteMask;
}
- if (mvkAreFlagsEnabled(faceMask, VK_STENCIL_FACE_BACK_BIT)) {
+ if (mvkAreAllFlagsEnabled(faceMask, VK_STENCIL_FACE_BACK_BIT)) {
_depthStencilData.backFaceStencilData.writeMask = stencilWriteMask;
}
@@ -342,10 +355,10 @@
if ( !(_cmdEncoder->supportsDynamicState(VK_DYNAMIC_STATE_STENCIL_REFERENCE) &&
mvkIsAnyFlagEnabled(faceMask, VK_STENCIL_FRONT_AND_BACK)) ) { return; }
- if (mvkAreFlagsEnabled(faceMask, VK_STENCIL_FACE_FRONT_BIT)) {
+ if (mvkAreAllFlagsEnabled(faceMask, VK_STENCIL_FACE_FRONT_BIT)) {
_frontFaceValue = stencilReference;
}
- if (mvkAreFlagsEnabled(faceMask, VK_STENCIL_FACE_BACK_BIT)) {
+ if (mvkAreAllFlagsEnabled(faceMask, VK_STENCIL_FACE_BACK_BIT)) {
_backFaceValue = stencilReference;
}
@@ -793,7 +806,7 @@
NSUInteger offset = pQueryPool->getVisibilityResultOffset(query);
NSUInteger maxOffset = _cmdEncoder->_pDeviceMetalFeatures->maxQueryBufferSize - kMVKQuerySlotSizeInBytes;
- bool shouldCount = _cmdEncoder->_pDeviceFeatures->occlusionQueryPrecise && mvkAreFlagsEnabled(flags, VK_QUERY_CONTROL_PRECISE_BIT);
+ bool shouldCount = _cmdEncoder->_pDeviceFeatures->occlusionQueryPrecise && mvkAreAllFlagsEnabled(flags, VK_QUERY_CONTROL_PRECISE_BIT);
_mtlVisibilityResultMode = shouldCount ? MTLVisibilityResultModeCounting : MTLVisibilityResultModeBoolean;
_mtlVisibilityResultOffset = min(offset, maxOffset);
diff --git a/MoltenVK/MoltenVK/Commands/MVKCommandPool.mm b/MoltenVK/MoltenVK/Commands/MVKCommandPool.mm
index 3bdb118..1c5d51e 100644
--- a/MoltenVK/MoltenVK/Commands/MVKCommandPool.mm
+++ b/MoltenVK/MoltenVK/Commands/MVKCommandPool.mm
@@ -33,7 +33,7 @@
// Reset all of the command buffers
VkResult MVKCommandPool::reset(VkCommandPoolResetFlags flags) {
- bool releaseRez = mvkAreFlagsEnabled(flags, VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT);
+ bool releaseRez = mvkAreAllFlagsEnabled(flags, VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT);
VkCommandBufferResetFlags cmdBuffFlags = releaseRez ? VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT : 0;
diff --git a/MoltenVK/MoltenVK/Commands/MVKCommandResourceFactory.h b/MoltenVK/MoltenVK/Commands/MVKCommandResourceFactory.h
index 55bef82..a14e2de 100644
--- a/MoltenVK/MoltenVK/Commands/MVKCommandResourceFactory.h
+++ b/MoltenVK/MoltenVK/Commands/MVKCommandResourceFactory.h
@@ -35,25 +35,38 @@
* This structure can be used as a key in a std::map and std::unordered_map.
*/
typedef struct MVKRPSKeyBlitImg_t {
- uint16_t mtlPixFmt = 0; /**< MTLPixelFormat */
- uint16_t mtlTexType = 0; /**< MTLTextureType */
+ uint16_t srcMTLPixelFormat = 0; /**< as MTLPixelFormat */
+ uint16_t srcMTLTextureType = 0; /**< as MTLTextureType */
+ uint16_t dstMTLPixelFormat = 0; /**< as MTLPixelFormat */
+ uint16_t dstSampleCount = 0;
bool operator==(const MVKRPSKeyBlitImg_t& rhs) const {
- return ((mtlPixFmt == rhs.mtlPixFmt) && (mtlTexType == rhs.mtlTexType));
+ if (srcMTLPixelFormat != rhs.srcMTLPixelFormat) { return false; }
+ if (srcMTLTextureType != rhs.srcMTLTextureType) { return false; }
+ if (dstMTLPixelFormat != rhs.dstMTLPixelFormat) { return false; }
+ if (dstSampleCount != rhs.dstSampleCount) { return false; }
+ return true;
}
- inline MTLPixelFormat getMTLPixelFormat() { return (MTLPixelFormat)mtlPixFmt; }
+ inline MTLPixelFormat getSrcMTLPixelFormat() { return (MTLPixelFormat)srcMTLPixelFormat; }
- inline bool isDepthFormat() { return mvkMTLPixelFormatIsDepthFormat(getMTLPixelFormat()); }
+ inline MTLPixelFormat getDstMTLPixelFormat() { return (MTLPixelFormat)dstMTLPixelFormat; }
- inline MTLTextureType getMTLTextureType() { return (MTLTextureType)mtlTexType; }
-
- inline bool isArrayType() { return (mtlTexType == MTLTextureType2DArray) || (mtlTexType == MTLTextureType1DArray); }
+ inline bool isSrcArrayType() {
+ return (srcMTLTextureType == MTLTextureType2DArray ||
+#if MVK_MACOS
+ srcMTLTextureType == MTLTextureType2DMultisampleArray ||
+#endif
+ srcMTLTextureType == MTLTextureType1DArray); }
std::size_t hash() const {
- std::size_t hash = mtlTexType;
+ std::size_t hash = srcMTLPixelFormat;
hash <<= 16;
- hash |= mtlPixFmt;
+ hash |= srcMTLTextureType;
+ hash <<= 16;
+ hash |= dstMTLPixelFormat;
+ hash <<= 16;
+ hash |= dstSampleCount;
return hash;
}
@@ -344,8 +357,8 @@
*/
id<MTLDepthStencilState> newMTLDepthStencilState(MVKMTLDepthStencilDescriptorData& dsData);
- /** Returns an autoreleased MTLStencilDescriptor constructed from the stencil data. */
- MTLStencilDescriptor* getMTLStencilDescriptor(MVKMTLStencilDescriptorData& sData);
+ /** Returns an retained MTLStencilDescriptor constructed from the stencil data. */
+ MTLStencilDescriptor* newMTLStencilDescriptor(MVKMTLStencilDescriptorData& sData);
/**
* Returns a new MVKImage configured with content held in Private storage.
@@ -392,15 +405,15 @@
protected:
void initMTLLibrary();
void initImageDeviceMemory();
- id<MTLFunction> getBlitFragFunction(MVKRPSKeyBlitImg& blitKey);
- id<MTLFunction> getClearVertFunction(MVKRPSKeyClearAtt& attKey);
- id<MTLFunction> getClearFragFunction(MVKRPSKeyClearAtt& attKey);
+ id<MTLFunction> newBlitFragFunction(MVKRPSKeyBlitImg& blitKey);
+ id<MTLFunction> newClearVertFunction(MVKRPSKeyClearAtt& attKey);
+ id<MTLFunction> newClearFragFunction(MVKRPSKeyClearAtt& attKey);
NSString* getMTLFormatTypeString(MTLPixelFormat mtlPixFmt);
- id<MTLFunction> getFunctionNamed(const char* funcName);
+ id<MTLFunction> newFunctionNamed(const char* funcName);
id<MTLFunction> newMTLFunction(NSString* mslSrcCode, NSString* funcName);
id<MTLRenderPipelineState> newMTLRenderPipelineState(MTLRenderPipelineDescriptor* plDesc,
MVKVulkanAPIDeviceObject* owner);
- id<MTLComputePipelineState> newMTLComputePipelineState(id<MTLFunction> mtlFunction,
+ id<MTLComputePipelineState> newMTLComputePipelineState(const char* funcName,
MVKVulkanAPIDeviceObject* owner);
id<MTLLibrary> _mtlLibrary;
diff --git a/MoltenVK/MoltenVK/Commands/MVKCommandResourceFactory.mm b/MoltenVK/MoltenVK/Commands/MVKCommandResourceFactory.mm
index 29d56a7..20b6f32 100644
--- a/MoltenVK/MoltenVK/Commands/MVKCommandResourceFactory.mm
+++ b/MoltenVK/MoltenVK/Commands/MVKCommandResourceFactory.mm
@@ -33,13 +33,16 @@
id<MTLRenderPipelineState> MVKCommandResourceFactory::newCmdBlitImageMTLRenderPipelineState(MVKRPSKeyBlitImg& blitKey,
MVKVulkanAPIDeviceObject* owner) {
- MTLRenderPipelineDescriptor* plDesc = [[[MTLRenderPipelineDescriptor alloc] init] autorelease];
+ id<MTLFunction> vtxFunc = newFunctionNamed("vtxCmdBlitImage"); // temp retain
+ id<MTLFunction> fragFunc = newBlitFragFunction(blitKey); // temp retain
+ MTLRenderPipelineDescriptor* plDesc = [MTLRenderPipelineDescriptor new]; // temp retain
plDesc.label = @"CmdBlitImage";
- plDesc.vertexFunction = getFunctionNamed("vtxCmdBlitImage");
- plDesc.fragmentFunction = getBlitFragFunction(blitKey);
+ plDesc.vertexFunction = vtxFunc;
+ plDesc.fragmentFunction = fragFunc;
+ plDesc.sampleCount = blitKey.dstSampleCount;
- plDesc.colorAttachments[0].pixelFormat = blitKey.getMTLPixelFormat();
+ plDesc.colorAttachments[0].pixelFormat = blitKey.getDstMTLPixelFormat();
MTLVertexDescriptor* vtxDesc = plDesc.vertexDescriptor;
@@ -70,12 +73,18 @@
vbDesc.stepRate = 1;
vbDesc.stride = vtxStride;
- return newMTLRenderPipelineState(plDesc, owner);
+ id<MTLRenderPipelineState> rps = newMTLRenderPipelineState(plDesc, owner);
+
+ [vtxFunc release]; // temp release
+ [fragFunc release]; // temp release
+ [plDesc release]; // temp release
+
+ return rps;
}
id<MTLSamplerState> MVKCommandResourceFactory::newCmdBlitImageMTLSamplerState(MTLSamplerMinMagFilter mtlFilter) {
- MTLSamplerDescriptor* sDesc = [[[MTLSamplerDescriptor alloc] init] autorelease];
+ MTLSamplerDescriptor* sDesc = [MTLSamplerDescriptor new]; // temp retain
sDesc.rAddressMode = MTLSamplerAddressModeClampToZero;
sDesc.sAddressMode = MTLSamplerAddressModeClampToZero;
sDesc.tAddressMode = MTLSamplerAddressModeClampToZero;
@@ -83,15 +92,22 @@
sDesc.normalizedCoordinates = YES;
sDesc.minFilter = mtlFilter;
sDesc.magFilter = mtlFilter;
- return [getMTLDevice() newSamplerStateWithDescriptor: sDesc];
+
+ id<MTLSamplerState> ss = [getMTLDevice() newSamplerStateWithDescriptor: sDesc];
+
+ [sDesc release]; // temp release
+
+ return ss;
}
id<MTLRenderPipelineState> MVKCommandResourceFactory::newCmdClearMTLRenderPipelineState(MVKRPSKeyClearAtt& attKey,
MVKVulkanAPIDeviceObject* owner) {
- MTLRenderPipelineDescriptor* plDesc = [[[MTLRenderPipelineDescriptor alloc] init] autorelease];
+ id<MTLFunction> vtxFunc = newClearVertFunction(attKey); // temp retain
+ id<MTLFunction> fragFunc = newClearFragFunction(attKey); // temp retain
+ MTLRenderPipelineDescriptor* plDesc = [MTLRenderPipelineDescriptor new]; // temp retain
plDesc.label = @"CmdClearAttachments";
- plDesc.vertexFunction = getClearVertFunction(attKey);
- plDesc.fragmentFunction = getClearFragFunction(attKey);
+ plDesc.vertexFunction = vtxFunc;
+ plDesc.fragmentFunction = fragFunc;
plDesc.sampleCount = attKey.mtlSampleCount;
plDesc.inputPrimitiveTopologyMVK = MTLPrimitiveTopologyClassTriangle;
@@ -126,19 +142,23 @@
vbDesc.stepRate = 1;
vbDesc.stride = vtxStride;
- return newMTLRenderPipelineState(plDesc, owner);
+ id<MTLRenderPipelineState> rps = newMTLRenderPipelineState(plDesc, owner);
+
+ [vtxFunc release]; // temp release
+ [fragFunc release]; // temp release
+ [plDesc release]; // temp release
+
+ return rps;
}
-id<MTLFunction> MVKCommandResourceFactory::getBlitFragFunction(MVKRPSKeyBlitImg& blitKey) {
- id<MTLFunction> mtlFunc = nil;
-
- NSString* typeStr = getMTLFormatTypeString(blitKey.getMTLPixelFormat());
-
- bool isArrayType = blitKey.isArrayType();
- NSString* arraySuffix = isArrayType ? @"_array" : @"";
- NSString* sliceArg = isArrayType ? @", blitInfo.srcSlice" : @"";
-
+id<MTLFunction> MVKCommandResourceFactory::newBlitFragFunction(MVKRPSKeyBlitImg& blitKey) {
@autoreleasepool {
+ NSString* typeStr = getMTLFormatTypeString(blitKey.getSrcMTLPixelFormat());
+
+ bool isArrayType = blitKey.isSrcArrayType();
+ NSString* arraySuffix = isArrayType ? @"_array" : @"";
+ NSString* sliceArg = isArrayType ? @", srcSlice" : @"";
+
NSMutableString* msl = [NSMutableString stringWithCapacity: (2 * KIBI) ];
[msl appendLineMVK: @"#include <metal_stdlib>"];
[msl appendLineMVK: @"using namespace metal;"];
@@ -148,39 +168,25 @@
[msl appendLineMVK: @" float2 v_texCoord;"];
[msl appendLineMVK: @"} VaryingsPosTex;"];
[msl appendLineMVK];
- if (isArrayType) {
- [msl appendLineMVK: @"typedef struct {"];
- [msl appendLineMVK: @" uint srcLevel;"];
- [msl appendLineMVK: @" uint srcSlice;"];
- [msl appendLineMVK: @" uint dstLevel;"];
- [msl appendLineMVK: @" uint dstSlice;"];
- [msl appendLineMVK: @"} BlitInfo;"];
- [msl appendLineMVK];
- }
NSString* funcName = @"fragBlit";
[msl appendFormat: @"fragment %@4 %@(VaryingsPosTex varyings [[stage_in]],", typeStr, funcName];
[msl appendLineMVK];
[msl appendFormat: @" texture2d%@<%@> texture [[texture(0)]],", arraySuffix, typeStr];
[msl appendLineMVK];
- if (isArrayType) {
- [msl appendLineMVK: @" sampler sampler [[sampler(0)]],"];
- [msl appendLineMVK: @" constant BlitInfo& blitInfo [[buffer(0)]]) {"];
- } else {
- [msl appendLineMVK: @" sampler sampler [[sampler(0)]]) {"];
- }
+ [msl appendLineMVK: @" sampler sampler [[sampler(0)]],"];
+ [msl appendLineMVK: @" constant uint& srcSlice [[buffer(0)]]) {"];
[msl appendFormat: @" return texture.sample(sampler, varyings.v_texCoord%@);", sliceArg];
[msl appendLineMVK];
[msl appendLineMVK: @"}"];
- mtlFunc = newMTLFunction(msl, funcName);
// MVKLogDebug("\n%s", msl.UTF8String);
+
+ return newMTLFunction(msl, funcName);
}
- return [mtlFunc autorelease];
}
-id<MTLFunction> MVKCommandResourceFactory::getClearVertFunction(MVKRPSKeyClearAtt& attKey) {
- id<MTLFunction> mtlFunc = nil;
+id<MTLFunction> MVKCommandResourceFactory::newClearVertFunction(MVKRPSKeyClearAtt& attKey) {
@autoreleasepool {
NSMutableString* msl = [NSMutableString stringWithCapacity: (2 * KIBI) ];
[msl appendLineMVK: @"#include <metal_stdlib>"];
@@ -209,14 +215,13 @@
[msl appendLineMVK: @" return varyings;"];
[msl appendLineMVK: @"}"];
- mtlFunc = newMTLFunction(msl, funcName);
// MVKLogDebug("\n%s", msl.UTF8String);
+
+ return newMTLFunction(msl, funcName);
}
- return [mtlFunc autorelease];
}
-id<MTLFunction> MVKCommandResourceFactory::getClearFragFunction(MVKRPSKeyClearAtt& attKey) {
- id<MTLFunction> mtlFunc = nil;
+id<MTLFunction> MVKCommandResourceFactory::newClearFragFunction(MVKRPSKeyClearAtt& attKey) {
@autoreleasepool {
NSMutableString* msl = [NSMutableString stringWithCapacity: (2 * KIBI) ];
[msl appendLineMVK: @"#include <metal_stdlib>"];
@@ -255,10 +260,10 @@
[msl appendLineMVK: @" return ccOut;"];
[msl appendLineMVK: @"}"];
- mtlFunc = newMTLFunction(msl, funcName);
// MVKLogDebug("\n%s", msl.UTF8String);
+
+ return newMTLFunction(msl, funcName);
}
- return [mtlFunc autorelease];
}
NSString* MVKCommandResourceFactory::getMTLFormatTypeString(MTLPixelFormat mtlPixFmt) {
@@ -277,12 +282,12 @@
id<MTLDepthStencilState> MVKCommandResourceFactory::newMTLDepthStencilState(bool useDepth, bool useStencil) {
- MTLDepthStencilDescriptor* dsDesc = [[[MTLDepthStencilDescriptor alloc] init] autorelease];
+ MTLDepthStencilDescriptor* dsDesc = [MTLDepthStencilDescriptor new]; // temp retain
dsDesc.depthCompareFunction = MTLCompareFunctionAlways;
dsDesc.depthWriteEnabled = useDepth;
if (useStencil) {
- MTLStencilDescriptor* sDesc = [[[MTLStencilDescriptor alloc] init] autorelease];
+ MTLStencilDescriptor* sDesc = [MTLStencilDescriptor new]; // temp retain
sDesc.stencilCompareFunction = MTLCompareFunctionAlways;
sDesc.stencilFailureOperation = MTLStencilOperationReplace;
sDesc.depthFailureOperation = MTLStencilOperationReplace;
@@ -290,28 +295,42 @@
dsDesc.frontFaceStencil = sDesc;
dsDesc.backFaceStencil = sDesc;
+
+ [sDesc release]; // temp release
} else {
dsDesc.frontFaceStencil = nil;
dsDesc.backFaceStencil = nil;
}
- return [getMTLDevice() newDepthStencilStateWithDescriptor: dsDesc];
+ id<MTLDepthStencilState> dss = [getMTLDevice() newDepthStencilStateWithDescriptor: dsDesc];
+
+ [dsDesc release]; // temp release
+
+ return dss;
}
id<MTLDepthStencilState> MVKCommandResourceFactory::newMTLDepthStencilState(MVKMTLDepthStencilDescriptorData& dsData) {
- MTLDepthStencilDescriptor* dsDesc = [[[MTLDepthStencilDescriptor alloc] init] autorelease];
+ MTLStencilDescriptor* fsDesc = newMTLStencilDescriptor(dsData.frontFaceStencilData); // temp retain
+ MTLStencilDescriptor* bsDesc = newMTLStencilDescriptor(dsData.backFaceStencilData); // temp retain
+ MTLDepthStencilDescriptor* dsDesc = [MTLDepthStencilDescriptor new]; // temp retain
dsDesc.depthCompareFunction = (MTLCompareFunction)dsData.depthCompareFunction;
dsDesc.depthWriteEnabled = dsData.depthWriteEnabled;
- dsDesc.frontFaceStencil = getMTLStencilDescriptor(dsData.frontFaceStencilData);
- dsDesc.backFaceStencil = getMTLStencilDescriptor(dsData.backFaceStencilData);
+ dsDesc.frontFaceStencil = fsDesc;
+ dsDesc.backFaceStencil = bsDesc;
- return [getMTLDevice() newDepthStencilStateWithDescriptor: dsDesc];
+ id<MTLDepthStencilState> dss = [getMTLDevice() newDepthStencilStateWithDescriptor: dsDesc];
+
+ [fsDesc release]; // temp release
+ [bsDesc release]; // temp release
+ [dsDesc release]; // temp release
+
+ return dss;
}
-MTLStencilDescriptor* MVKCommandResourceFactory::getMTLStencilDescriptor(MVKMTLStencilDescriptorData& sData) {
+MTLStencilDescriptor* MVKCommandResourceFactory::newMTLStencilDescriptor(MVKMTLStencilDescriptorData& sData) {
if ( !sData.enabled ) { return nil; }
- MTLStencilDescriptor* sDesc = [[[MTLStencilDescriptor alloc] init] autorelease];
+ MTLStencilDescriptor* sDesc = [MTLStencilDescriptor new]; // retained
sDesc.stencilCompareFunction = (MTLCompareFunction)sData.stencilCompareFunction;
sDesc.stencilFailureOperation = (MTLStencilOperation)sData.stencilFailureOperation;
sDesc.depthFailureOperation = (MTLStencilOperation)sData.depthFailureOperation;
@@ -374,66 +393,75 @@
}
id<MTLComputePipelineState> MVKCommandResourceFactory::newCmdCopyBufferBytesMTLComputePipelineState(MVKVulkanAPIDeviceObject* owner) {
- return newMTLComputePipelineState(getFunctionNamed("cmdCopyBufferBytes"), owner);
+ return newMTLComputePipelineState("cmdCopyBufferBytes", owner);
}
id<MTLComputePipelineState> MVKCommandResourceFactory::newCmdFillBufferMTLComputePipelineState(MVKVulkanAPIDeviceObject* owner) {
- return newMTLComputePipelineState(getFunctionNamed("cmdFillBuffer"), owner);
+ return newMTLComputePipelineState("cmdFillBuffer", owner);
}
id<MTLComputePipelineState> MVKCommandResourceFactory::newCmdCopyBufferToImage3DDecompressMTLComputePipelineState(bool needTempBuf,
MVKVulkanAPIDeviceObject* owner) {
- return newMTLComputePipelineState(getFunctionNamed(needTempBuf
- ? "cmdCopyBufferToImage3DDecompressTempBufferDXTn"
- : "cmdCopyBufferToImage3DDecompressDXTn"), owner);
+ return newMTLComputePipelineState(needTempBuf
+ ? "cmdCopyBufferToImage3DDecompressTempBufferDXTn"
+ : "cmdCopyBufferToImage3DDecompressDXTn", owner);
}
id<MTLComputePipelineState> MVKCommandResourceFactory::newCmdDrawIndirectConvertBuffersMTLComputePipelineState(bool indexed,
MVKVulkanAPIDeviceObject* owner) {
- return newMTLComputePipelineState(getFunctionNamed(indexed
- ? "cmdDrawIndexedIndirectConvertBuffers"
- : "cmdDrawIndirectConvertBuffers"), owner);
+ return newMTLComputePipelineState(indexed
+ ? "cmdDrawIndexedIndirectConvertBuffers"
+ : "cmdDrawIndirectConvertBuffers", owner);
}
id<MTLComputePipelineState> MVKCommandResourceFactory::newCmdDrawIndexedCopyIndexBufferMTLComputePipelineState(MTLIndexType type,
MVKVulkanAPIDeviceObject* owner) {
- return newMTLComputePipelineState(getFunctionNamed(type == MTLIndexTypeUInt16
- ? "cmdDrawIndexedCopyIndex16Buffer"
- : "cmdDrawIndexedCopyIndex32Buffer"), owner);
+ return newMTLComputePipelineState(type == MTLIndexTypeUInt16
+ ? "cmdDrawIndexedCopyIndex16Buffer"
+ : "cmdDrawIndexedCopyIndex32Buffer", owner);
}
id<MTLComputePipelineState> MVKCommandResourceFactory::newCmdCopyQueryPoolResultsMTLComputePipelineState(MVKVulkanAPIDeviceObject* owner) {
- return newMTLComputePipelineState(getFunctionNamed("cmdCopyQueryPoolResultsToBuffer"), owner);
+ return newMTLComputePipelineState("cmdCopyQueryPoolResultsToBuffer", owner);
}
#pragma mark Support methods
-id<MTLFunction> MVKCommandResourceFactory::getFunctionNamed(const char* funcName) {
- uint64_t startTime = _device->getPerformanceTimestamp();
- id<MTLFunction> mtlFunc = [[_mtlLibrary newFunctionWithName: @(funcName)] autorelease];
- _device->addActivityPerformance(_device->_performanceStatistics.shaderCompilation.functionRetrieval, startTime);
- return mtlFunc;
+// Returns the retained MTLFunction with the name.
+// The caller is responsible for releasing the returned function object.
+id<MTLFunction> MVKCommandResourceFactory::newFunctionNamed(const char* funcName) {
+ uint64_t startTime = _device->getPerformanceTimestamp();
+ NSString* nsFuncName = [[NSString alloc] initWithUTF8String: funcName]; // temp retained
+ id<MTLFunction> mtlFunc = [_mtlLibrary newFunctionWithName: nsFuncName]; // retained
+ [nsFuncName release]; // temp release
+ _device->addActivityPerformance(_device->_performanceStatistics.shaderCompilation.functionRetrieval, startTime);
+ return mtlFunc;
}
id<MTLFunction> MVKCommandResourceFactory::newMTLFunction(NSString* mslSrcCode, NSString* funcName) {
@autoreleasepool {
+ id<MTLFunction> mtlFunc = nil;
NSError* err = nil;
+
uint64_t startTime = _device->getPerformanceTimestamp();
- id<MTLLibrary> mtlLib = [[getMTLDevice() newLibraryWithSource: mslSrcCode
- options: getDevice()->getMTLCompileOptions()
- error: &err] autorelease];
+ id<MTLLibrary> mtlLib = [getMTLDevice() newLibraryWithSource: mslSrcCode
+ options: getDevice()->getMTLCompileOptions()
+ error: &err]; // temp retain
_device->addActivityPerformance(_device->_performanceStatistics.shaderCompilation.mslCompile, startTime);
+
if (err) {
reportError(VK_ERROR_INITIALIZATION_FAILED,
"Could not compile support shader from MSL source (Error code %li):\n%s\n%s",
(long)err.code, mslSrcCode.UTF8String, err.localizedDescription.UTF8String);
- return nil;
+ } else {
+ startTime = _device->getPerformanceTimestamp();
+ mtlFunc = [mtlLib newFunctionWithName: funcName];
+ _device->addActivityPerformance(_device->_performanceStatistics.shaderCompilation.functionRetrieval, startTime);
}
- startTime = _device->getPerformanceTimestamp();
- id<MTLFunction> mtlFunc = [mtlLib newFunctionWithName: funcName];
- _device->addActivityPerformance(_device->_performanceStatistics.shaderCompilation.functionRetrieval, startTime);
+ [mtlLib release]; // temp release
+
return mtlFunc;
}
}
@@ -446,11 +474,13 @@
return rps;
}
-id<MTLComputePipelineState> MVKCommandResourceFactory::newMTLComputePipelineState(id<MTLFunction> mtlFunction,
+id<MTLComputePipelineState> MVKCommandResourceFactory::newMTLComputePipelineState(const char* funcName,
MVKVulkanAPIDeviceObject* owner) {
+ id<MTLFunction> mtlFunc = newFunctionNamed(funcName); // temp retain
MVKComputePipelineCompiler* plc = new MVKComputePipelineCompiler(owner);
- id<MTLComputePipelineState> cps = plc->newMTLComputePipelineState(mtlFunction); // retained
+ id<MTLComputePipelineState> cps = plc->newMTLComputePipelineState(mtlFunc); // retained
plc->destroy();
+ [mtlFunc release]; // temp release
return cps;
}
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKBuffer.mm b/MoltenVK/MoltenVK/GPUObjects/MVKBuffer.mm
index 18da46f..ee23a31 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKBuffer.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKBuffer.mm
@@ -45,6 +45,12 @@
pMemoryRequirements->size = getByteCount();
pMemoryRequirements->alignment = _byteAlignment;
pMemoryRequirements->memoryTypeBits = _device->getPhysicalDevice()->getAllMemoryTypes();
+#if MVK_MACOS
+ // Textures must not use shared memory
+ if (mvkIsAnyFlagEnabled(_usage, VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT | VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)) {
+ mvkDisableFlag(pMemoryRequirements->memoryTypeBits, _device->getPhysicalDevice()->getHostCoherentMemoryTypes());
+ }
+#endif
#if MVK_IOS
// Memoryless storage is not allowed for buffers
mvkDisableFlag(pMemoryRequirements->memoryTypeBits, _device->getPhysicalDevice()->getLazilyAllocatedMemoryTypes());
@@ -156,24 +162,25 @@
lock_guard<mutex> lock(_lock);
if (_mtlTexture) { return _mtlTexture; }
- MTLTextureDescriptor* mtlTexDesc = [MTLTextureDescriptor texture2DDescriptorWithPixelFormat: _mtlPixelFormat
- width: _textureSize.width
- height: _textureSize.height
- mipmapped: NO];
-#if MVK_MACOS
- // Textures on Mac cannot use shared storage, so force managed.
- if (_buffer->getMTLBuffer().storageMode == MTLStorageModeShared) {
- mtlTexDesc.storageMode = MTLStorageModeManaged;
- } else {
- mtlTexDesc.storageMode = _buffer->getMTLBuffer().storageMode;
- }
-#else
- mtlTexDesc.storageMode = _buffer->getMTLBuffer().storageMode;
-#endif
- mtlTexDesc.cpuCacheMode = _buffer->getMTLBuffer().cpuCacheMode;
- mtlTexDesc.usage = MTLTextureUsageShaderRead;
+ MTLTextureUsage usage = MTLTextureUsageShaderRead;
if ( mvkIsAnyFlagEnabled(_buffer->getUsage(), VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT) ) {
- mtlTexDesc.usage |= MTLTextureUsageShaderWrite;
+ usage |= MTLTextureUsageShaderWrite;
+ }
+ id<MTLBuffer> mtlBuff = _buffer->getMTLBuffer();
+ MTLTextureDescriptor* mtlTexDesc;
+ if ( _device->_pMetalFeatures->textureBuffers ) {
+ mtlTexDesc = [MTLTextureDescriptor textureBufferDescriptorWithPixelFormat: _mtlPixelFormat
+ width: _textureSize.width
+ resourceOptions: (mtlBuff.cpuCacheMode << MTLResourceCPUCacheModeShift) | (mtlBuff.storageMode << MTLResourceStorageModeShift)
+ usage: usage];
+ } else {
+ mtlTexDesc = [MTLTextureDescriptor texture2DDescriptorWithPixelFormat: _mtlPixelFormat
+ width: _textureSize.width
+ height: _textureSize.height
+ mipmapped: NO];
+ mtlTexDesc.storageMode = mtlBuff.storageMode;
+ mtlTexDesc.cpuCacheMode = mtlBuff.cpuCacheMode;
+ mtlTexDesc.usage = usage;
}
_mtlTexture = [_buffer->getMTLBuffer() newTextureWithDescriptor: mtlTexDesc
offset: _mtlBufferOffset
@@ -199,17 +206,25 @@
if (byteCount == VK_WHOLE_SIZE) { byteCount = _buffer->getByteCount() - pCreateInfo->offset; } // Remaining bytes in buffer
size_t blockCount = byteCount / bytesPerBlock;
- // But Metal requires the texture to be a 2D texture. Determine the number of 2D rows we need and their width.
- // Multiple rows will automatically align with PoT max texture dimension, but need to align upwards if less than full single row.
- size_t maxBlocksPerRow = _device->_pMetalFeatures->maxTextureDimension / fmtBlockSize.width;
- size_t blocksPerRow = min(blockCount, maxBlocksPerRow);
- _mtlBytesPerRow = mvkAlignByteOffset(blocksPerRow * bytesPerBlock, _device->getVkFormatTexelBufferAlignment(pCreateInfo->format, this));
+ if ( !_device->_pMetalFeatures->textureBuffers ) {
+ // But Metal requires the texture to be a 2D texture. Determine the number of 2D rows we need and their width.
+ // Multiple rows will automatically align with PoT max texture dimension, but need to align upwards if less than full single row.
+ size_t maxBlocksPerRow = _device->_pMetalFeatures->maxTextureDimension / fmtBlockSize.width;
+ size_t blocksPerRow = min(blockCount, maxBlocksPerRow);
+ _mtlBytesPerRow = mvkAlignByteOffset(blocksPerRow * bytesPerBlock, _device->getVkFormatTexelBufferAlignment(pCreateInfo->format, this));
- size_t rowCount = blockCount / blocksPerRow;
- if (blockCount % blocksPerRow) { rowCount++; }
+ size_t rowCount = blockCount / blocksPerRow;
+ if (blockCount % blocksPerRow) { rowCount++; }
- _textureSize.width = uint32_t(blocksPerRow * fmtBlockSize.width);
- _textureSize.height = uint32_t(rowCount * fmtBlockSize.height);
+ _textureSize.width = uint32_t(blocksPerRow * fmtBlockSize.width);
+ _textureSize.height = uint32_t(rowCount * fmtBlockSize.height);
+ } else {
+ // With native texture buffers we don't need to bother with any of that.
+ // We can just use a simple 1D texel array.
+ _textureSize.width = uint32_t(blockCount * fmtBlockSize.width);
+ _textureSize.height = 1;
+ _mtlBytesPerRow = byteCount;
+ }
if ( !_device->_pMetalFeatures->texelBuffers ) {
setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "Texel buffers are not supported on this device."));
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDescriptorSet.h b/MoltenVK/MoltenVK/GPUObjects/MVKDescriptorSet.h
index 755199e..6bd5ae8 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKDescriptorSet.h
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKDescriptorSet.h
@@ -93,7 +93,7 @@
MVKShaderResourceBinding& dslMTLRezIdxOffsets);
/** Populates the specified shader converter context, at the specified descriptor set binding. */
- void populateShaderConverterContext(mvk::SPIRVToMSLConverterContext& context,
+ void populateShaderConverterContext(mvk::SPIRVToMSLConversionConfiguration& context,
MVKShaderResourceBinding& dslMTLRezIdxOffsets,
uint32_t dslIndex);
@@ -160,27 +160,32 @@
/** Populates the specified shader converter context, at the specified DSL index. */
- void populateShaderConverterContext(mvk::SPIRVToMSLConverterContext& context,
+ void populateShaderConverterContext(mvk::SPIRVToMSLConversionConfiguration& context,
MVKShaderResourceBinding& dslMTLRezIdxOffsets,
uint32_t dslIndex);
/** Returns true if this layout is for push descriptors only. */
bool isPushDescriptorLayout() const { return _isPushDescriptorLayout; }
- /** Constructs an instance for the specified device. */
MVKDescriptorSetLayout(MVKDevice* device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo);
+ ~MVKDescriptorSetLayout();
+
protected:
friend class MVKDescriptorSetLayoutBinding;
friend class MVKPipelineLayout;
friend class MVKDescriptorSet;
+ friend class MVKDescriptorPool;
void propogateDebugName() override {}
-
+ void addDescriptorPool(MVKDescriptorPool* mvkDescPool) { _descriptorPools.insert(mvkDescPool); }
+ void removeDescriptorPool(MVKDescriptorPool* mvkDescPool) { _descriptorPools.erase(mvkDescPool); }
+
MVKVectorInline<MVKDescriptorSetLayoutBinding, 8> _bindings;
std::unordered_map<uint32_t, uint32_t> _bindingToIndex;
MVKShaderResourceBinding _mtlResourceCounts;
+ std::unordered_set<MVKDescriptorPool*> _descriptorPools;
bool _isPushDescriptorLayout : 1;
};
@@ -357,6 +362,9 @@
/** Destoys all currently allocated descriptor sets. */
VkResult reset(VkDescriptorPoolResetFlags flags);
+ /** Removes the pool associated with a descriptor set layout. */
+ void removeDescriptorSetPool(MVKDescriptorSetLayout* mvkDescSetLayout);
+
/** Constructs an instance for the specified device. */
MVKDescriptorPool(MVKDevice* device, const VkDescriptorPoolCreateInfo* pCreateInfo);
@@ -366,6 +374,7 @@
protected:
void propogateDebugName() override {}
MVKDescriptorSetPool* getDescriptorSetPool(MVKDescriptorSetLayout* mvkDescSetLayout);
+ void returnDescriptorSet(MVKDescriptorSet* mvkDescSet);
uint32_t _maxSets;
std::unordered_set<MVKDescriptorSet*> _allocatedSets;
@@ -427,7 +436,7 @@
* If the shader stage binding has a binding defined for the specified stage, populates
* the context at the descriptor set binding from the shader stage resource binding.
*/
-void mvkPopulateShaderConverterContext(mvk::SPIRVToMSLConverterContext& context,
+void mvkPopulateShaderConverterContext(mvk::SPIRVToMSLConversionConfiguration& context,
MVKShaderStageResourceBinding& ssRB,
spv::ExecutionModel stage,
uint32_t descriptorSetIndex,
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDescriptorSet.mm b/MoltenVK/MoltenVK/GPUObjects/MVKDescriptorSet.mm
index 93ab0ae..1f97ac0 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKDescriptorSet.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKDescriptorSet.mm
@@ -375,7 +375,7 @@
return true;
}
-void MVKDescriptorSetLayoutBinding::populateShaderConverterContext(SPIRVToMSLConverterContext& context,
+void MVKDescriptorSetLayoutBinding::populateShaderConverterContext(SPIRVToMSLConversionConfiguration& context,
MVKShaderResourceBinding& dslMTLRezIdxOffsets,
uint32_t dslIndex) {
@@ -409,7 +409,7 @@
for (uint32_t i = kMVKShaderStageVertex; i < kMVKShaderStageMax; i++) {
// Determine if this binding is used by this shader stage
- _applyToStage[i] = mvkAreFlagsEnabled(pBinding->stageFlags, mvkVkShaderStageFlagBitsFromMVKShaderStage(MVKShaderStage(i)));
+ _applyToStage[i] = mvkAreAllFlagsEnabled(pBinding->stageFlags, mvkVkShaderStageFlagBitsFromMVKShaderStage(MVKShaderStage(i)));
// If this binding is used by the shader, set the Metal resource index
if (_applyToStage[i]) {
initMetalResourceIndexOffsets(&_mtlResourceIndexOffsets.stages[i],
@@ -632,7 +632,7 @@
}
}
-void MVKDescriptorSetLayout::populateShaderConverterContext(SPIRVToMSLConverterContext& context,
+void MVKDescriptorSetLayout::populateShaderConverterContext(SPIRVToMSLConversionConfiguration& context,
MVKShaderResourceBinding& dslMTLRezIdxOffsets,
uint32_t dslIndex) {
uint32_t bindCnt = (uint32_t)_bindings.size();
@@ -652,6 +652,10 @@
}
}
+MVKDescriptorSetLayout::~MVKDescriptorSetLayout() {
+ for (auto& dsPool : _descriptorPools) { dsPool->removeDescriptorSetPool(this); }
+}
+
#pragma mark -
#pragma mark MVKDescriptorBinding
@@ -1021,41 +1025,66 @@
VkResult MVKDescriptorPool::freeDescriptorSets(uint32_t count, const VkDescriptorSet* pDescriptorSets) {
for (uint32_t dsIdx = 0; dsIdx < count; dsIdx++) {
MVKDescriptorSet* mvkDS = (MVKDescriptorSet*)pDescriptorSets[dsIdx];
- if (_allocatedSets.erase(mvkDS)) {
- getDescriptorSetPool(mvkDS->_pLayout)->returnObject(mvkDS);
- }
+ if (_allocatedSets.erase(mvkDS)) { returnDescriptorSet(mvkDS); }
}
return VK_SUCCESS;
}
// Return any allocated descriptor sets to their pools
VkResult MVKDescriptorPool::reset(VkDescriptorPoolResetFlags flags) {
- for (auto& mvkDS : _allocatedSets) {
- getDescriptorSetPool(mvkDS->_pLayout)->returnObject(mvkDS);
- }
+ for (auto& mvkDS : _allocatedSets) { returnDescriptorSet(mvkDS); }
_allocatedSets.clear();
return VK_SUCCESS;
}
+// Returns the descriptor set to its pool, or if that pool doesn't exist, the descriptor set is destroyed
+void MVKDescriptorPool::returnDescriptorSet(MVKDescriptorSet* mvkDescSet) {
+ MVKDescriptorSetLayout* dsLayout = mvkDescSet->_pLayout;
+ MVKDescriptorSetPool* dsPool = dsLayout ? _descriptorSetPools[dsLayout] : nullptr;
+ if (dsPool) {
+ dsPool->returnObject(mvkDescSet);
+ } else {
+ mvkDescSet->destroy();
+ _descriptorSetPools.erase(dsLayout);
+ }
+}
+
// Returns the pool of descriptor sets that use a specific layout, lazily creating it if necessary
MVKDescriptorSetPool* MVKDescriptorPool::getDescriptorSetPool(MVKDescriptorSetLayout* mvkDescSetLayout) {
MVKDescriptorSetPool* dsp = _descriptorSetPools[mvkDescSetLayout];
if ( !dsp ) {
dsp = new MVKDescriptorSetPool(_device);
_descriptorSetPools[mvkDescSetLayout] = dsp;
+ mvkDescSetLayout->addDescriptorPool(this); // tell layout to track me
}
return dsp;
}
+// Remove the descriptor set pool associated with the descriptor set layout,
+// and make sure any allocated sets don't try to return back to their pools.
+void MVKDescriptorPool::removeDescriptorSetPool(MVKDescriptorSetLayout* mvkDescSetLayout) {
+ MVKDescriptorSetPool* dsp = _descriptorSetPools[mvkDescSetLayout];
+ if (dsp) { dsp->destroy(); }
+ _descriptorSetPools.erase(mvkDescSetLayout);
+
+ for (auto& mvkDS : _allocatedSets) {
+ if (mvkDS->_pLayout == mvkDescSetLayout) { mvkDS->_pLayout = nullptr; }
+ }
+}
+
MVKDescriptorPool::MVKDescriptorPool(MVKDevice* device,
const VkDescriptorPoolCreateInfo* pCreateInfo) : MVKVulkanAPIDeviceObject(device) {
_maxSets = pCreateInfo->maxSets;
}
-// Return any allocated sets to their pools and then destroy all the pools.
+// Return any allocated sets to their pools and then destroy all the pools,
+// and ensure any descriptor set layouts used as keys are notified.
MVKDescriptorPool::~MVKDescriptorPool() {
reset(0);
- for (auto& pair : _descriptorSetPools) { pair.second->destroy(); }
+ for (auto& pair : _descriptorSetPools) {
+ pair.first->removeDescriptorPool(this);
+ if (pair.second) { pair.second->destroy(); }
+ }
}
@@ -1142,7 +1171,7 @@
}
}
-void mvkPopulateShaderConverterContext(SPIRVToMSLConverterContext& context,
+void mvkPopulateShaderConverterContext(SPIRVToMSLConversionConfiguration& context,
MVKShaderStageResourceBinding& ssRB,
spv::ExecutionModel stage,
uint32_t descriptorSetIndex,
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.h b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.h
index 92764a2..3a92cac 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.h
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.h
@@ -88,6 +88,9 @@
/** Returns a pointer to the Vulkan instance. */
MVKInstance* getInstance() override { return _mvkInstance; }
+ /** Populates the specified array with the supported extensions of this device. */
+ VkResult getExtensionProperties(const char* pLayerName, uint32_t* pCount, VkExtensionProperties* pProperties);
+
/** Populates the specified structure with the features of this device. */
void getFeatures(VkPhysicalDeviceFeatures* features);
@@ -285,13 +288,18 @@
bool getSupportsGPUFamily(MTLGPUFamily gpuFamily);
/** Populates the specified structure with the Metal-specific features of this device. */
- const MVKPhysicalDeviceMetalFeatures* getMetalFeatures() { return &_metalFeatures; }
+ inline const MVKPhysicalDeviceMetalFeatures* getMetalFeatures() { return &_metalFeatures; }
/** Returns the underlying Metal device. */
inline id<MTLDevice> getMTLDevice() { return _mtlDevice; }
/*** Replaces the underlying Metal device .*/
- inline void replaceMTLDevice(id<MTLDevice> mtlDevice) { [_mtlDevice autorelease]; _mtlDevice = [mtlDevice retain]; }
+ inline void replaceMTLDevice(id<MTLDevice> mtlDevice) {
+ if (mtlDevice != _mtlDevice) {
+ [_mtlDevice release];
+ _mtlDevice = [mtlDevice retain];
+ }
+ }
#pragma mark Construction
@@ -326,6 +334,8 @@
void initGPUInfoProperties();
void initMemoryProperties();
uint64_t getRecommendedMaxWorkingSetSize();
+ void initExtensions();
+ MVKExtensionList* getSupportedExtensions(const char* pLayerName = nullptr);
std::vector<MVKQueueFamily*>& getQueueFamilies();
void initPipelineCacheUUID();
uint32_t getHighestMTLFeatureSet();
@@ -335,9 +345,11 @@
id<MTLDevice> _mtlDevice;
MVKInstance* _mvkInstance;
+ MVKExtensionList _supportedExtensions;
VkPhysicalDeviceFeatures _features;
MVKPhysicalDeviceMetalFeatures _metalFeatures;
VkPhysicalDeviceProperties _properties;
+ VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT _texelBuffAlignProperties;
VkPhysicalDeviceMemoryProperties _memoryProperties;
std::vector<MVKQueueFamily*> _queueFamilies;
uint32_t _allMemoryTypes;
@@ -538,10 +550,10 @@
*
* If endTime is zero or not supplied, the current time is used.
*/
- inline void addActivityPerformance(MVKPerformanceTracker& shaderCompilationEvent,
+ inline void addActivityPerformance(MVKPerformanceTracker& activityTracker,
uint64_t startTime, uint64_t endTime = 0) {
if (_pMVKConfig->performanceTracking) {
- addActivityPerformanceImpl(shaderCompilationEvent, startTime, endTime);
+ addActivityPerformanceImpl(activityTracker, startTime, endTime);
}
};
@@ -555,7 +567,7 @@
inline id<MTLDevice> getMTLDevice() { return _physicalDevice->getMTLDevice(); }
/** Returns standard compilation options to be used when compiling MSL shaders. */
- MTLCompileOptions* getMTLCompileOptions();
+ inline MTLCompileOptions* getMTLCompileOptions() { return _mtlCompileOptions; }
/** Returns the Metal vertex buffer index to use for the specified vertex attribute binding number. */
uint32_t getMetalBufferIndexForVertexAttributeBinding(uint32_t binding);
@@ -609,8 +621,11 @@
const VkPhysicalDevice16BitStorageFeatures _enabledStorage16Features;
const VkPhysicalDevice8BitStorageFeaturesKHR _enabledStorage8Features;
const VkPhysicalDeviceFloat16Int8FeaturesKHR _enabledF16I8Features;
+ const VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR _enabledUBOLayoutFeatures;
const VkPhysicalDeviceVariablePointerFeatures _enabledVarPtrFeatures;
const VkPhysicalDeviceHostQueryResetFeaturesEXT _enabledHostQryResetFeatures;
+ const VkPhysicalDeviceScalarBlockLayoutFeaturesEXT _enabledScalarLayoutFeatures;
+ const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT _enabledTexelBuffAlignFeatures;
const VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT _enabledVtxAttrDivFeatures;
const VkPhysicalDevicePortabilitySubsetFeaturesEXTX _enabledPortabilityFeatures;
@@ -656,18 +671,20 @@
MVKResource* addResource(MVKResource* rez);
MVKResource* removeResource(MVKResource* rez);
void initPerformanceTracking();
- void initPhysicalDevice(MVKPhysicalDevice* physicalDevice);
+ void initPhysicalDevice(MVKPhysicalDevice* physicalDevice, const VkDeviceCreateInfo* pCreateInfo);
void initQueues(const VkDeviceCreateInfo* pCreateInfo);
+ void initMTLCompileOptions();
void enableFeatures(const VkDeviceCreateInfo* pCreateInfo);
void enableFeatures(const VkBool32* pEnable, const VkBool32* pRequested, const VkBool32* pAvailable, uint32_t count);
void enableExtensions(const VkDeviceCreateInfo* pCreateInfo);
- const char* getActivityPerformanceDescription(MVKPerformanceTracker& shaderCompilationEvent);
+ const char* getActivityPerformanceDescription(MVKPerformanceTracker& activityTracker);
uint64_t getPerformanceTimestampImpl();
- void addActivityPerformanceImpl(MVKPerformanceTracker& shaderCompilationEvent,
+ void addActivityPerformanceImpl(MVKPerformanceTracker& activityTracker,
uint64_t startTime, uint64_t endTime);
MVKPhysicalDevice* _physicalDevice;
MVKCommandResourceFactory* _commandResourceFactory;
+ MTLCompileOptions* _mtlCompileOptions;
std::vector<std::vector<MVKQueue*>> _queuesByQueueFamilyIndex;
std::vector<MVKResource*> _resources;
std::mutex _rezLock;
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm
index e136c1f..5dd967e 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm
@@ -56,6 +56,11 @@
#pragma mark -
#pragma mark MVKPhysicalDevice
+VkResult MVKPhysicalDevice::getExtensionProperties(const char* pLayerName, uint32_t* pCount, VkExtensionProperties* pProperties) {
+ MVKExtensionList* extensions = getSupportedExtensions(pLayerName);
+ return extensions->getProperties(pCount, pProperties);
+}
+
void MVKPhysicalDevice::getFeatures(VkPhysicalDeviceFeatures* features) {
if (features) { *features = _features; }
}
@@ -64,8 +69,7 @@
if (features) {
features->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
features->features = _features;
- auto* next = (VkBaseOutStructure*)features->pNext;
- while (next) {
+ for (auto* next = (VkBaseOutStructure*)features->pNext; next; next = next->pNext) {
switch ((uint32_t)next->sType) {
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES: {
auto* storageFeatures = (VkPhysicalDevice16BitStorageFeatures*)next;
@@ -88,6 +92,11 @@
f16Features->shaderInt8 = true;
break;
}
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR: {
+ auto* uboLayoutFeatures = (VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR*)next;
+ uboLayoutFeatures->uniformBufferStandardLayout = true;
+ break;
+ }
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES: {
auto* varPtrFeatures = (VkPhysicalDeviceVariablePointerFeatures*)next;
varPtrFeatures->variablePointersStorageBuffer = true;
@@ -99,6 +108,16 @@
hostQueryResetFeatures->hostQueryReset = true;
break;
}
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT: {
+ auto* scalarLayoutFeatures = (VkPhysicalDeviceScalarBlockLayoutFeaturesEXT*)next;
+ scalarLayoutFeatures->scalarBlockLayout = true;
+ break;
+ }
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT: {
+ auto* texelBuffAlignFeatures = (VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT*)next;
+ texelBuffAlignFeatures->texelBufferAlignment = _metalFeatures.texelBuffers && [_mtlDevice respondsToSelector: @selector(minimumLinearTextureAlignmentForPixelFormat:)];
+ break;
+ }
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT: {
auto* divisorFeatures = (VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT*)next;
divisorFeatures->vertexAttributeInstanceRateDivisor = true;
@@ -114,10 +133,14 @@
portabilityFeatures->samplerMipLodBias = false;
break;
}
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS2_FEATURES_INTEL: {
+ auto* shaderIntFuncsFeatures = (VkPhysicalDeviceShaderIntegerFunctions2INTEL*)next;
+ shaderIntFuncsFeatures->shaderIntegerFunctions2 = true;
+ break;
+ }
default:
break;
}
- next = next->pNext;
}
}
}
@@ -130,42 +153,44 @@
if (properties) {
properties->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2;
properties->properties = _properties;
- auto* next = (MVKVkAPIStructHeader*)properties->pNext;
- while (next) {
+ for (auto* next = (VkBaseOutStructure*)properties->pNext; next; next = next->pNext) {
switch ((uint32_t)next->sType) {
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES: {
auto* pointClipProps = (VkPhysicalDevicePointClippingProperties*)next;
pointClipProps->pointClippingBehavior = VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES;
- next = (MVKVkAPIStructHeader*)pointClipProps->pNext;
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES: {
auto* maint3Props = (VkPhysicalDeviceMaintenance3Properties*)next;
- maint3Props->maxPerSetDescriptors = (_metalFeatures.maxPerStageBufferCount + _metalFeatures.maxPerStageTextureCount + _metalFeatures.maxPerStageSamplerCount) * 2;
+ maint3Props->maxPerSetDescriptors = (_metalFeatures.maxPerStageBufferCount + _metalFeatures.maxPerStageTextureCount + _metalFeatures.maxPerStageSamplerCount) * 4;
maint3Props->maxMemoryAllocationSize = _metalFeatures.maxMTLBufferSize;
- next = (MVKVkAPIStructHeader*)maint3Props->pNext;
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR: {
auto* pushDescProps = (VkPhysicalDevicePushDescriptorPropertiesKHR*)next;
pushDescProps->maxPushDescriptors = _properties.limits.maxPerStageResources;
- next = (MVKVkAPIStructHeader*)pushDescProps->pNext;
+ break;
+ }
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT: {
+ auto* texelBuffAlignProps = (VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT*)next;
+ // Save the 'next' pointer; we'll unintentionally overwrite it
+ // on the next line. Put it back when we're done.
+ void* savedNext = texelBuffAlignProps->pNext;
+ *texelBuffAlignProps = _texelBuffAlignProperties;
+ texelBuffAlignProps->pNext = savedNext;
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT: {
auto* divisorProps = (VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT*)next;
divisorProps->maxVertexAttribDivisor = kMVKUndefinedLargeUInt32;
- next = (MVKVkAPIStructHeader*)divisorProps->pNext;
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_EXTX: {
auto* portabilityProps = (VkPhysicalDevicePortabilitySubsetPropertiesEXTX*)next;
portabilityProps->minVertexInputBindingStrideAlignment = 4;
- next = (MVKVkAPIStructHeader*)portabilityProps->pNext;
break;
}
default:
- next = (MVKVkAPIStructHeader*)next->pNext;
break;
}
}
@@ -221,6 +246,7 @@
return VK_ERROR_FORMAT_NOT_SUPPORTED;
}
+ MVKFormatType mvkFmt = mvkFormatTypeFromVkFormat(format);
bool hasAttachmentUsage = mvkIsAnyFlagEnabled(usage, (VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT |
VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT |
@@ -241,8 +267,7 @@
if (tiling == VK_IMAGE_TILING_LINEAR) { return VK_ERROR_FORMAT_NOT_SUPPORTED; }
// Metal does not allow compressed or depth/stencil formats on 1D textures
- if (mvkFormatTypeFromVkFormat(format) == kMVKFormatDepthStencil ||
- mvkFormatTypeFromVkFormat(format) == kMVKFormatCompressed) {
+ if (mvkFmt == kMVKFormatDepthStencil || mvkFmt == kMVKFormatCompressed) {
return VK_ERROR_FORMAT_NOT_SUPPORTED;
}
maxExt.width = pLimits->maxImageDimension1D;
@@ -263,8 +288,7 @@
if (tiling == VK_IMAGE_TILING_LINEAR) {
// Linear textures have additional restrictions under Metal:
// - They may not be depth/stencil or compressed textures.
- if (mvkFormatTypeFromVkFormat(format) == kMVKFormatDepthStencil ||
- mvkFormatTypeFromVkFormat(format) == kMVKFormatCompressed) {
+ if (mvkFmt == kMVKFormatDepthStencil || mvkFmt == kMVKFormatCompressed) {
return VK_ERROR_FORMAT_NOT_SUPPORTED;
}
#if MVK_MACOS
@@ -281,7 +305,7 @@
// Compressed multisampled textures aren't supported.
// Multisampled cube textures aren't supported.
// Non-renderable multisampled textures aren't supported.
- if (mvkFormatTypeFromVkFormat(format) == kMVKFormatCompressed ||
+ if (mvkFmt == kMVKFormatCompressed ||
mvkIsAnyFlagEnabled(flags, VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT) ||
!mvkIsAnyFlagEnabled(fmtProps.optimalTilingFeatures, VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT|VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT) ) {
sampleCounts = VK_SAMPLE_COUNT_1_BIT;
@@ -295,18 +319,17 @@
return VK_ERROR_FORMAT_NOT_SUPPORTED;
}
// Metal does not allow compressed or depth/stencil formats on 3D textures
- if (mvkFormatTypeFromVkFormat(format) == kMVKFormatDepthStencil
+ if (mvkFmt == kMVKFormatDepthStencil
#if MVK_IOS
- || mvkFormatTypeFromVkFormat(format) == kMVKFormatCompressed
+ || mvkFmt == kMVKFormatCompressed
#endif
) {
return VK_ERROR_FORMAT_NOT_SUPPORTED;
}
#if MVK_MACOS
- if (mvkFormatTypeFromVkFormat(format) == kMVKFormatCompressed) {
- // If this is a compressed format and there's no codec, it isn't
- // supported.
- if (!mvkCanDecodeFormat(format) ) { return VK_ERROR_FORMAT_NOT_SUPPORTED; }
+ // If this is a compressed format and there's no codec, it isn't supported.
+ if ((mvkFmt == kMVKFormatCompressed) && !mvkCanDecodeFormat(format)) {
+ return VK_ERROR_FORMAT_NOT_SUPPORTED;
}
#endif
maxExt.width = pLimits->maxImageDimension3D;
@@ -321,8 +344,7 @@
if (tiling == VK_IMAGE_TILING_LINEAR) { return VK_ERROR_FORMAT_NOT_SUPPORTED; }
// Metal does not allow compressed or depth/stencil formats on anything but 2D textures
- if (mvkFormatTypeFromVkFormat(format) == kMVKFormatDepthStencil ||
- mvkFormatTypeFromVkFormat(format) == kMVKFormatCompressed) {
+ if (mvkFmt == kMVKFormatDepthStencil || mvkFmt == kMVKFormatCompressed) {
return VK_ERROR_FORMAT_NOT_SUPPORTED;
}
maxExt = { 1, 1, 1};
@@ -457,24 +479,47 @@
MTLPixelFormatBGRA8Unorm,
MTLPixelFormatBGRA8Unorm_sRGB,
MTLPixelFormatRGBA16Float,
+ MTLPixelFormatBGR10A2Unorm,
};
- const uint mtlFmtsCnt = sizeof(mtlFormats) / sizeof(MTLPixelFormat);
+ MVKVectorInline<VkColorSpaceKHR, 16> colorSpaces;
+ colorSpaces.push_back(VK_COLOR_SPACE_SRGB_NONLINEAR_KHR);
+#if MVK_MACOS
+ if (getInstance()->_enabledExtensions.vk_EXT_swapchain_colorspace.enabled) {
+ // 10.11 supports some but not all of the color spaces specified by VK_EXT_swapchain_colorspace.
+ colorSpaces.push_back(VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT);
+ colorSpaces.push_back(VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT);
+ colorSpaces.push_back(VK_COLOR_SPACE_BT709_NONLINEAR_EXT);
+ colorSpaces.push_back(VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT);
+ colorSpaces.push_back(VK_COLOR_SPACE_PASS_THROUGH_EXT);
+ if (mvkOSVersion() >= 10.12) {
+ colorSpaces.push_back(VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT);
+ colorSpaces.push_back(VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT);
+ }
+ }
+#endif
+
+ uint mtlFmtsCnt = sizeof(mtlFormats) / sizeof(MTLPixelFormat);
+ if (!mvkMTLPixelFormatIsSupported(MTLPixelFormatBGR10A2Unorm)) { mtlFmtsCnt--; }
+
+ const uint vkFmtsCnt = mtlFmtsCnt * (uint)colorSpaces.size();
// If properties aren't actually being requested yet, simply update the returned count
if ( !pSurfaceFormats ) {
- *pCount = mtlFmtsCnt;
+ *pCount = vkFmtsCnt;
return VK_SUCCESS;
}
// Determine how many results we'll return, and return that number
- VkResult result = (*pCount >= mtlFmtsCnt) ? VK_SUCCESS : VK_INCOMPLETE;
- *pCount = min(*pCount, mtlFmtsCnt);
+ VkResult result = (*pCount >= vkFmtsCnt) ? VK_SUCCESS : VK_INCOMPLETE;
+ *pCount = min(*pCount, vkFmtsCnt);
// Now populate the supplied array
- for (uint fmtIdx = 0; fmtIdx < *pCount; fmtIdx++) {
- pSurfaceFormats[fmtIdx].format = mvkVkFormatFromMTLPixelFormat(mtlFormats[fmtIdx]);
- pSurfaceFormats[fmtIdx].colorSpace = VK_COLORSPACE_SRGB_NONLINEAR_KHR;
+ for (uint csIdx = 0, idx = 0; idx < *pCount && csIdx < colorSpaces.size(); csIdx++) {
+ for (uint fmtIdx = 0; idx < *pCount && fmtIdx < mtlFmtsCnt; fmtIdx++, idx++) {
+ pSurfaceFormats[idx].format = mvkVkFormatFromMTLPixelFormat(mtlFormats[fmtIdx]);
+ pSurfaceFormats[idx].colorSpace = colorSpaces[csIdx];
+ }
}
return result;
@@ -679,7 +724,7 @@
#pragma mark Construction
-MVKPhysicalDevice::MVKPhysicalDevice(MVKInstance* mvkInstance, id<MTLDevice> mtlDevice) {
+MVKPhysicalDevice::MVKPhysicalDevice(MVKInstance* mvkInstance, id<MTLDevice> mtlDevice) : _supportedExtensions(this, true) {
_mvkInstance = mvkInstance;
_mtlDevice = [mtlDevice retain];
@@ -687,6 +732,7 @@
initFeatures(); // Call second.
initProperties(); // Call third.
initMemoryProperties();
+ initExtensions();
logGPUInfo();
}
@@ -734,6 +780,7 @@
if ( [_mtlDevice supportsFeatureSet: MTLFeatureSet_iOS_GPUFamily1_v5] ) {
_metalFeatures.mslVersionEnum = MTLLanguageVersion2_1;
MVK_SET_FROM_ENV_OR_BUILD_BOOL(_metalFeatures.events, MVK_ALLOW_METAL_EVENTS);
+ _metalFeatures.textureBuffers = true;
}
if ( [_mtlDevice supportsFeatureSet: MTLFeatureSet_iOS_GPUFamily3_v1] ) {
@@ -752,8 +799,13 @@
_metalFeatures.arrayOfSamplers = true;
}
+ if ( [_mtlDevice supportsFeatureSet: MTLFeatureSet_iOS_GPUFamily4_v1] ) {
+ _metalFeatures.postDepthCoverage = true;
+ }
+
if ( [_mtlDevice supportsFeatureSet: MTLFeatureSet_iOS_GPUFamily5_v1] ) {
_metalFeatures.layeredRendering = true;
+ _metalFeatures.stencilFeedback = true;
}
#endif
@@ -792,10 +844,12 @@
_metalFeatures.multisampleArrayTextures = true;
MVK_SET_FROM_ENV_OR_BUILD_BOOL(_metalFeatures.events, MVK_ALLOW_METAL_EVENTS);
_metalFeatures.memoryBarriers = true;
+ _metalFeatures.textureBuffers = true;
}
if ( [_mtlDevice supportsFeatureSet: MTLFeatureSet_macOS_GPUFamily2_v1] ) {
_metalFeatures.multisampleLayeredRendering = _metalFeatures.layeredRendering;
+ _metalFeatures.stencilFeedback = true;
}
#endif
@@ -819,7 +873,7 @@
switch (_metalFeatures.mslVersionEnum) {
case MTLLanguageVersion2_2:
- _metalFeatures.mslVersion = SPIRVToMSLConverterOptions::makeMSLVersion(2, 2);
+ setMSLVersion(2, 2);
break;
case MTLLanguageVersion2_1:
setMSLVersion(2, 1);
@@ -913,7 +967,7 @@
_features.tessellationShader = true;
_features.shaderTessellationAndGeometryPointSize = true;
}
-
+
if ( [_mtlDevice supportsFeatureSet: MTLFeatureSet_iOS_GPUFamily4_v1] ) {
_features.imageCubeArray = true;
}
@@ -1087,7 +1141,11 @@
_properties.limits.maxDescriptorSetStorageImages = (_properties.limits.maxPerStageDescriptorStorageImages * 4);
_properties.limits.maxDescriptorSetInputAttachments = (_properties.limits.maxPerStageDescriptorInputAttachments * 4);
- _properties.limits.maxTexelBufferElements = _properties.limits.maxImageDimension2D * _properties.limits.maxImageDimension2D;
+ if (_metalFeatures.textureBuffers) {
+ _properties.limits.maxTexelBufferElements = (uint32_t)_metalFeatures.maxMTLBufferSize;
+ } else {
+ _properties.limits.maxTexelBufferElements = _properties.limits.maxImageDimension2D * _properties.limits.maxImageDimension2D;
+ }
_properties.limits.maxUniformBufferRange = (uint32_t)_metalFeatures.maxMTLBufferSize;
_properties.limits.maxStorageBufferRange = (uint32_t)_metalFeatures.maxMTLBufferSize;
_properties.limits.maxPushConstantsSize = (4 * KIBI);
@@ -1098,14 +1156,87 @@
_properties.limits.bufferImageGranularity = _metalFeatures.mtlBufferAlignment;
_properties.limits.nonCoherentAtomSize = _metalFeatures.mtlBufferAlignment;
+ if ([_mtlDevice respondsToSelector: @selector(minimumLinearTextureAlignmentForPixelFormat:)]) {
+ // Figure out the greatest alignment required by all supported formats, and
+ // whether or not they only require alignment to a single texel. We'll use this
+ // information to fill out the VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT
+ // struct.
+ uint32_t maxStorage = 0, maxUniform = 0;
+ bool singleTexelStorage = true, singleTexelUniform = true;
+ mvkEnumerateSupportedFormats({0, 0, VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT}, true, [&](VkFormat vk) {
+ NSUInteger alignment;
+ if ([_mtlDevice respondsToSelector: @selector(minimumTextureBufferAlignmentForPixelFormat:)]) {
+ alignment = [_mtlDevice minimumTextureBufferAlignmentForPixelFormat: mvkMTLPixelFormatFromVkFormat(vk)];
+ } else {
+ alignment = [_mtlDevice minimumLinearTextureAlignmentForPixelFormat: mvkMTLPixelFormatFromVkFormat(vk)];
+ }
+ VkFormatProperties props = mvkVkFormatProperties(vk, getFormatIsSupported(vk));
+ // For uncompressed formats, this is the size of a single texel.
+ // Note that no implementations of Metal support compressed formats
+ // in a linear texture (including texture buffers). It's likely that even
+ // if they did, this would be the absolute minimum alignment.
+ uint32_t texelSize = mvkVkFormatBytesPerBlock(vk);
+ // From the spec:
+ // "If the size of a single texel is a multiple of three bytes, then
+ // the size of a single component of the format is used instead."
+ if (texelSize % 3 == 0) {
+ switch (mvkFormatTypeFromVkFormat(vk)) {
+ case kMVKFormatColorInt8:
+ case kMVKFormatColorUInt8:
+ texelSize = 1;
+ break;
+ case kMVKFormatColorHalf:
+ case kMVKFormatColorInt16:
+ case kMVKFormatColorUInt16:
+ texelSize = 2;
+ break;
+ case kMVKFormatColorFloat:
+ case kMVKFormatColorInt32:
+ case kMVKFormatColorUInt32:
+ default:
+ texelSize = 4;
+ break;
+ }
+ }
+ if (mvkAreAllFlagsEnabled(props.bufferFeatures, VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT)) {
+ maxStorage = max(maxStorage, uint32_t(alignment));
+ if (alignment % texelSize != 0) { singleTexelStorage = false; }
+ }
+ if (mvkAreAllFlagsEnabled(props.bufferFeatures, VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT)) {
+ maxUniform = max(maxUniform, uint32_t(alignment));
+ if (alignment % texelSize != 0) { singleTexelUniform = false; }
+ }
+ return true;
+ });
+ _texelBuffAlignProperties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT;
+ _texelBuffAlignProperties.storageTexelBufferOffsetAlignmentBytes = maxStorage;
+ _texelBuffAlignProperties.storageTexelBufferOffsetSingleTexelAlignment = singleTexelStorage;
+ _texelBuffAlignProperties.uniformTexelBufferOffsetAlignmentBytes = maxUniform;
+ _texelBuffAlignProperties.uniformTexelBufferOffsetSingleTexelAlignment = singleTexelUniform;
+ _properties.limits.minTexelBufferOffsetAlignment = max(maxStorage, maxUniform);
+ } else {
+#if MVK_IOS
+ if ([_mtlDevice supportsFeatureSet: MTLFeatureSet_iOS_GPUFamily3_v1]) {
+ _properties.limits.minTexelBufferOffsetAlignment = 16;
+ } else {
+ _properties.limits.minTexelBufferOffsetAlignment = 64;
+ }
+#endif
+#if MVK_MACOS
+ _properties.limits.minTexelBufferOffsetAlignment = 256;
+#endif
+ _texelBuffAlignProperties.storageTexelBufferOffsetAlignmentBytes = _properties.limits.minTexelBufferOffsetAlignment;
+ _texelBuffAlignProperties.storageTexelBufferOffsetSingleTexelAlignment = VK_FALSE;
+ _texelBuffAlignProperties.uniformTexelBufferOffsetAlignmentBytes = _properties.limits.minTexelBufferOffsetAlignment;
+ _texelBuffAlignProperties.uniformTexelBufferOffsetSingleTexelAlignment = VK_FALSE;
+ }
+
#if MVK_IOS
_properties.limits.maxFragmentInputComponents = 60;
if ([_mtlDevice supportsFeatureSet: MTLFeatureSet_iOS_GPUFamily3_v1]) {
- _properties.limits.minTexelBufferOffsetAlignment = 16;
_properties.limits.optimalBufferCopyOffsetAlignment = 16;
} else {
- _properties.limits.minTexelBufferOffsetAlignment = 64;
_properties.limits.optimalBufferCopyOffsetAlignment = 64;
}
@@ -1122,7 +1253,6 @@
#endif
#if MVK_MACOS
_properties.limits.maxFragmentInputComponents = 128;
- _properties.limits.minTexelBufferOffsetAlignment = 256;
_properties.limits.optimalBufferCopyOffsetAlignment = 256;
if ([_mtlDevice supportsFeatureSet: MTLFeatureSet_macOS_GPUFamily1_v2]) {
@@ -1657,6 +1787,21 @@
return 128 * MEBI; // Conservative minimum for macOS GPU's & iOS shared memory
}
+void MVKPhysicalDevice::initExtensions() {
+ if (!_metalFeatures.postDepthCoverage) {
+ _supportedExtensions.vk_EXT_post_depth_coverage.enabled = false;
+ }
+ if (!_metalFeatures.stencilFeedback) {
+ _supportedExtensions.vk_EXT_shader_stencil_export.enabled = false;
+ }
+}
+
+// Return all extensions supported by this physical device.
+MVKExtensionList* MVKPhysicalDevice::getSupportedExtensions(const char* pLayerName) {
+ if (!pLayerName || strcmp(pLayerName, "MoltenVK") == 0) { return &_supportedExtensions; }
+ return getInstance()->getLayerManager()->getLayerNamed(pLayerName)->getSupportedExtensions();
+}
+
void MVKPhysicalDevice::logGPUInfo() {
string devTypeStr;
switch (_properties.deviceType) {
@@ -1740,9 +1885,11 @@
#endif
- MVKLogInfo(logMsg.c_str(), _properties.deviceName, devTypeStr.c_str(), _properties.vendorID, _properties.deviceID,
- [[[NSUUID alloc] initWithUUIDBytes: _properties.pipelineCacheUUID] autorelease].UUIDString.UTF8String,
- SPIRVToMSLConverterOptions::printMSLVersion(_metalFeatures.mslVersion).c_str());
+ NSUUID* nsUUID = [[NSUUID alloc] initWithUUIDBytes: _properties.pipelineCacheUUID]; // temp retain
+ MVKLogInfo(logMsg.c_str(), _properties.deviceName, devTypeStr.c_str(),
+ _properties.vendorID, _properties.deviceID, nsUUID.UUIDString.UTF8String,
+ SPIRVToMSLConversionOptions::printMSLVersion(_metalFeatures.mslVersion).c_str());
+ [nsUUID release]; // temp release
}
MVKPhysicalDevice::~MVKPhysicalDevice() {
@@ -1988,7 +2135,7 @@
// See if this pipeline has a parent. This can come either directly
// via basePipelineHandle or indirectly via basePipelineIndex.
MVKPipeline* parentPL = VK_NULL_HANDLE;
- if ( mvkAreFlagsEnabled(pCreateInfo->flags, VK_PIPELINE_CREATE_DERIVATIVE_BIT) ) {
+ if ( mvkAreAllFlagsEnabled(pCreateInfo->flags, VK_PIPELINE_CREATE_DERIVATIVE_BIT) ) {
VkPipeline vkParentPL = pCreateInfo->basePipelineHandle;
int32_t parentPLIdx = pCreateInfo->basePipelineIndex;
if ( !vkParentPL && (parentPLIdx >= 0)) { vkParentPL = pPipelines[parentPLIdx]; }
@@ -2144,43 +2291,44 @@
uint64_t MVKDevice::getPerformanceTimestampImpl() { return mvkGetTimestamp(); }
-void MVKDevice::addActivityPerformanceImpl(MVKPerformanceTracker& shaderCompilationEvent,
+void MVKDevice::addActivityPerformanceImpl(MVKPerformanceTracker& activityTracker,
uint64_t startTime, uint64_t endTime) {
lock_guard<mutex> lock(_perfLock);
double currInterval = mvkGetElapsedMilliseconds(startTime, endTime);
- shaderCompilationEvent.minimumDuration = ((shaderCompilationEvent.minimumDuration == 0.0)
+ activityTracker.minimumDuration = ((activityTracker.minimumDuration == 0.0)
? currInterval :
- min(currInterval, shaderCompilationEvent.minimumDuration));
- shaderCompilationEvent.maximumDuration = max(currInterval, shaderCompilationEvent.maximumDuration);
- double totalInterval = (shaderCompilationEvent.averageDuration * shaderCompilationEvent.count++) + currInterval;
- shaderCompilationEvent.averageDuration = totalInterval / shaderCompilationEvent.count;
+ min(currInterval, activityTracker.minimumDuration));
+ activityTracker.maximumDuration = max(currInterval, activityTracker.maximumDuration);
+ double totalInterval = (activityTracker.averageDuration * activityTracker.count++) + currInterval;
+ activityTracker.averageDuration = totalInterval / activityTracker.count;
if (_pMVKConfig->performanceLoggingFrameCount) {
MVKLogInfo("Performance to %s count: %d curr: %.3f ms, min: %.3f ms, max: %.3f ms, avg: %.3f ms",
- getActivityPerformanceDescription(shaderCompilationEvent),
- shaderCompilationEvent.count,
+ getActivityPerformanceDescription(activityTracker),
+ activityTracker.count,
currInterval,
- shaderCompilationEvent.minimumDuration,
- shaderCompilationEvent.maximumDuration,
- shaderCompilationEvent.averageDuration);
+ activityTracker.minimumDuration,
+ activityTracker.maximumDuration,
+ activityTracker.averageDuration);
}
}
-const char* MVKDevice::getActivityPerformanceDescription(MVKPerformanceTracker& shaderCompilationEvent) {
- if (&shaderCompilationEvent == &_performanceStatistics.shaderCompilation.hashShaderCode) { return "hash shader SPIR-V code"; }
- if (&shaderCompilationEvent == &_performanceStatistics.shaderCompilation.spirvToMSL) { return "convert SPIR-V to MSL source code"; }
- if (&shaderCompilationEvent == &_performanceStatistics.shaderCompilation.mslCompile) { return "compile MSL source code into a MTLLibrary"; }
- if (&shaderCompilationEvent == &_performanceStatistics.shaderCompilation.mslLoad) { return "load pre-compiled MSL code into a MTLLibrary"; }
- if (&shaderCompilationEvent == &_performanceStatistics.shaderCompilation.shaderLibraryFromCache) { return "retrieve shader library from the cache"; }
- if (&shaderCompilationEvent == &_performanceStatistics.shaderCompilation.functionRetrieval) { return "retrieve a MTLFunction from a MTLLibrary"; }
- if (&shaderCompilationEvent == &_performanceStatistics.shaderCompilation.functionSpecialization) { return "specialize a retrieved MTLFunction"; }
- if (&shaderCompilationEvent == &_performanceStatistics.shaderCompilation.pipelineCompile) { return "compile MTLFunctions into a pipeline"; }
- if (&shaderCompilationEvent == &_performanceStatistics.pipelineCache.sizePipelineCache) { return "calculate cache size required to write MSL to pipeline cache"; }
- if (&shaderCompilationEvent == &_performanceStatistics.pipelineCache.writePipelineCache) { return "write MSL to pipeline cache"; }
- if (&shaderCompilationEvent == &_performanceStatistics.pipelineCache.readPipelineCache) { return "read MSL from pipeline cache"; }
- if (&shaderCompilationEvent == &_performanceStatistics.queue.mtlQueueAccess) { return "access MTLCommandQueue"; }
- return "Unknown shader compile event";
+const char* MVKDevice::getActivityPerformanceDescription(MVKPerformanceTracker& activityTracker) {
+ if (&activityTracker == &_performanceStatistics.shaderCompilation.hashShaderCode) { return "hash shader SPIR-V code"; }
+ if (&activityTracker == &_performanceStatistics.shaderCompilation.spirvToMSL) { return "convert SPIR-V to MSL source code"; }
+ if (&activityTracker == &_performanceStatistics.shaderCompilation.mslCompile) { return "compile MSL source code into a MTLLibrary"; }
+ if (&activityTracker == &_performanceStatistics.shaderCompilation.mslLoad) { return "load pre-compiled MSL code into a MTLLibrary"; }
+ if (&activityTracker == &_performanceStatistics.shaderCompilation.shaderLibraryFromCache) { return "retrieve shader library from the cache"; }
+ if (&activityTracker == &_performanceStatistics.shaderCompilation.functionRetrieval) { return "retrieve a MTLFunction from a MTLLibrary"; }
+ if (&activityTracker == &_performanceStatistics.shaderCompilation.functionSpecialization) { return "specialize a retrieved MTLFunction"; }
+ if (&activityTracker == &_performanceStatistics.shaderCompilation.pipelineCompile) { return "compile MTLFunctions into a pipeline"; }
+ if (&activityTracker == &_performanceStatistics.pipelineCache.sizePipelineCache) { return "calculate cache size required to write MSL to pipeline cache"; }
+ if (&activityTracker == &_performanceStatistics.pipelineCache.writePipelineCache) { return "write MSL to pipeline cache"; }
+ if (&activityTracker == &_performanceStatistics.pipelineCache.readPipelineCache) { return "read MSL from pipeline cache"; }
+ if (&activityTracker == &_performanceStatistics.queue.mtlQueueAccess) { return "access MTLCommandQueue"; }
+ if (&activityTracker == &_performanceStatistics.queue.mtlCommandBufferCompletion) { return "complete MTLCommandBuffer"; }
+ return "Unknown performance activity";
}
void MVKDevice::getPerformanceStatistics(MVKPerformanceStatistics* pPerf) {
@@ -2192,12 +2340,6 @@
#pragma mark Metal
-MTLCompileOptions* MVKDevice::getMTLCompileOptions() {
- MTLCompileOptions* opts = [[MTLCompileOptions new] autorelease];
- opts.languageVersion = _pMetalFeatures->mslVersionEnum;
- return opts;
-}
-
uint32_t MVKDevice::getMetalBufferIndexForVertexAttributeBinding(uint32_t binding) {
return ((_pMetalFeatures->maxPerStageBufferCount - 1) - binding);
}
@@ -2257,21 +2399,26 @@
_enabledStorage16Features(),
_enabledStorage8Features(),
_enabledF16I8Features(),
+ _enabledUBOLayoutFeatures(),
_enabledVarPtrFeatures(),
_enabledHostQryResetFeatures(),
+ _enabledScalarLayoutFeatures(),
+ _enabledTexelBuffAlignFeatures(),
_enabledVtxAttrDivFeatures(),
_enabledPortabilityFeatures(),
_enabledExtensions(this)
{
initPerformanceTracking();
- initPhysicalDevice(physicalDevice);
+ initPhysicalDevice(physicalDevice, pCreateInfo);
enableFeatures(pCreateInfo);
enableExtensions(pCreateInfo);
_globalVisibilityResultMTLBuffer = nil;
_globalVisibilityQueryCount = 0;
+ initMTLCompileOptions(); // Before command resource factory
+
_commandResourceFactory = new MVKCommandResourceFactory(this);
initQueues(pCreateInfo);
@@ -2301,11 +2448,30 @@
_performanceStatistics.pipelineCache.writePipelineCache = initPerf;
_performanceStatistics.pipelineCache.readPipelineCache = initPerf;
_performanceStatistics.queue.mtlQueueAccess = initPerf;
+ _performanceStatistics.queue.mtlCommandBufferCompletion = initPerf;
}
-void MVKDevice::initPhysicalDevice(MVKPhysicalDevice* physicalDevice) {
+void MVKDevice::initPhysicalDevice(MVKPhysicalDevice* physicalDevice, const VkDeviceCreateInfo* pCreateInfo) {
- _physicalDevice = physicalDevice;
+ const VkDeviceGroupDeviceCreateInfo* pGroupCreateInfo = nullptr;
+ for (const auto* next = (const VkBaseInStructure*)pCreateInfo->pNext; next; next = next->pNext) {
+ switch (next->sType) {
+ case VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO:
+ pGroupCreateInfo = (const VkDeviceGroupDeviceCreateInfo*)next;
+ break;
+ default:
+ break;
+ }
+ }
+
+ // If I was given physical devices for a grouped device, use them.
+ // At this time, we only support device groups consisting of a single member,
+ // so this is sufficient for now.
+ if (pGroupCreateInfo && pGroupCreateInfo->physicalDeviceCount)
+ _physicalDevice = MVKPhysicalDevice::getMVKPhysicalDevice(pGroupCreateInfo->pPhysicalDevices[0]);
+ else
+ _physicalDevice = physicalDevice;
+
_pMVKConfig = _physicalDevice->_mvkInstance->getMoltenVKConfiguration();
_pMetalFeatures = _physicalDevice->getMetalFeatures();
_pProperties = &_physicalDevice->_properties;
@@ -2333,8 +2499,11 @@
memset((void*)&_enabledStorage16Features, 0, sizeof(_enabledStorage16Features));
memset((void*)&_enabledStorage8Features, 0, sizeof(_enabledStorage8Features));
memset((void*)&_enabledF16I8Features, 0, sizeof(_enabledF16I8Features));
+ memset((void*)&_enabledUBOLayoutFeatures, 0, sizeof(_enabledUBOLayoutFeatures));
memset((void*)&_enabledVarPtrFeatures, 0, sizeof(_enabledVarPtrFeatures));
memset((void*)&_enabledHostQryResetFeatures, 0, sizeof(_enabledHostQryResetFeatures));
+ memset((void*)&_enabledScalarLayoutFeatures, 0, sizeof(_enabledScalarLayoutFeatures));
+ memset((void*)&_enabledTexelBuffAlignFeatures, 0, sizeof(_enabledTexelBuffAlignFeatures));
memset((void*)&_enabledVtxAttrDivFeatures, 0, sizeof(_enabledVtxAttrDivFeatures));
memset((void*)&_enabledPortabilityFeatures, 0, sizeof(_enabledPortabilityFeatures));
@@ -2347,17 +2516,29 @@
pdVtxAttrDivFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT;
pdVtxAttrDivFeatures.pNext = &pdPortabilityFeatures;
+ VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT pdTexelBuffAlignFeatures;
+ pdTexelBuffAlignFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT;
+ pdTexelBuffAlignFeatures.pNext = &pdVtxAttrDivFeatures;
+
+ VkPhysicalDeviceScalarBlockLayoutFeaturesEXT pdScalarLayoutFeatures;
+ pdScalarLayoutFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT;
+ pdScalarLayoutFeatures.pNext = &pdTexelBuffAlignFeatures;
+
VkPhysicalDeviceHostQueryResetFeaturesEXT pdHostQryResetFeatures;
pdHostQryResetFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT;
- pdHostQryResetFeatures.pNext = &pdVtxAttrDivFeatures;
+ pdHostQryResetFeatures.pNext = &pdScalarLayoutFeatures;
VkPhysicalDeviceVariablePointerFeatures pdVarPtrFeatures;
pdVarPtrFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES;
pdVarPtrFeatures.pNext = &pdHostQryResetFeatures;
+ VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR pdUBOLayoutFeatures;
+ pdUBOLayoutFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR;
+ pdUBOLayoutFeatures.pNext = &pdVarPtrFeatures;
+
VkPhysicalDeviceFloat16Int8FeaturesKHR pdF16I8Features;
pdF16I8Features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR;
- pdF16I8Features.pNext = &pdVarPtrFeatures;
+ pdF16I8Features.pNext = &pdUBOLayoutFeatures;
VkPhysicalDevice8BitStorageFeaturesKHR pdStorage8Features;
pdStorage8Features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR;
@@ -2411,6 +2592,13 @@
&pdF16I8Features.shaderFloat16, 2);
break;
}
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR: {
+ auto* requestedFeatures = (VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR*)next;
+ enableFeatures(&_enabledUBOLayoutFeatures.uniformBufferStandardLayout,
+ &requestedFeatures->uniformBufferStandardLayout,
+ &pdUBOLayoutFeatures.uniformBufferStandardLayout, 1);
+ break;
+ }
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES: {
auto* requestedFeatures = (VkPhysicalDeviceVariablePointerFeatures*)next;
enableFeatures(&_enabledVarPtrFeatures.variablePointersStorageBuffer,
@@ -2425,6 +2613,20 @@
&pdHostQryResetFeatures.hostQueryReset, 1);
break;
}
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT: {
+ auto* requestedFeatures = (VkPhysicalDeviceScalarBlockLayoutFeaturesEXT*)next;
+ enableFeatures(&_enabledScalarLayoutFeatures.scalarBlockLayout,
+ &requestedFeatures->scalarBlockLayout,
+ &pdScalarLayoutFeatures.scalarBlockLayout, 1);
+ break;
+ }
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT: {
+ auto* requestedFeatures = (VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT*)next;
+ enableFeatures(&_enabledTexelBuffAlignFeatures.texelBufferAlignment,
+ &requestedFeatures->texelBufferAlignment,
+ &pdTexelBuffAlignFeatures.texelBufferAlignment, 1);
+ break;
+ }
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT: {
auto* requestedFeatures = (VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT*)next;
enableFeatures(&_enabledVtxAttrDivFeatures.vertexAttributeInstanceRateDivisor,
@@ -2459,7 +2661,7 @@
MVKExtensionList* pWritableExtns = (MVKExtensionList*)&_enabledExtensions;
setConfigurationResult(pWritableExtns->enable(pCreateInfo->enabledExtensionCount,
pCreateInfo->ppEnabledExtensionNames,
- getInstance()->getDriverLayer()->getSupportedExtensions()));
+ getPhysicalDevice()->getSupportedExtensions()));
}
// Create the command queues
@@ -2482,12 +2684,19 @@
}
}
+void MVKDevice::initMTLCompileOptions() {
+ _mtlCompileOptions = [MTLCompileOptions new]; // retained
+ _mtlCompileOptions.languageVersion = _pMetalFeatures->mslVersionEnum;
+}
+
MVKDevice::~MVKDevice() {
for (auto& queues : _queuesByQueueFamilyIndex) {
mvkDestroyContainerContents(queues);
}
- [_globalVisibilityResultMTLBuffer release];
_commandResourceFactory->destroy();
+
+ [_mtlCompileOptions release];
+ [_globalVisibilityResultMTLBuffer release];
}
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDeviceMemory.h b/MoltenVK/MoltenVK/GPUObjects/MVKDeviceMemory.h
index 5c13988..c87b443 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKDeviceMemory.h
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKDeviceMemory.h
@@ -101,7 +101,7 @@
inline MTLCPUCacheMode getMTLCPUCacheMode() { return _mtlCPUCacheMode; }
/** Returns the Metal reource options used by this memory allocation. */
- inline MTLResourceOptions getMTLResourceOptions() { return _mtlResourceOptions; }
+ inline MTLResourceOptions getMTLResourceOptions() { return mvkMTLResourceOptions(_mtlStorageMode, _mtlCPUCacheMode); }
#pragma mark Construction
@@ -139,7 +139,6 @@
void* _pHostMemory = nullptr;
bool _isMapped = false;
bool _isDedicated = false;
- MTLResourceOptions _mtlResourceOptions;
MTLStorageMode _mtlStorageMode;
MTLCPUCacheMode _mtlCPUCacheMode;
};
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDeviceMemory.mm b/MoltenVK/MoltenVK/GPUObjects/MVKDeviceMemory.mm
index b179646..ee4aedf 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKDeviceMemory.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKDeviceMemory.mm
@@ -163,10 +163,10 @@
// If host memory was already allocated, it is copied into the new MTLBuffer, and then released.
if (_pHostMemory) {
- _mtlBuffer = [getMTLDevice() newBufferWithBytes: _pHostMemory length: memLen options: _mtlResourceOptions]; // retained
+ _mtlBuffer = [getMTLDevice() newBufferWithBytes: _pHostMemory length: memLen options: getMTLResourceOptions()]; // retained
freeHostMemory();
} else {
- _mtlBuffer = [getMTLDevice() newBufferWithLength: memLen options: _mtlResourceOptions]; // retained
+ _mtlBuffer = [getMTLDevice() newBufferWithLength: memLen options: getMTLResourceOptions()]; // retained
}
_pMemory = isMemoryHostAccessible() ? _mtlBuffer.contents : nullptr;
@@ -210,7 +210,6 @@
const VkAllocationCallbacks* pAllocator) : MVKVulkanAPIDeviceObject(device) {
// Set Metal memory parameters
VkMemoryPropertyFlags vkMemProps = _device->_pMemoryProperties->memoryTypes[pAllocateInfo->memoryTypeIndex].propertyFlags;
- _mtlResourceOptions = mvkMTLResourceOptionsFromVkMemoryPropertyFlags(vkMemProps);
_mtlStorageMode = mvkMTLStorageModeFromVkMemoryPropertyFlags(vkMemProps);
_mtlCPUCacheMode = mvkMTLCPUCacheModeFromVkMemoryPropertyFlags(vkMemProps);
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKImage.h b/MoltenVK/MoltenVK/GPUObjects/MVKImage.h
index db47a1d..0cbf0d0 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKImage.h
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKImage.h
@@ -22,6 +22,7 @@
#include "MVKSync.h"
#include "MVKVector.h"
#include <MoltenVKSPIRVToMSLConverter/SPIRVToMSLConverter.h>
+#include <unordered_map>
#include <mutex>
#import <IOSurface/IOSurfaceRef.h>
@@ -61,6 +62,21 @@
/** Returns the Vulkan image format of this image. */
VkFormat getVkFormat();
+ /** Returns whether this image is compressed. */
+ bool getIsCompressed();
+
+ /**
+ * Returns whether the format of this image supports ANY of the indicated feature flags,
+ * taking into consideration whether this image is using linear or optimal tiling.
+ */
+ bool getSupportsAnyFormatFeature(VkFormatFeatureFlags requiredFormatFeatureFlags);
+
+ /**
+ * Returns whether the format of this image supports ALL of the indicated feature flags,
+ * taking into consideration whether this image is using linear or optimal tiling.
+ */
+ bool getSupportsAllFormatFeatures(VkFormatFeatureFlags requiredFormatFeatureFlags);
+
/**
* Returns the 3D extent of this image at the base mipmap level.
* For 2D or cube images, the Z component will be 1.
@@ -139,6 +155,9 @@
/** Returns the Metal texture underlying this image. */
id<MTLTexture> getMTLTexture();
+ /** Returns a Metal texture that interprets the pixels in the specified format. */
+ id<MTLTexture> getMTLTexture(MTLPixelFormat mtlPixFmt);
+
/**
* Sets this image to use the specified MTLTexture.
*
@@ -218,17 +237,17 @@
void propogateDebugName() override;
MVKImageSubresource* getSubresource(uint32_t mipLevel, uint32_t arrayLayer);
- void validateConfig(const VkImageCreateInfo* pCreateInfo);
- VkSampleCountFlagBits validateSamples(const VkImageCreateInfo* pCreateInfo);
- uint32_t validateMipLevels(const VkImageCreateInfo* pCreateInfo);
- bool validateLinear(const VkImageCreateInfo* pCreateInfo);
+ void validateConfig(const VkImageCreateInfo* pCreateInfo, bool isAttachment);
+ VkSampleCountFlagBits validateSamples(const VkImageCreateInfo* pCreateInfo, bool isAttachment);
+ uint32_t validateMipLevels(const VkImageCreateInfo* pCreateInfo, bool isAttachment);
+ bool validateLinear(const VkImageCreateInfo* pCreateInfo, bool isAttachment);
bool validateUseTexelBuffer();
void initSubresources(const VkImageCreateInfo* pCreateInfo);
void initSubresourceLayout(MVKImageSubresource& imgSubRez);
virtual id<MTLTexture> newMTLTexture();
void resetMTLTexture();
void resetIOSurface();
- MTLTextureDescriptor* getMTLTextureDescriptor();
+ MTLTextureDescriptor* newMTLTextureDescriptor();
void updateMTLTextureContent(MVKImageSubresource& subresource, VkDeviceSize offset, VkDeviceSize size);
void getMTLTextureContent(MVKImageSubresource& subresource, VkDeviceSize offset, VkDeviceSize size);
bool shouldFlushHostMemory();
@@ -239,6 +258,7 @@
VkImageMemoryBarrier* pImageMemoryBarrier);
std::vector<MVKImageSubresource> _subresources;
+ std::unordered_map<NSUInteger, id<MTLTexture>> _mtlTextureViews;
VkExtent3D _extent;
uint32_t _mipLevels;
uint32_t _arrayLayers;
@@ -361,7 +381,7 @@
protected:
void propogateDebugName() override {}
- MTLSamplerDescriptor* getMTLSamplerDescriptor(const VkSamplerCreateInfo* pCreateInfo);
+ MTLSamplerDescriptor* newMTLSamplerDescriptor(const VkSamplerCreateInfo* pCreateInfo);
void initConstExprSampler(const VkSamplerCreateInfo* pCreateInfo);
id<MTLSamplerState> _mtlSamplerState;
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKImage.mm b/MoltenVK/MoltenVK/GPUObjects/MVKImage.mm
index 96ebc14..4f2683e 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKImage.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKImage.mm
@@ -41,6 +41,24 @@
VkFormat MVKImage::getVkFormat() { return mvkVkFormatFromMTLPixelFormat(_mtlPixelFormat); }
+bool MVKImage::getIsCompressed() {
+ return mvkFormatTypeFromMTLPixelFormat(_mtlPixelFormat) == kMVKFormatCompressed;
+}
+
+bool MVKImage::getSupportsAnyFormatFeature(VkFormatFeatureFlags requiredFormatFeatureFlags) {
+ VkFormatProperties props;
+ _device->getPhysicalDevice()->getFormatProperties(getVkFormat(), &props);
+ VkFormatFeatureFlags imageFeatureFlags = _isLinear ? props.linearTilingFeatures : props.optimalTilingFeatures;
+ return mvkIsAnyFlagEnabled(imageFeatureFlags, requiredFormatFeatureFlags);
+}
+
+bool MVKImage::getSupportsAllFormatFeatures(VkFormatFeatureFlags requiredFormatFeatureFlags) {
+ VkFormatProperties props;
+ _device->getPhysicalDevice()->getFormatProperties(getVkFormat(), &props);
+ VkFormatFeatureFlags imageFeatureFlags = _isLinear ? props.linearTilingFeatures : props.optimalTilingFeatures;
+ return mvkAreAllFlagsEnabled(imageFeatureFlags, requiredFormatFeatureFlags);
+}
+
VkExtent3D MVKImage::getExtent3D(uint32_t mipLevel) {
return mvkMipmapLevelSizeFromBaseSize3D(_extent, mipLevel);
}
@@ -157,13 +175,14 @@
? _device->getPhysicalDevice()->getPrivateMemoryTypes()
: _device->getPhysicalDevice()->getAllMemoryTypes());
#if MVK_MACOS
- if (!_isLinear) { // XXX Linear images must support host-coherent memory
+ // Metal on macOS does not provide native support for host-coherent memory, but Vulkan requires it for Linear images
+ if ( !_isLinear ) {
mvkDisableFlag(pMemoryRequirements->memoryTypeBits, _device->getPhysicalDevice()->getHostCoherentMemoryTypes());
}
#endif
#if MVK_IOS
// Only transient attachments may use memoryless storage
- if (!mvkAreFlagsEnabled(_usage, VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT) ) {
+ if (!mvkAreAllFlagsEnabled(_usage, VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT) ) {
mvkDisableFlag(pMemoryRequirements->memoryTypeBits, _device->getPhysicalDevice()->getLazilyAllocatedMemoryTypes());
}
#endif
@@ -279,6 +298,22 @@
return _mtlTexture;
}
+id<MTLTexture> MVKImage::getMTLTexture(MTLPixelFormat mtlPixFmt) {
+ if (mtlPixFmt == _mtlPixelFormat) { return getMTLTexture(); }
+
+ id<MTLTexture> mtlTex = _mtlTextureViews[mtlPixFmt];
+ if ( !mtlTex ) {
+ // Lock and check again in case another thread has created the texture.
+ lock_guard<mutex> lock(_lock);
+ mtlTex = _mtlTextureViews[mtlPixFmt];
+ if ( !mtlTex ) {
+ mtlTex = [getMTLTexture() newTextureViewWithPixelFormat: mtlPixFmt]; // retained
+ _mtlTextureViews[mtlPixFmt] = mtlTex;
+ }
+ }
+ return mtlTex;
+}
+
VkResult MVKImage::setMTLTexture(id<MTLTexture> mtlTexture) {
lock_guard<mutex> lock(_lock);
resetMTLTexture();
@@ -308,15 +343,21 @@
// This implementation creates a new MTLTexture from a MTLTextureDescriptor and possible IOSurface.
// Subclasses may override this function to create the MTLTexture in a different manner.
id<MTLTexture> MVKImage::newMTLTexture() {
- if (_ioSurface) {
- return [getMTLDevice() newTextureWithDescriptor: getMTLTextureDescriptor() iosurface: _ioSurface plane: 0];
+ id<MTLTexture> mtlTex = nil;
+ MTLTextureDescriptor* mtlTexDesc = newMTLTextureDescriptor(); // temp retain
+
+ if (_ioSurface) {
+ mtlTex = [getMTLDevice() newTextureWithDescriptor: mtlTexDesc iosurface: _ioSurface plane: 0];
} else if (_usesTexelBuffer) {
- return [_deviceMemory->_mtlBuffer newTextureWithDescriptor: getMTLTextureDescriptor()
- offset: getDeviceMemoryOffset()
- bytesPerRow: _subresources[0].layout.rowPitch];
- } else {
- return [getMTLDevice() newTextureWithDescriptor: getMTLTextureDescriptor()];
- }
+ mtlTex = [_deviceMemory->_mtlBuffer newTextureWithDescriptor: mtlTexDesc
+ offset: getDeviceMemoryOffset()
+ bytesPerRow: _subresources[0].layout.rowPitch];
+ } else {
+ mtlTex = [getMTLDevice() newTextureWithDescriptor: mtlTexDesc];
+ }
+
+ [mtlTexDesc release]; // temp release
+ return mtlTex;
}
// Removes and releases the MTLTexture object, so that it can be lazily created by getMTLTexture().
@@ -355,14 +396,16 @@
} else {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
- _ioSurface = IOSurfaceCreate((CFDictionaryRef)@{
- (id)kIOSurfaceWidth: @(_extent.width),
- (id)kIOSurfaceHeight: @(_extent.height),
- (id)kIOSurfaceBytesPerElement: @(mvkMTLPixelFormatBytesPerBlock(_mtlPixelFormat)),
- (id)kIOSurfaceElementWidth: @(mvkMTLPixelFormatBlockTexelSize(_mtlPixelFormat).width),
- (id)kIOSurfaceElementHeight: @(mvkMTLPixelFormatBlockTexelSize(_mtlPixelFormat).height),
- (id)kIOSurfaceIsGlobal: @(true), // Deprecated but needed for interprocess transfers
- });
+ @autoreleasepool {
+ _ioSurface = IOSurfaceCreate((CFDictionaryRef)@{
+ (id)kIOSurfaceWidth: @(_extent.width),
+ (id)kIOSurfaceHeight: @(_extent.height),
+ (id)kIOSurfaceBytesPerElement: @(mvkMTLPixelFormatBytesPerBlock(_mtlPixelFormat)),
+ (id)kIOSurfaceElementWidth: @(mvkMTLPixelFormatBlockTexelSize(_mtlPixelFormat).width),
+ (id)kIOSurfaceElementHeight: @(mvkMTLPixelFormatBlockTexelSize(_mtlPixelFormat).height),
+ (id)kIOSurfaceIsGlobal: @(true), // Deprecated but needed for interprocess transfers
+ });
+ }
#pragma clang diagnostic pop
}
@@ -373,25 +416,21 @@
}
MTLTextureUsage MVKImage::getMTLTextureUsage() {
+
MTLTextureUsage usage = mvkMTLTextureUsageFromVkImageUsageFlags(_usage);
- // If this is a depth/stencil texture, and the device supports it, tell
- // Metal we may create texture views of this, too.
- if ((_mtlPixelFormat == MTLPixelFormatDepth32Float_Stencil8
-#if MVK_MACOS
- || _mtlPixelFormat == MTLPixelFormatDepth24Unorm_Stencil8
-#endif
- ) && _device->_pMetalFeatures->stencilViews) {
- mvkEnableFlag(usage, MTLTextureUsagePixelFormatView);
+ // Remove view usage from D/S if Metal doesn't support it
+ if ( !_device->_pMetalFeatures->stencilViews &&
+ mvkMTLPixelFormatIsDepthFormat(_mtlPixelFormat) &&
+ mvkMTLPixelFormatIsStencilFormat(_mtlPixelFormat)) {
+
+ mvkDisableFlag(usage, MTLTextureUsagePixelFormatView);
}
- // If this format doesn't support being blitted to, and the usage
- // doesn't specify use as an attachment, turn off
- // MTLTextureUsageRenderTarget.
- VkFormatProperties props;
- _device->getPhysicalDevice()->getFormatProperties(getVkFormat(), &props);
- if (!mvkAreFlagsEnabled(_isLinear ? props.linearTilingFeatures : props.optimalTilingFeatures, VK_FORMAT_FEATURE_BLIT_DST_BIT) &&
- !mvkIsAnyFlagEnabled(_usage, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT|VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT)) {
+ // If this format doesn't support being rendered to, disable MTLTextureUsageRenderTarget.
+ if ( !getSupportsAnyFormatFeature(VK_FORMAT_FEATURE_BLIT_DST_BIT |
+ VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT |
+ VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT) ) {
mvkDisableFlag(usage, MTLTextureUsageRenderTarget);
}
@@ -405,9 +444,10 @@
return usage;
}
-// Returns an autoreleased Metal texture descriptor constructed from the properties of this image.
-MTLTextureDescriptor* MVKImage::getMTLTextureDescriptor() {
- MTLTextureDescriptor* mtlTexDesc = [[MTLTextureDescriptor alloc] init];
+// Returns a Metal texture descriptor constructed from the properties of this image.
+// It is the caller's responsibility to release the returned descriptor object.
+MTLTextureDescriptor* MVKImage::newMTLTextureDescriptor() {
+ MTLTextureDescriptor* mtlTexDesc = [MTLTextureDescriptor new]; // retained
#if MVK_MACOS
if (_is3DCompressed) {
// Metal doesn't yet support 3D compressed textures, so we'll decompress
@@ -430,7 +470,7 @@
mtlTexDesc.storageModeMVK = getMTLStorageMode();
mtlTexDesc.cpuCacheMode = getMTLCPUCacheMode();
- return [mtlTexDesc autorelease];
+ return mtlTexDesc;
}
MTLStorageMode MVKImage::getMTLStorageMode() {
@@ -569,18 +609,22 @@
_arrayLayers = max(pCreateInfo->arrayLayers, minDim);
// Perform validation and adjustments before configuring other settings
- validateConfig(pCreateInfo);
- _samples = validateSamples(pCreateInfo);
- _mipLevels = validateMipLevels(pCreateInfo);
- _isLinear = validateLinear(pCreateInfo);
+ bool isAttachment = mvkIsAnyFlagEnabled(pCreateInfo->usage, (VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
+ VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT |
+ VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT |
+ VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT));
+ validateConfig(pCreateInfo, isAttachment);
+ _samples = validateSamples(pCreateInfo, isAttachment);
+ _mipLevels = validateMipLevels(pCreateInfo, isAttachment);
+ _isLinear = validateLinear(pCreateInfo, isAttachment);
_mtlPixelFormat = getMTLPixelFormatFromVkFormat(pCreateInfo->format);
_mtlTextureType = mvkMTLTextureTypeFromVkImageType(pCreateInfo->imageType, _arrayLayers, _samples > VK_SAMPLE_COUNT_1_BIT);
_usage = pCreateInfo->usage;
_is3DCompressed = (pCreateInfo->imageType == VK_IMAGE_TYPE_3D) && (mvkFormatTypeFromVkFormat(pCreateInfo->format) == kMVKFormatCompressed);
- _isDepthStencilAttachment = (mvkAreFlagsEnabled(pCreateInfo->usage, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT) ||
- mvkAreFlagsEnabled(mvkVkFormatProperties(pCreateInfo->format).optimalTilingFeatures, VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT));
+ _isDepthStencilAttachment = (mvkAreAllFlagsEnabled(pCreateInfo->usage, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT) ||
+ mvkAreAllFlagsEnabled(mvkVkFormatProperties(pCreateInfo->format).optimalTilingFeatures, VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT));
_canSupportMTLTextureView = !_isDepthStencilAttachment || _device->_pMetalFeatures->stencilViews;
_hasExpectedTexelSize = (mvkMTLPixelFormatBytesPerBlock(_mtlPixelFormat) == mvkVkFormatBytesPerBlock(pCreateInfo->format));
@@ -593,7 +637,7 @@
initSubresources(pCreateInfo);
}
-void MVKImage::validateConfig(const VkImageCreateInfo* pCreateInfo) {
+void MVKImage::validateConfig(const VkImageCreateInfo* pCreateInfo, bool isAttachment) {
bool is2D = pCreateInfo->imageType == VK_IMAGE_TYPE_2D;
bool isCompressed = mvkFormatTypeFromVkFormat(pCreateInfo->format) == kMVKFormatCompressed;
@@ -612,18 +656,18 @@
if ((mvkFormatTypeFromVkFormat(pCreateInfo->format) == kMVKFormatDepthStencil) && !is2D ) {
setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCreateImage() : Under Metal, depth/stencil formats may only be used with 2D images."));
}
-
- bool isAttachment = mvkIsAnyFlagEnabled(pCreateInfo->usage, (VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT));
if (isAttachment && (pCreateInfo->arrayLayers > 1) && !_device->_pMetalFeatures->layeredRendering) {
setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCreateImage() : This device does not support rendering to array (layered) attachments."));
}
-
+ if (isAttachment && (pCreateInfo->imageType == VK_IMAGE_TYPE_1D)) {
+ setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCreateImage() : This device does not support rendering to 1D attachments."));
+ }
if (mvkIsAnyFlagEnabled(pCreateInfo->flags, VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT)) {
setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCreateImage() : Metal does not allow uncompressed views of compressed images."));
}
}
-VkSampleCountFlagBits MVKImage::validateSamples(const VkImageCreateInfo* pCreateInfo) {
+VkSampleCountFlagBits MVKImage::validateSamples(const VkImageCreateInfo* pCreateInfo, bool isAttachment) {
VkSampleCountFlagBits validSamples = pCreateInfo->samples;
@@ -644,8 +688,6 @@
setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCreateImage() : This device does not support multisampled array textures. Setting sample count to 1."));
validSamples = VK_SAMPLE_COUNT_1_BIT;
}
-
- bool isAttachment = mvkIsAnyFlagEnabled(pCreateInfo->usage, (VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT));
if (isAttachment && !_device->_pMetalFeatures->multisampleLayeredRendering) {
setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCreateImage() : This device does not support rendering to multisampled array (layered) attachments. Setting sample count to 1."));
validSamples = VK_SAMPLE_COUNT_1_BIT;
@@ -655,7 +697,7 @@
return validSamples;
}
-uint32_t MVKImage::validateMipLevels(const VkImageCreateInfo* pCreateInfo) {
+uint32_t MVKImage::validateMipLevels(const VkImageCreateInfo* pCreateInfo, bool isAttachment) {
uint32_t minDim = 1;
uint32_t validMipLevels = max(pCreateInfo->mipLevels, minDim);
@@ -669,7 +711,7 @@
return validMipLevels;
}
-bool MVKImage::validateLinear(const VkImageCreateInfo* pCreateInfo) {
+bool MVKImage::validateLinear(const VkImageCreateInfo* pCreateInfo, bool isAttachment) {
if (pCreateInfo->tiling != VK_IMAGE_TILING_LINEAR ) { return false; }
@@ -701,8 +743,8 @@
}
#if MVK_MACOS
- if ( mvkIsAnyFlagEnabled(pCreateInfo->usage, (VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT | VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)) ) {
- setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCreateImage() : If tiling is VK_IMAGE_TILING_LINEAR, usage must not include VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT, or VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT."));
+ if (isAttachment) {
+ setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCreateImage() : This device does not support rendering to linear (VK_IMAGE_TILING_LINEAR) images."));
isLin = false;
}
#endif
@@ -757,6 +799,7 @@
if (_deviceMemory) { _deviceMemory->removeImage(this); }
resetMTLTexture();
resetIOSurface();
+ for (auto elem : _mtlTextureViews) { [elem.second release]; }
}
@@ -890,10 +933,10 @@
if (pCreateInfo->subresourceRange.layerCount != image->_extent.depth) {
reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCreateImageView(): Metal does not fully support views on a subset of a 3D texture.");
}
- if (!mvkAreFlagsEnabled(_usage, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)) {
- setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCreateImageView(): 2D views on 3D images are only supported for color attachments."));
- } else if (mvkIsAnyFlagEnabled(_usage, ~VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)) {
- reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCreateImageView(): 2D views on 3D images are only supported for color attachments.");
+ if ( !mvkIsAnyFlagEnabled(_usage, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) ) {
+ setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCreateImageView(): 2D views on 3D images can only be used as color attachments."));
+ } else if (mvkIsOnlyAnyFlagEnabled(_usage, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)) {
+ reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCreateImageView(): 2D views on 3D images can only be used as color attachments.");
}
}
}
@@ -1043,10 +1086,11 @@
return _requiresConstExprSampler;
}
-// Returns an autoreleased Metal sampler descriptor constructed from the properties of this image.
-MTLSamplerDescriptor* MVKSampler::getMTLSamplerDescriptor(const VkSamplerCreateInfo* pCreateInfo) {
+// Returns an Metal sampler descriptor constructed from the properties of this image.
+// It is the caller's responsibility to release the returned descriptor object.
+MTLSamplerDescriptor* MVKSampler::newMTLSamplerDescriptor(const VkSamplerCreateInfo* pCreateInfo) {
- MTLSamplerDescriptor* mtlSampDesc = [[MTLSamplerDescriptor alloc] init];
+ MTLSamplerDescriptor* mtlSampDesc = [MTLSamplerDescriptor new]; // retained
mtlSampDesc.sAddressMode = mvkMTLSamplerAddressModeFromVkSamplerAddressMode(pCreateInfo->addressModeU);
mtlSampDesc.tAddressMode = mvkMTLSamplerAddressModeFromVkSamplerAddressMode(pCreateInfo->addressModeV);
mtlSampDesc.rAddressMode = mvkMTLSamplerAddressModeFromVkSamplerAddressMode(pCreateInfo->addressModeW);
@@ -1084,12 +1128,16 @@
}
}
#endif
- return [mtlSampDesc autorelease];
+ return mtlSampDesc;
}
MVKSampler::MVKSampler(MVKDevice* device, const VkSamplerCreateInfo* pCreateInfo) : MVKVulkanAPIDeviceObject(device) {
_requiresConstExprSampler = pCreateInfo->compareEnable && !_device->_pMetalFeatures->depthSampleCompare;
- _mtlSamplerState = [getMTLDevice() newSamplerStateWithDescriptor: getMTLSamplerDescriptor(pCreateInfo)];
+
+ MTLSamplerDescriptor* mtlSampDesc = newMTLSamplerDescriptor(pCreateInfo); // temp retain
+ _mtlSamplerState = [getMTLDevice() newSamplerStateWithDescriptor: mtlSampDesc];
+ [mtlSampDesc release]; // temp release
+
initConstExprSampler(pCreateInfo);
}
@@ -1323,7 +1371,12 @@
// Signal the semaphore device-side.
_availabilitySignalers.front().first->encodeSignal(mtlCmdBuff);
}
- [mtlCmdBuff addCompletedHandler: ^(id<MTLCommandBuffer> mcb) { makeAvailable(); }];
+
+ retain(); // Ensure this image is not destroyed while awaiting MTLCommandBuffer completion
+ [mtlCmdBuff addCompletedHandler: ^(id<MTLCommandBuffer> mcb) {
+ makeAvailable();
+ release();
+ }];
} else {
[mtlDrawable present];
resetMetalSurface();
@@ -1356,7 +1409,6 @@
_availability.isAvailable = true;
_preSignaled = make_pair(nullptr, nullptr);
_mtlDrawable = nil;
- _canSupportMTLTextureView = false; // Override...swapchains never support Metal image view.
}
MVKSwapchainImage::~MVKSwapchainImage() {
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKInstance.h b/MoltenVK/MoltenVK/GPUObjects/MVKInstance.h
index e0a355d..5771fe6 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKInstance.h
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKInstance.h
@@ -85,9 +85,26 @@
*/
VkResult getPhysicalDevices(uint32_t* pCount, VkPhysicalDevice* pPhysicalDevices);
+ /**
+ * If pPhysicalDeviceGroups is null, the value of pCount is updated with the number of
+ * physical device groups supported by this instance.
+ *
+ * If pPhysicalDeviceGroups is not null, then pCount physical device groups are copied into the array.
+ * If the number of available physical device groups is less than pCount, the value of pCount is
+ * updated to indicate the number of physical device groups actually returned in the array.
+ *
+ * Returns VK_SUCCESS if successful. Returns VK_INCOMPLETE if the number of physical
+ * device groups available in this instance is larger than the specified pCount. Returns other
+ * values if an error occurs.
+ */
+ VkResult getPhysicalDeviceGroups(uint32_t* pCount, VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProps);
+
/** Returns the driver layer. */
MVKLayer* getDriverLayer() { return MVKLayerManager::globalManager()->getDriverLayer(); }
+ MVKSurface* createSurface(const VkMetalSurfaceCreateInfoEXT* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator);
+
MVKSurface* createSurface(const Vk_PLATFORM_SurfaceCreateInfoMVK* pCreateInfo,
const VkAllocationCallbacks* pAllocator);
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKInstance.mm b/MoltenVK/MoltenVK/GPUObjects/MVKInstance.mm
index 1958eb0..ce9fa40 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKInstance.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKInstance.mm
@@ -70,6 +70,41 @@
return result;
}
+VkResult MVKInstance::getPhysicalDeviceGroups(uint32_t* pCount, VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProps) {
+
+ // According to the Vulkan spec:
+ // "Every physical device *must* be in exactly one device group."
+ // Since we don't really support this yet, we must return one group for every
+ // device.
+
+ // Get the number of physical devices
+ uint32_t pdCnt = (uint32_t)_physicalDevices.size();
+
+ // If properties aren't actually being requested yet, simply update the returned count
+ if ( !pPhysicalDeviceGroupProps ) {
+ *pCount = pdCnt;
+ return VK_SUCCESS;
+ }
+
+ // Othewise, determine how many physical device groups we'll return, and return that count
+ VkResult result = (*pCount >= pdCnt) ? VK_SUCCESS : VK_INCOMPLETE;
+ *pCount = min(pdCnt, *pCount);
+
+ // Now populate the device groups
+ for (uint32_t pdIdx = 0; pdIdx < *pCount; pdIdx++) {
+ pPhysicalDeviceGroupProps[pdIdx].physicalDeviceCount = 1;
+ pPhysicalDeviceGroupProps[pdIdx].physicalDevices[0] = _physicalDevices[pdIdx]->getVkPhysicalDevice();
+ pPhysicalDeviceGroupProps[pdIdx].subsetAllocation = VK_FALSE;
+ }
+
+ return result;
+}
+
+MVKSurface* MVKInstance::createSurface(const VkMetalSurfaceCreateInfoEXT* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator) {
+ return new MVKSurface(this, pCreateInfo, pAllocator);
+}
+
MVKSurface* MVKInstance::createSurface(const Vk_PLATFORM_SurfaceCreateInfoMVK* pCreateInfo,
const VkAllocationCallbacks* pAllocator) {
return new MVKSurface(this, pCreateInfo, pAllocator);
@@ -247,28 +282,28 @@
#pragma mark Object Creation
-// Returns an autoreleased array containing the MTLDevices available on this system,
-// sorted according to power, with higher power GPU's at the front of the array.
-// This ensures that a lazy app that simply grabs the first GPU will get a high-power
-// one by default. If the MVK_CONFIG_FORCE_LOW_POWER_GPU env var or build setting is set,
-// the returned array will only include low-power devices.
-// If Metal is not supported, ensure we return an empty array.
-static NSArray<id<MTLDevice>>* getAvailableMTLDevices() {
+// Returns a new array containing the MTLDevices available on this system, sorted according to power,
+// with higher power GPU's at the front of the array. This ensures that a lazy app that simply
+// grabs the first GPU will get a high-power one by default. If the MVK_CONFIG_FORCE_LOW_POWER_GPU
+// env var or build setting is set, the returned array will only include low-power devices.
+// It is the caller's responsibility to release the array when not required anymore.
+// If Metal is not supported, returns an empty array.
+static NSArray<id<MTLDevice>>* newAvailableMTLDevicesArray() {
+ NSMutableArray* mtlDevs = [NSMutableArray new];
+
#if MVK_MACOS
- NSArray* mtlDevs = [MTLCopyAllDevices() autorelease];
- if ( !mtlDevs ) { return @[]; }
+ NSArray* rawMTLDevs = MTLCopyAllDevices(); // temp retain
+ if (rawMTLDevs) {
+ bool forceLowPower = MVK_CONFIG_FORCE_LOW_POWER_GPU;
+ MVK_SET_FROM_ENV_OR_BUILD_BOOL(forceLowPower, MVK_CONFIG_FORCE_LOW_POWER_GPU);
- bool forceLowPower = MVK_CONFIG_FORCE_LOW_POWER_GPU;
- MVK_SET_FROM_ENV_OR_BUILD_BOOL(forceLowPower, MVK_CONFIG_FORCE_LOW_POWER_GPU);
-
- if (forceLowPower) {
- NSMutableArray* lpDevs = [[NSMutableArray new] autorelease];
- for (id<MTLDevice> md in mtlDevs) {
- if (md.isLowPower) { [lpDevs addObject: md]; }
+ // Populate the array of appropriate MTLDevices
+ for (id<MTLDevice> md in rawMTLDevs) {
+ if ( !forceLowPower || md.isLowPower ) { [mtlDevs addObject: md]; }
}
- return lpDevs;
- } else {
- return [mtlDevs sortedArrayUsingComparator: ^(id<MTLDevice> md1, id<MTLDevice> md2) {
+
+ // Sort by power
+ [mtlDevs sortUsingComparator: ^(id<MTLDevice> md1, id<MTLDevice> md2) {
BOOL md1IsLP = md1.isLowPower;
BOOL md2IsLP = md2.isLowPower;
@@ -285,14 +320,18 @@
return md2IsLP ? NSOrderedAscending : NSOrderedDescending;
}];
- }
+ }
+ [rawMTLDevs release]; // release temp
#endif // MVK_MACOS
#if MVK_IOS
- id<MTLDevice> mtlDev = MTLCreateSystemDefaultDevice();
- return mtlDev ? [NSArray arrayWithObject: mtlDev] : @[];
+ id<MTLDevice> md = MTLCreateSystemDefaultDevice();
+ if (md) { [mtlDevs addObject: md]; }
+ [md release];
#endif // MVK_IOS
+
+ return mtlDevs; // retained
}
MVKInstance::MVKInstance(const VkInstanceCreateInfo* pCreateInfo) : _enabledExtensions(this) {
@@ -321,11 +360,13 @@
}
// Populate the array of physical GPU devices
- NSArray<id<MTLDevice>>* mtlDevices = getAvailableMTLDevices();
+ NSArray<id<MTLDevice>>* mtlDevices = newAvailableMTLDevicesArray(); // temp retain
_physicalDevices.reserve(mtlDevices.count);
for (id<MTLDevice> mtlDev in mtlDevices) {
_physicalDevices.push_back(new MVKPhysicalDevice(this, mtlDev));
}
+ [mtlDevices release]; // release temp
+
if (_physicalDevices.empty()) {
setConfigurationResult(reportError(VK_ERROR_INCOMPATIBLE_DRIVER, "Vulkan is not supported on this device. MoltenVK requires Metal, which is not available on this device."));
}
@@ -512,6 +553,7 @@
ADD_DVC_ENTRY_POINT(vkCmdExecuteCommands);
// Instance extension functions:
+ ADD_INST_EXT_ENTRY_POINT(vkEnumeratePhysicalDeviceGroupsKHR, KHR_DEVICE_GROUP_CREATION);
ADD_INST_EXT_ENTRY_POINT(vkGetPhysicalDeviceFeatures2KHR, KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2);
ADD_INST_EXT_ENTRY_POINT(vkGetPhysicalDeviceProperties2KHR, KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2);
ADD_INST_EXT_ENTRY_POINT(vkGetPhysicalDeviceFormatProperties2KHR, KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2);
@@ -540,6 +582,7 @@
ADD_INST_EXT_ENTRY_POINT(vkCreateDebugUtilsMessengerEXT, EXT_DEBUG_UTILS);
ADD_INST_EXT_ENTRY_POINT(vkDestroyDebugUtilsMessengerEXT, EXT_DEBUG_UTILS);
ADD_INST_EXT_ENTRY_POINT(vkSubmitDebugUtilsMessageEXT, EXT_DEBUG_UTILS);
+ ADD_INST_EXT_ENTRY_POINT(vkCreateMetalSurfaceEXT, EXT_METAL_SURFACE);
#ifdef VK_USE_PLATFORM_IOS_MVK
ADD_INST_EXT_ENTRY_POINT(vkCreateIOSSurfaceMVK, MVK_IOS_SURFACE);
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKPipeline.h b/MoltenVK/MoltenVK/GPUObjects/MVKPipeline.h
index ebbaa35..99bb888 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKPipeline.h
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKPipeline.h
@@ -58,9 +58,6 @@
uint32_t firstSet,
MVKVector<uint32_t>& dynamicOffsets);
- /** Populates the specified shader converter context. */
- void populateShaderConverterContext(SPIRVToMSLConverterContext& context);
-
/** Updates a descriptor set in a command encoder. */
void pushDescriptorSet(MVKCommandEncoder* cmdEncoder,
MVKVector<VkWriteDescriptorSet>& descriptorWrites,
@@ -72,6 +69,9 @@
uint32_t set,
const void* pData);
+ /** Populates the specified shader converter context. */
+ void populateShaderConverterContext(SPIRVToMSLConversionConfiguration& context);
+
/** Returns the current swizzle buffer bindings. */
const MVKShaderImplicitRezBinding& getSwizzleBufferIndex() { return _swizzleBufferIndex; }
@@ -96,6 +96,9 @@
/** Returns the number of buffers in this layout. This is used to calculate the size of the buffer size buffer. */
uint32_t getBufferCount() { return _pushConstantsMTLResourceIndexes.getMaxBufferIndex(); }
+ /** Returns the push constant binding info. */
+ const MVKShaderResourceBinding& getPushConstantBindings() { return _pushConstantsMTLResourceIndexes; }
+
/** Constructs an instance for the specified device. */
MVKPipelineLayout(MVKDevice* device, const VkPipelineLayoutCreateInfo* pCreateInfo);
@@ -144,6 +147,9 @@
/** Binds this pipeline to the specified command encoder. */
virtual void encode(MVKCommandEncoder* cmdEncoder, uint32_t stage = 0) = 0;
+ /** Binds the push constants to a command encoder. */
+ void bindPushConstants(MVKCommandEncoder* cmdEncoder);
+
/** Returns the current swizzle buffer bindings. */
const MVKShaderImplicitRezBinding& getSwizzleBufferIndex() { return _swizzleBufferIndex; }
@@ -157,9 +163,7 @@
bool hasValidMTLPipelineStates() { return _hasValidMTLPipelineStates; }
/** Constructs an instance for the device. layout, and parent (which may be NULL). */
- MVKPipeline(MVKDevice* device, MVKPipelineCache* pipelineCache, MVKPipeline* parent) : MVKVulkanAPIDeviceObject(device),
- _pipelineCache(pipelineCache),
- _fullImageViewSwizzle(device->_pMVKConfig->fullImageViewSwizzle) {}
+ MVKPipeline(MVKDevice* device, MVKPipelineCache* pipelineCache, MVKPipelineLayout* layout, MVKPipeline* parent);
protected:
void propogateDebugName() override {}
@@ -167,6 +171,7 @@
MVKPipelineCache* _pipelineCache;
MVKShaderImplicitRezBinding _swizzleBufferIndex;
MVKShaderImplicitRezBinding _bufferSizeBufferIndex;
+ MVKShaderResourceBinding _pushConstantsMTLResourceIndexes;
bool _fullImageViewSwizzle;
bool _hasValidMTLPipelineStates = true;
@@ -232,22 +237,18 @@
id<MTLRenderPipelineState> getOrCompilePipeline(MTLRenderPipelineDescriptor* plDesc, id<MTLRenderPipelineState>& plState);
id<MTLComputePipelineState> getOrCompilePipeline(MTLComputePipelineDescriptor* plDesc, id<MTLComputePipelineState>& plState, const char* compilerType);
void initMTLRenderPipelineState(const VkGraphicsPipelineCreateInfo* pCreateInfo, const SPIRVTessReflectionData& reflectData);
- void initMVKShaderConverterContext(SPIRVToMSLConverterContext& _shaderContext,
- const VkGraphicsPipelineCreateInfo* pCreateInfo,
- const SPIRVTessReflectionData& reflectData);
- void addVertexInputToShaderConverterContext(SPIRVToMSLConverterContext& shaderContext,
- const VkGraphicsPipelineCreateInfo* pCreateInfo);
- void addPrevStageOutputToShaderConverterContext(SPIRVToMSLConverterContext& shaderContext,
- std::vector<SPIRVShaderOutput>& outputs);
- MTLRenderPipelineDescriptor* getMTLRenderPipelineDescriptor(const VkGraphicsPipelineCreateInfo* pCreateInfo, const SPIRVTessReflectionData& reflectData);
- MTLRenderPipelineDescriptor* getMTLTessVertexStageDescriptor(const VkGraphicsPipelineCreateInfo* pCreateInfo, const SPIRVTessReflectionData& reflectData, SPIRVToMSLConverterContext& shaderContext);
- MTLComputePipelineDescriptor* getMTLTessControlStageDescriptor(const VkGraphicsPipelineCreateInfo* pCreateInfo, const SPIRVTessReflectionData& reflectData, SPIRVToMSLConverterContext& shaderContext);
- MTLRenderPipelineDescriptor* getMTLTessRasterStageDescriptor(const VkGraphicsPipelineCreateInfo* pCreateInfo, const SPIRVTessReflectionData& reflectData, SPIRVToMSLConverterContext& shaderContext);
- bool addVertexShaderToPipeline(MTLRenderPipelineDescriptor* plDesc, const VkGraphicsPipelineCreateInfo* pCreateInfo, SPIRVToMSLConverterContext& shaderContext);
- bool addTessCtlShaderToPipeline(MTLComputePipelineDescriptor* plDesc, const VkGraphicsPipelineCreateInfo* pCreateInfo, SPIRVToMSLConverterContext& shaderContext, std::vector<SPIRVShaderOutput>& prevOutput);
- bool addTessEvalShaderToPipeline(MTLRenderPipelineDescriptor* plDesc, const VkGraphicsPipelineCreateInfo* pCreateInfo, SPIRVToMSLConverterContext& shaderContext, std::vector<SPIRVShaderOutput>& prevOutput);
- bool addFragmentShaderToPipeline(MTLRenderPipelineDescriptor* plDesc, const VkGraphicsPipelineCreateInfo* pCreateInfo, SPIRVToMSLConverterContext& shaderContext);
- bool addVertexInputToPipeline(MTLRenderPipelineDescriptor* plDesc, const VkPipelineVertexInputStateCreateInfo* pVI, const SPIRVToMSLConverterContext& shaderContext);
+ void initMVKShaderConverterContext(SPIRVToMSLConversionConfiguration& _shaderContext, const VkGraphicsPipelineCreateInfo* pCreateInfo, const SPIRVTessReflectionData& reflectData);
+ void addVertexInputToShaderConverterContext(SPIRVToMSLConversionConfiguration& shaderContext, const VkGraphicsPipelineCreateInfo* pCreateInfo);
+ void addPrevStageOutputToShaderConverterContext(SPIRVToMSLConversionConfiguration& shaderContext, std::vector<SPIRVShaderOutput>& outputs);
+ MTLRenderPipelineDescriptor* newMTLRenderPipelineDescriptor(const VkGraphicsPipelineCreateInfo* pCreateInfo, const SPIRVTessReflectionData& reflectData);
+ MTLRenderPipelineDescriptor* newMTLTessVertexStageDescriptor(const VkGraphicsPipelineCreateInfo* pCreateInfo, const SPIRVTessReflectionData& reflectData, SPIRVToMSLConversionConfiguration& shaderContext);
+ MTLComputePipelineDescriptor* newMTLTessControlStageDescriptor(const VkGraphicsPipelineCreateInfo* pCreateInfo, const SPIRVTessReflectionData& reflectData, SPIRVToMSLConversionConfiguration& shaderContext);
+ MTLRenderPipelineDescriptor* newMTLTessRasterStageDescriptor(const VkGraphicsPipelineCreateInfo* pCreateInfo, const SPIRVTessReflectionData& reflectData, SPIRVToMSLConversionConfiguration& shaderContext);
+ bool addVertexShaderToPipeline(MTLRenderPipelineDescriptor* plDesc, const VkGraphicsPipelineCreateInfo* pCreateInfo, SPIRVToMSLConversionConfiguration& shaderContext);
+ bool addTessCtlShaderToPipeline(MTLComputePipelineDescriptor* plDesc, const VkGraphicsPipelineCreateInfo* pCreateInfo, SPIRVToMSLConversionConfiguration& shaderContext, std::vector<SPIRVShaderOutput>& prevOutput);
+ bool addTessEvalShaderToPipeline(MTLRenderPipelineDescriptor* plDesc, const VkGraphicsPipelineCreateInfo* pCreateInfo, SPIRVToMSLConversionConfiguration& shaderContext, std::vector<SPIRVShaderOutput>& prevOutput);
+ bool addFragmentShaderToPipeline(MTLRenderPipelineDescriptor* plDesc, const VkGraphicsPipelineCreateInfo* pCreateInfo, SPIRVToMSLConversionConfiguration& shaderContext);
+ bool addVertexInputToPipeline(MTLRenderPipelineDescriptor* plDesc, const VkPipelineVertexInputStateCreateInfo* pVI, const SPIRVToMSLConversionConfiguration& shaderContext);
void addTessellationToPipeline(MTLRenderPipelineDescriptor* plDesc, const SPIRVTessReflectionData& reflectData, const VkPipelineTessellationStateCreateInfo* pTS);
void addFragmentOutputToPipeline(MTLRenderPipelineDescriptor* plDesc, const SPIRVTessReflectionData& reflectData, const VkGraphicsPipelineCreateInfo* pCreateInfo, bool isTessellationVertexPipeline = false);
bool isRenderingPoints(const VkGraphicsPipelineCreateInfo* pCreateInfo, const SPIRVTessReflectionData& reflectData);
@@ -356,7 +357,7 @@
VkResult writeData(size_t* pDataSize, void* pData);
/** Return a shader library from the specified shader context sourced from the specified shader module. */
- MVKShaderLibrary* getShaderLibrary(SPIRVToMSLConverterContext* pContext, MVKShaderModule* shaderModule);
+ MVKShaderLibrary* getShaderLibrary(SPIRVToMSLConversionConfiguration* pContext, MVKShaderModule* shaderModule);
/** Merges the contents of the specified number of pipeline caches into this cache. */
VkResult mergePipelineCaches(uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches);
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKPipeline.mm b/MoltenVK/MoltenVK/GPUObjects/MVKPipeline.mm
index 5d31a12..c21340d 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKPipeline.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKPipeline.mm
@@ -53,11 +53,6 @@
dynamicOffsets, &pDynamicOffsetIndex);
setConfigurationResult(dsl.getConfigurationResult());
}
- if (cmdEncoder) {
- for (uint32_t i = kMVKShaderStageVertex; i < kMVKShaderStageMax; i++) {
- cmdEncoder->getPushConstants(mvkVkShaderStageFlagBitsFromMVKShaderStage(MVKShaderStage(i)))->setMTLBufferIndex(_pushConstantsMTLResourceIndexes.stages[i].bufferIndex);
- }
- }
}
// A null cmdEncoder can be passed to perform a validation pass
@@ -68,12 +63,6 @@
auto& dsl = _descriptorSetLayouts[set];
dsl.pushDescriptorSet(cmdEncoder, descriptorWrites, _dslMTLResourceIndexOffsets[set]);
setConfigurationResult(dsl.getConfigurationResult());
-
- if (cmdEncoder) {
- for (uint32_t i = kMVKShaderStageVertex; i < kMVKShaderStageMax; i++) {
- cmdEncoder->getPushConstants(mvkVkShaderStageFlagBitsFromMVKShaderStage(MVKShaderStage(i)))->setMTLBufferIndex(_pushConstantsMTLResourceIndexes.stages[i].bufferIndex);
- }
- }
}
// A null cmdEncoder can be passed to perform a validation pass
@@ -85,15 +74,9 @@
auto& dsl = _descriptorSetLayouts[set];
dsl.pushDescriptorSet(cmdEncoder, descUpdateTemplate, pData, _dslMTLResourceIndexOffsets[set]);
setConfigurationResult(dsl.getConfigurationResult());
-
- if (cmdEncoder) {
- for (uint32_t i = kMVKShaderStageVertex; i < kMVKShaderStageMax; i++) {
- cmdEncoder->getPushConstants(mvkVkShaderStageFlagBitsFromMVKShaderStage(MVKShaderStage(i)))->setMTLBufferIndex(_pushConstantsMTLResourceIndexes.stages[i].bufferIndex);
- }
- }
}
-void MVKPipelineLayout::populateShaderConverterContext(SPIRVToMSLConverterContext& context) {
+void MVKPipelineLayout::populateShaderConverterContext(SPIRVToMSLConversionConfiguration& context) {
context.resourceBindings.clear();
// Add resource bindings defined in the descriptor set layouts
@@ -169,6 +152,24 @@
#pragma mark -
+#pragma mark MVKPipeline
+
+void MVKPipeline::bindPushConstants(MVKCommandEncoder* cmdEncoder) {
+ if (cmdEncoder) {
+ for (uint32_t i = kMVKShaderStageVertex; i < kMVKShaderStageMax; i++) {
+ cmdEncoder->getPushConstants(mvkVkShaderStageFlagBitsFromMVKShaderStage(MVKShaderStage(i)))->setMTLBufferIndex(_pushConstantsMTLResourceIndexes.stages[i].bufferIndex);
+ }
+ }
+}
+
+MVKPipeline::MVKPipeline(MVKDevice* device, MVKPipelineCache* pipelineCache, MVKPipelineLayout* layout, MVKPipeline* parent) :
+ MVKVulkanAPIDeviceObject(device),
+ _pipelineCache(pipelineCache),
+ _pushConstantsMTLResourceIndexes(layout->getPushConstantBindings()),
+ _fullImageViewSwizzle(device->_pMVKConfig->fullImageViewSwizzle) {}
+
+
+#pragma mark -
#pragma mark MVKGraphicsPipeline
void MVKGraphicsPipeline::getStages(MVKVector<uint32_t>& stages) {
@@ -205,7 +206,7 @@
id<MTLComputePipelineState> plState;
const char* compilerType = "Tessellation control stage pipeline";
const MVKIndexMTLBufferBinding& indexBuff = cmdEncoder->_graphicsResourcesState._mtlIndexBufferBinding;
- MTLComputePipelineDescriptor* plDesc = [[_mtlTessControlStageDesc copy] autorelease]; // Use a copy to be thread-safe.
+ MTLComputePipelineDescriptor* plDesc = [_mtlTessControlStageDesc copy]; // temp retain a copy to be thread-safe.
if (!indexBuff.mtlBuffer && getInputControlPointCount() >= getOutputControlPointCount()) {
plState = getOrCompilePipeline(plDesc, _mtlTessControlStageState, compilerType);
} else if (indexBuff.mtlIndexType == MTLIndexTypeUInt16) {
@@ -217,6 +218,8 @@
plDesc.stageInputDescriptor.layouts[kMVKTessCtlInputBufferIndex].stepFunction = MTLStepFunctionThreadPositionInGridXIndexed;
plState = getOrCompilePipeline(plDesc, _mtlTessControlStageIndex32State, compilerType);
}
+ [plDesc release]; // temp release
+
if ( !_hasValidMTLPipelineStates ) { return; }
id<MTLComputeCommandEncoder> tessCtlEnc = cmdEncoder->getMTLComputeEncoder(kMVKCommandUseTessellationControl);
@@ -285,7 +288,8 @@
MVKGraphicsPipeline::MVKGraphicsPipeline(MVKDevice* device,
MVKPipelineCache* pipelineCache,
MVKPipeline* parent,
- const VkGraphicsPipelineCreateInfo* pCreateInfo) : MVKPipeline(device, pipelineCache, parent) {
+ const VkGraphicsPipelineCreateInfo* pCreateInfo) :
+ MVKPipeline(device, pipelineCache, (MVKPipelineLayout*)pCreateInfo->layout, parent) {
// Get the tessellation shaders, if present. Do this now, because we need to extract
// reflection data from them that informs everything else.
@@ -424,33 +428,39 @@
_mtlPipelineState = nil;
_mtlTessControlStageDesc = nil;
if (!isTessellationPipeline()) {
- MTLRenderPipelineDescriptor* plDesc = getMTLRenderPipelineDescriptor(pCreateInfo, reflectData);
+ MTLRenderPipelineDescriptor* plDesc = newMTLRenderPipelineDescriptor(pCreateInfo, reflectData); // temp retain
if (plDesc) {
getOrCompilePipeline(plDesc, _mtlPipelineState);
}
+ [plDesc release]; // temp release
} else {
// In this case, we need to create three render pipelines. But, the way Metal handles
// index buffers for compute stage-in means we have to defer creation of stage 2 until
// draw time. In the meantime, we'll create and retain a descriptor for it.
- SPIRVToMSLConverterContext shaderContext;
+ SPIRVToMSLConversionConfiguration shaderContext;
initMVKShaderConverterContext(shaderContext, pCreateInfo, reflectData);
- MTLRenderPipelineDescriptor* vtxPLDesc = getMTLTessVertexStageDescriptor(pCreateInfo, reflectData, shaderContext);
- _mtlTessControlStageDesc = getMTLTessControlStageDescriptor(pCreateInfo, reflectData, shaderContext); // retained
- MTLRenderPipelineDescriptor* rastPLDesc = getMTLTessRasterStageDescriptor(pCreateInfo, reflectData, shaderContext);
+
+ MTLRenderPipelineDescriptor* vtxPLDesc = newMTLTessVertexStageDescriptor(pCreateInfo, reflectData, shaderContext); // temp retain
+ _mtlTessControlStageDesc = newMTLTessControlStageDescriptor(pCreateInfo, reflectData, shaderContext); // retained
+ MTLRenderPipelineDescriptor* rastPLDesc = newMTLTessRasterStageDescriptor(pCreateInfo, reflectData, shaderContext); // temp retained
if (vtxPLDesc && _mtlTessControlStageDesc && rastPLDesc) {
if (getOrCompilePipeline(vtxPLDesc, _mtlTessVertexStageState)) {
getOrCompilePipeline(rastPLDesc, _mtlPipelineState);
}
}
+ [vtxPLDesc release]; // temp release
+ [rastPLDesc release]; // temp release
}
}
-// Returns a MTLRenderPipelineDescriptor constructed from this instance, or nil if an error occurs.
-MTLRenderPipelineDescriptor* MVKGraphicsPipeline::getMTLRenderPipelineDescriptor(const VkGraphicsPipelineCreateInfo* pCreateInfo, const SPIRVTessReflectionData& reflectData) {
- SPIRVToMSLConverterContext shaderContext;
+// Returns a retained MTLRenderPipelineDescriptor constructed from this instance, or nil if an error occurs.
+// It is the responsibility of the caller to release the returned descriptor.
+MTLRenderPipelineDescriptor* MVKGraphicsPipeline::newMTLRenderPipelineDescriptor(const VkGraphicsPipelineCreateInfo* pCreateInfo,
+ const SPIRVTessReflectionData& reflectData) {
+ SPIRVToMSLConversionConfiguration shaderContext;
initMVKShaderConverterContext(shaderContext, pCreateInfo, reflectData);
- MTLRenderPipelineDescriptor* plDesc = [[MTLRenderPipelineDescriptor new] autorelease];
+ MTLRenderPipelineDescriptor* plDesc = [MTLRenderPipelineDescriptor new]; // retained
// Add shader stages. Compile vertex shader before others just in case conversion changes anything...like rasterizaion disable.
if (!addVertexShaderToPipeline(plDesc, pCreateInfo, shaderContext)) { return nil; }
@@ -472,9 +482,12 @@
return plDesc;
}
-// Returns a MTLRenderPipelineDescriptor for the vertex stage of a tessellated draw constructed from this instance, or nil if an error occurs.
-MTLRenderPipelineDescriptor* MVKGraphicsPipeline::getMTLTessVertexStageDescriptor(const VkGraphicsPipelineCreateInfo* pCreateInfo, const SPIRVTessReflectionData& reflectData, SPIRVToMSLConverterContext& shaderContext) {
- MTLRenderPipelineDescriptor* plDesc = [[MTLRenderPipelineDescriptor new] autorelease];
+// Returns a retained MTLRenderPipelineDescriptor for the vertex stage of a tessellated draw constructed from this instance, or nil if an error occurs.
+// It is the responsibility of the caller to release the returned descriptor.
+MTLRenderPipelineDescriptor* MVKGraphicsPipeline::newMTLTessVertexStageDescriptor(const VkGraphicsPipelineCreateInfo* pCreateInfo,
+ const SPIRVTessReflectionData& reflectData,
+ SPIRVToMSLConversionConfiguration& shaderContext) {
+ MTLRenderPipelineDescriptor* plDesc = [MTLRenderPipelineDescriptor new]; // retained
// Add shader stages.
if (!addVertexShaderToPipeline(plDesc, pCreateInfo, shaderContext)) { return nil; }
@@ -581,9 +594,12 @@
return VK_FORMAT_UNDEFINED;
}
-// Returns a MTLComputePipelineDescriptor for the tess. control stage of a tessellated draw constructed from this instance, or nil if an error occurs.
-MTLComputePipelineDescriptor* MVKGraphicsPipeline::getMTLTessControlStageDescriptor(const VkGraphicsPipelineCreateInfo* pCreateInfo, const SPIRVTessReflectionData& reflectData, SPIRVToMSLConverterContext& shaderContext) {
- MTLComputePipelineDescriptor* plDesc = [MTLComputePipelineDescriptor new];
+// Returns a retained MTLComputePipelineDescriptor for the tess. control stage of a tessellated draw constructed from this instance, or nil if an error occurs.
+// It is the responsibility of the caller to release the returned descriptor.
+MTLComputePipelineDescriptor* MVKGraphicsPipeline::newMTLTessControlStageDescriptor(const VkGraphicsPipelineCreateInfo* pCreateInfo,
+ const SPIRVTessReflectionData& reflectData,
+ SPIRVToMSLConversionConfiguration& shaderContext) {
+ MTLComputePipelineDescriptor* plDesc = [MTLComputePipelineDescriptor new]; // retained
std::vector<SPIRVShaderOutput> vtxOutputs;
std::string errorLog;
@@ -626,9 +642,12 @@
return plDesc;
}
-// Returns a MTLRenderPipelineDescriptor for the last stage of a tessellated draw constructed from this instance, or nil if an error occurs.
-MTLRenderPipelineDescriptor* MVKGraphicsPipeline::getMTLTessRasterStageDescriptor(const VkGraphicsPipelineCreateInfo* pCreateInfo, const SPIRVTessReflectionData& reflectData, SPIRVToMSLConverterContext& shaderContext) {
- MTLRenderPipelineDescriptor* plDesc = [[MTLRenderPipelineDescriptor new] autorelease];
+// Returns a retained MTLRenderPipelineDescriptor for the last stage of a tessellated draw constructed from this instance, or nil if an error occurs.
+// It is the responsibility of the caller to release the returned descriptor.
+MTLRenderPipelineDescriptor* MVKGraphicsPipeline::newMTLTessRasterStageDescriptor(const VkGraphicsPipelineCreateInfo* pCreateInfo,
+ const SPIRVTessReflectionData& reflectData,
+ SPIRVToMSLConversionConfiguration& shaderContext) {
+ MTLRenderPipelineDescriptor* plDesc = [MTLRenderPipelineDescriptor new]; // retained
std::vector<SPIRVShaderOutput> tcOutputs;
std::string errorLog;
@@ -750,7 +769,9 @@
}
// Adds a vertex shader to the pipeline description.
-bool MVKGraphicsPipeline::addVertexShaderToPipeline(MTLRenderPipelineDescriptor* plDesc, const VkGraphicsPipelineCreateInfo* pCreateInfo, SPIRVToMSLConverterContext& shaderContext) {
+bool MVKGraphicsPipeline::addVertexShaderToPipeline(MTLRenderPipelineDescriptor* plDesc,
+ const VkGraphicsPipelineCreateInfo* pCreateInfo,
+ SPIRVToMSLConversionConfiguration& shaderContext) {
uint32_t vbCnt = pCreateInfo->pVertexInputState->vertexBindingDescriptionCount;
shaderContext.options.entryPointStage = spv::ExecutionModelVertex;
shaderContext.options.entryPointName = _pVertexSS->pName;
@@ -761,16 +782,21 @@
shaderContext.options.mslOptions.capture_output_to_buffer = isTessellationPipeline();
shaderContext.options.mslOptions.disable_rasterization = isTessellationPipeline() || (pCreateInfo->pRasterizationState && (pCreateInfo->pRasterizationState->rasterizerDiscardEnable));
addVertexInputToShaderConverterContext(shaderContext, pCreateInfo);
- id<MTLFunction> mtlFunction = ((MVKShaderModule*)_pVertexSS->module)->getMTLFunction(&shaderContext, _pVertexSS->pSpecializationInfo, _pipelineCache).mtlFunction;
- if ( !mtlFunction ) {
+
+ MVKMTLFunction func = ((MVKShaderModule*)_pVertexSS->module)->getMTLFunction(&shaderContext, _pVertexSS->pSpecializationInfo, _pipelineCache);
+ id<MTLFunction> mtlFunc = func.getMTLFunction();
+ if ( !mtlFunc ) {
setConfigurationResult(reportError(VK_ERROR_INVALID_SHADER_NV, "Vertex shader function could not be compiled into pipeline. See previous logged error."));
return false;
}
- plDesc.vertexFunction = mtlFunction;
- plDesc.rasterizationEnabled = !shaderContext.options.mslOptions.disable_rasterization;
- _needsVertexSwizzleBuffer = shaderContext.options.needsSwizzleBuffer;
- _needsVertexBufferSizeBuffer = shaderContext.options.needsBufferSizeBuffer;
- _needsVertexOutputBuffer = shaderContext.options.needsOutputBuffer;
+ plDesc.vertexFunction = mtlFunc;
+
+ auto& funcRslts = func.shaderConversionResults;
+ plDesc.rasterizationEnabled = !funcRslts.isRasterizationDisabled;
+ _needsVertexSwizzleBuffer = funcRslts.needsSwizzleBuffer;
+ _needsVertexBufferSizeBuffer = funcRslts.needsBufferSizeBuffer;
+ _needsVertexOutputBuffer = funcRslts.needsOutputBuffer;
+
// If we need the swizzle buffer and there's no place to put it, we're in serious trouble.
if (!verifyImplicitBuffer(_needsVertexSwizzleBuffer, _swizzleBufferIndex, kMVKShaderStageVertex, "swizzle", vbCnt)) {
return false;
@@ -791,7 +817,7 @@
bool MVKGraphicsPipeline::addTessCtlShaderToPipeline(MTLComputePipelineDescriptor* plDesc,
const VkGraphicsPipelineCreateInfo* pCreateInfo,
- SPIRVToMSLConverterContext& shaderContext,
+ SPIRVToMSLConversionConfiguration& shaderContext,
std::vector<SPIRVShaderOutput>& vtxOutputs) {
shaderContext.options.entryPointStage = spv::ExecutionModelTessellationControl;
shaderContext.options.entryPointName = _pTessCtlSS->pName;
@@ -803,17 +829,22 @@
shaderContext.options.mslOptions.buffer_size_buffer_index = _bufferSizeBufferIndex.stages[kMVKShaderStageTessCtl];
shaderContext.options.mslOptions.capture_output_to_buffer = true;
addPrevStageOutputToShaderConverterContext(shaderContext, vtxOutputs);
- id<MTLFunction> mtlFunction = ((MVKShaderModule*)_pTessCtlSS->module)->getMTLFunction(&shaderContext, _pTessCtlSS->pSpecializationInfo, _pipelineCache).mtlFunction;
- if ( !mtlFunction ) {
+
+ MVKMTLFunction func = ((MVKShaderModule*)_pTessCtlSS->module)->getMTLFunction(&shaderContext, _pTessCtlSS->pSpecializationInfo, _pipelineCache);
+ id<MTLFunction> mtlFunc = func.getMTLFunction();
+ if ( !mtlFunc ) {
setConfigurationResult(reportError(VK_ERROR_INVALID_SHADER_NV, "Tessellation control shader function could not be compiled into pipeline. See previous logged error."));
return false;
}
- plDesc.computeFunction = mtlFunction;
- _needsTessCtlSwizzleBuffer = shaderContext.options.needsSwizzleBuffer;
- _needsTessCtlBufferSizeBuffer = shaderContext.options.needsBufferSizeBuffer;
- _needsTessCtlOutputBuffer = shaderContext.options.needsOutputBuffer;
- _needsTessCtlPatchOutputBuffer = shaderContext.options.needsPatchOutputBuffer;
- _needsTessCtlInput = shaderContext.options.needsInputThreadgroupMem;
+ plDesc.computeFunction = mtlFunc;
+
+ auto& funcRslts = func.shaderConversionResults;
+ _needsTessCtlSwizzleBuffer = funcRslts.needsSwizzleBuffer;
+ _needsTessCtlBufferSizeBuffer = funcRslts.needsBufferSizeBuffer;
+ _needsTessCtlOutputBuffer = funcRslts.needsOutputBuffer;
+ _needsTessCtlPatchOutputBuffer = funcRslts.needsPatchOutputBuffer;
+ _needsTessCtlInput = funcRslts.needsInputThreadgroupMem;
+
if (!verifyImplicitBuffer(_needsTessCtlSwizzleBuffer, _swizzleBufferIndex, kMVKShaderStageTessCtl, "swizzle", kMVKTessCtlNumReservedBuffers)) {
return false;
}
@@ -839,7 +870,7 @@
bool MVKGraphicsPipeline::addTessEvalShaderToPipeline(MTLRenderPipelineDescriptor* plDesc,
const VkGraphicsPipelineCreateInfo* pCreateInfo,
- SPIRVToMSLConverterContext& shaderContext,
+ SPIRVToMSLConversionConfiguration& shaderContext,
std::vector<SPIRVShaderOutput>& tcOutputs) {
shaderContext.options.entryPointStage = spv::ExecutionModelTessellationEvaluation;
shaderContext.options.entryPointName = _pTessEvalSS->pName;
@@ -848,16 +879,21 @@
shaderContext.options.mslOptions.capture_output_to_buffer = false;
shaderContext.options.mslOptions.disable_rasterization = (pCreateInfo->pRasterizationState && (pCreateInfo->pRasterizationState->rasterizerDiscardEnable));
addPrevStageOutputToShaderConverterContext(shaderContext, tcOutputs);
- id<MTLFunction> mtlFunction = ((MVKShaderModule*)_pTessEvalSS->module)->getMTLFunction(&shaderContext, _pTessEvalSS->pSpecializationInfo, _pipelineCache).mtlFunction;
- if ( !mtlFunction ) {
+
+ MVKMTLFunction func = ((MVKShaderModule*)_pTessEvalSS->module)->getMTLFunction(&shaderContext, _pTessEvalSS->pSpecializationInfo, _pipelineCache);
+ id<MTLFunction> mtlFunc = func.getMTLFunction();
+ if ( !mtlFunc ) {
setConfigurationResult(reportError(VK_ERROR_INVALID_SHADER_NV, "Tessellation evaluation shader function could not be compiled into pipeline. See previous logged error."));
return false;
}
// Yeah, you read that right. Tess. eval functions are a kind of vertex function in Metal.
- plDesc.vertexFunction = mtlFunction;
- plDesc.rasterizationEnabled = !shaderContext.options.mslOptions.disable_rasterization;
- _needsTessEvalSwizzleBuffer = shaderContext.options.needsSwizzleBuffer;
- _needsTessEvalBufferSizeBuffer = shaderContext.options.needsBufferSizeBuffer;
+ plDesc.vertexFunction = mtlFunc;
+
+ auto& funcRslts = func.shaderConversionResults;
+ plDesc.rasterizationEnabled = !funcRslts.isRasterizationDisabled;
+ _needsTessEvalSwizzleBuffer = funcRslts.needsSwizzleBuffer;
+ _needsTessEvalBufferSizeBuffer = funcRslts.needsBufferSizeBuffer;
+
if (!verifyImplicitBuffer(_needsTessEvalSwizzleBuffer, _swizzleBufferIndex, kMVKShaderStageTessEval, "swizzle", kMVKTessEvalNumReservedBuffers)) {
return false;
}
@@ -869,21 +905,25 @@
bool MVKGraphicsPipeline::addFragmentShaderToPipeline(MTLRenderPipelineDescriptor* plDesc,
const VkGraphicsPipelineCreateInfo* pCreateInfo,
- SPIRVToMSLConverterContext& shaderContext) {
+ SPIRVToMSLConversionConfiguration& shaderContext) {
if (_pFragmentSS) {
shaderContext.options.entryPointStage = spv::ExecutionModelFragment;
shaderContext.options.mslOptions.swizzle_buffer_index = _swizzleBufferIndex.stages[kMVKShaderStageFragment];
shaderContext.options.mslOptions.buffer_size_buffer_index = _bufferSizeBufferIndex.stages[kMVKShaderStageFragment];
shaderContext.options.entryPointName = _pFragmentSS->pName;
shaderContext.options.mslOptions.capture_output_to_buffer = false;
- id<MTLFunction> mtlFunction = ((MVKShaderModule*)_pFragmentSS->module)->getMTLFunction(&shaderContext, _pFragmentSS->pSpecializationInfo, _pipelineCache).mtlFunction;
- if ( !mtlFunction ) {
+
+ MVKMTLFunction func = ((MVKShaderModule*)_pFragmentSS->module)->getMTLFunction(&shaderContext, _pFragmentSS->pSpecializationInfo, _pipelineCache);
+ id<MTLFunction> mtlFunc = func.getMTLFunction();
+ if ( !mtlFunc ) {
setConfigurationResult(reportError(VK_ERROR_INVALID_SHADER_NV, "Fragment shader function could not be compiled into pipeline. See previous logged error."));
return false;
}
- plDesc.fragmentFunction = mtlFunction;
- _needsFragmentSwizzleBuffer = shaderContext.options.needsSwizzleBuffer;
- _needsFragmentBufferSizeBuffer = shaderContext.options.needsBufferSizeBuffer;
+ plDesc.fragmentFunction = mtlFunc;
+
+ auto& funcRslts = func.shaderConversionResults;
+ _needsFragmentSwizzleBuffer = funcRslts.needsSwizzleBuffer;
+ _needsFragmentBufferSizeBuffer = funcRslts.needsBufferSizeBuffer;
if (!verifyImplicitBuffer(_needsFragmentSwizzleBuffer, _swizzleBufferIndex, kMVKShaderStageFragment, "swizzle", 0)) {
return false;
}
@@ -896,7 +936,7 @@
bool MVKGraphicsPipeline::addVertexInputToPipeline(MTLRenderPipelineDescriptor* plDesc,
const VkPipelineVertexInputStateCreateInfo* pVI,
- const SPIRVToMSLConverterContext& shaderContext) {
+ const SPIRVToMSLConversionConfiguration& shaderContext) {
// Collect extension structures
VkPipelineVertexInputDivisorStateCreateInfoEXT* pVertexInputDivisorState = nullptr;
auto* next = (MVKVkAPIStructHeader*)pVI->pNext;
@@ -1080,7 +1120,7 @@
}
// Initializes the context used to prepare the MSL library used by this pipeline.
-void MVKGraphicsPipeline::initMVKShaderConverterContext(SPIRVToMSLConverterContext& shaderContext,
+void MVKGraphicsPipeline::initMVKShaderConverterContext(SPIRVToMSLConversionConfiguration& shaderContext,
const VkGraphicsPipelineCreateInfo* pCreateInfo,
const SPIRVTessReflectionData& reflectData) {
@@ -1102,6 +1142,7 @@
shaderContext.options.mslOptions.msl_version = _device->_pMetalFeatures->mslVersion;
shaderContext.options.mslOptions.texel_buffer_texture_width = _device->_pMetalFeatures->maxTextureDimension;
+ shaderContext.options.mslOptions.texture_buffer_native = _device->_pMetalFeatures->textureBuffers;
MVKPipelineLayout* layout = (MVKPipelineLayout*)pCreateInfo->layout;
layout->populateShaderConverterContext(shaderContext);
@@ -1122,7 +1163,7 @@
}
// Initializes the vertex attributes in a shader converter context.
-void MVKGraphicsPipeline::addVertexInputToShaderConverterContext(SPIRVToMSLConverterContext& shaderContext,
+void MVKGraphicsPipeline::addVertexInputToShaderConverterContext(SPIRVToMSLConversionConfiguration& shaderContext,
const VkGraphicsPipelineCreateInfo* pCreateInfo) {
// Set the shader context vertex attribute information
shaderContext.vertexAttributes.clear();
@@ -1186,7 +1227,7 @@
}
// Initializes the vertex attributes in a shader converter context from the previous stage output.
-void MVKGraphicsPipeline::addPrevStageOutputToShaderConverterContext(SPIRVToMSLConverterContext& shaderContext,
+void MVKGraphicsPipeline::addPrevStageOutputToShaderConverterContext(SPIRVToMSLConversionConfiguration& shaderContext,
std::vector<SPIRVShaderOutput>& shaderOutputs) {
// Set the shader context vertex attribute information
shaderContext.vertexAttributes.clear();
@@ -1250,14 +1291,17 @@
MVKComputePipeline::MVKComputePipeline(MVKDevice* device,
MVKPipelineCache* pipelineCache,
MVKPipeline* parent,
- const VkComputePipelineCreateInfo* pCreateInfo) : MVKPipeline(device, pipelineCache, parent) {
- MVKMTLFunction shaderFunc = getMTLFunction(pCreateInfo);
- _mtlThreadgroupSize = shaderFunc.threadGroupSize;
+ const VkComputePipelineCreateInfo* pCreateInfo) :
+ MVKPipeline(device, pipelineCache, (MVKPipelineLayout*)pCreateInfo->layout, parent) {
+
+ MVKMTLFunction func = getMTLFunction(pCreateInfo);
+ _mtlThreadgroupSize = func.threadGroupSize;
_mtlPipelineState = nil;
- if (shaderFunc.mtlFunction) {
- MTLComputePipelineDescriptor* plDesc = [[MTLComputePipelineDescriptor new] autorelease];
- plDesc.computeFunction = shaderFunc.mtlFunction;
+ id<MTLFunction> mtlFunc = func.getMTLFunction();
+ if (mtlFunc) {
+ MTLComputePipelineDescriptor* plDesc = [MTLComputePipelineDescriptor new]; // temp retain
+ plDesc.computeFunction = mtlFunc;
// Metal does not allow the name of the pipeline to be changed after it has been created,
// and we need to create the Metal pipeline immediately to provide error feedback to app.
@@ -1267,6 +1311,8 @@
MVKComputePipelineCompiler* plc = new MVKComputePipelineCompiler(this);
_mtlPipelineState = plc->newMTLComputePipelineState(plDesc); // retained
plc->destroy();
+ [plDesc release]; // temp release
+
if ( !_mtlPipelineState ) { _hasValidMTLPipelineStates = false; }
} else {
setConfigurationResult(reportError(VK_ERROR_INVALID_SHADER_NV, "Compute shader function could not be compiled into pipeline. See previous logged error."));
@@ -1284,14 +1330,15 @@
MVKMTLFunction MVKComputePipeline::getMTLFunction(const VkComputePipelineCreateInfo* pCreateInfo) {
const VkPipelineShaderStageCreateInfo* pSS = &pCreateInfo->stage;
- if ( !mvkAreFlagsEnabled(pSS->stage, VK_SHADER_STAGE_COMPUTE_BIT) ) { return MVKMTLFunctionNull; }
+ if ( !mvkAreAllFlagsEnabled(pSS->stage, VK_SHADER_STAGE_COMPUTE_BIT) ) { return MVKMTLFunctionNull; }
- SPIRVToMSLConverterContext shaderContext;
+ SPIRVToMSLConversionConfiguration shaderContext;
shaderContext.options.entryPointName = pCreateInfo->stage.pName;
shaderContext.options.entryPointStage = spv::ExecutionModelGLCompute;
shaderContext.options.mslOptions.msl_version = _device->_pMetalFeatures->mslVersion;
shaderContext.options.mslOptions.texel_buffer_texture_width = _device->_pMetalFeatures->maxTextureDimension;
shaderContext.options.mslOptions.swizzle_texture_samples = _fullImageViewSwizzle;
+ shaderContext.options.mslOptions.texture_buffer_native = _device->_pMetalFeatures->textureBuffers;
MVKPipelineLayout* layout = (MVKPipelineLayout*)pCreateInfo->layout;
layout->populateShaderConverterContext(shaderContext);
@@ -1300,11 +1347,13 @@
shaderContext.options.mslOptions.swizzle_buffer_index = _swizzleBufferIndex.stages[kMVKShaderStageCompute];
shaderContext.options.mslOptions.buffer_size_buffer_index = _bufferSizeBufferIndex.stages[kMVKShaderStageCompute];
- MVKShaderModule* mvkShdrMod = (MVKShaderModule*)pSS->module;
- MVKMTLFunction func = mvkShdrMod->getMTLFunction(&shaderContext, pSS->pSpecializationInfo, _pipelineCache);
- _needsSwizzleBuffer = shaderContext.options.needsSwizzleBuffer;
- _needsBufferSizeBuffer = shaderContext.options.needsBufferSizeBuffer;
- return func;
+ MVKMTLFunction func = ((MVKShaderModule*)pSS->module)->getMTLFunction(&shaderContext, pSS->pSpecializationInfo, _pipelineCache);
+
+ auto& funcRslts = func.shaderConversionResults;
+ _needsSwizzleBuffer = funcRslts.needsSwizzleBuffer;
+ _needsBufferSizeBuffer = funcRslts.needsBufferSizeBuffer;
+
+ return func;
}
MVKComputePipeline::~MVKComputePipeline() {
@@ -1316,7 +1365,7 @@
#pragma mark MVKPipelineCache
// Return a shader library from the specified shader context sourced from the specified shader module.
-MVKShaderLibrary* MVKPipelineCache::getShaderLibrary(SPIRVToMSLConverterContext* pContext, MVKShaderModule* shaderModule) {
+MVKShaderLibrary* MVKPipelineCache::getShaderLibrary(SPIRVToMSLConversionConfiguration* pContext, MVKShaderModule* shaderModule) {
lock_guard<mutex> lock(_shaderCacheLock);
bool wasAdded = false;
@@ -1358,9 +1407,9 @@
friend MVKPipelineCache;
bool next() { return (++_index < (_pSLCache ? _pSLCache->_shaderLibraries.size() : 0)); }
- SPIRVToMSLConverterContext& getShaderContext() { return _pSLCache->_shaderLibraries[_index].first; }
+ SPIRVToMSLConversionConfiguration& getShaderConversionConfig() { return _pSLCache->_shaderLibraries[_index].first; }
std::string& getMSL() { return _pSLCache->_shaderLibraries[_index].second->_msl; }
- SPIRVEntryPoint& getEntryPoint() { return _pSLCache->_shaderLibraries[_index].second->_entryPoint; }
+ SPIRVToMSLConversionResults& getShaderConversionResults() { return _pSLCache->_shaderLibraries[_index].second->_shaderConversionResults; }
MVKShaderCacheIterator(MVKShaderLibraryCache* pSLCache) : _pSLCache(pSLCache) {}
MVKShaderLibraryCache* _pSLCache;
@@ -1410,7 +1459,7 @@
// Serializes the data in this cache to a stream
void MVKPipelineCache::writeData(ostream& outstream, bool isCounting) {
- MVKPerformanceTracker& shaderCompilationEvent = isCounting
+ MVKPerformanceTracker& activityTracker = isCounting
? _device->_performanceStatistics.pipelineCache.sizePipelineCache
: _device->_performanceStatistics.pipelineCache.writePipelineCache;
@@ -1435,10 +1484,10 @@
uint64_t startTime = _device->getPerformanceTimestamp();
writer(cacheEntryType);
writer(smKey);
- writer(cacheIter.getShaderContext());
- writer(cacheIter.getEntryPoint());
+ writer(cacheIter.getShaderConversionConfig());
+ writer(cacheIter.getShaderConversionResults());
writer(cacheIter.getMSL());
- _device->addActivityPerformance(shaderCompilationEvent, startTime);
+ _device->addActivityPerformance(activityTracker, startTime);
}
}
@@ -1492,11 +1541,11 @@
MVKShaderModuleKey smKey;
reader(smKey);
- SPIRVToMSLConverterContext shaderContext;
- reader(shaderContext);
+ SPIRVToMSLConversionConfiguration shaderConversionConfig;
+ reader(shaderConversionConfig);
- SPIRVEntryPoint entryPoint;
- reader(entryPoint);
+ SPIRVToMSLConversionResults shaderConversionResults;
+ reader(shaderConversionResults);
string msl;
reader(msl);
@@ -1504,7 +1553,7 @@
// Add the shader library to the staging cache.
MVKShaderLibraryCache* slCache = getShaderLibraryCache(smKey);
_device->addActivityPerformance(_device->_performanceStatistics.pipelineCache.readPipelineCache, startTime);
- slCache->addShaderLibrary(&shaderContext, msl, entryPoint);
+ slCache->addShaderLibrary(&shaderConversionConfig, msl, shaderConversionResults);
break;
}
@@ -1625,18 +1674,13 @@
}
template<class Archive>
- void serialize(Archive & archive, SPIRVToMSLConverterOptions& opt) {
+ void serialize(Archive & archive, SPIRVToMSLConversionOptions& opt) {
archive(opt.mslOptions,
opt.entryPointName,
opt.entryPointStage,
opt.tessPatchKind,
opt.numTessControlPoints,
- opt.shouldFlipVertexY,
- opt.needsSwizzleBuffer,
- opt.needsOutputBuffer,
- opt.needsPatchOutputBuffer,
- opt.needsBufferSizeBuffer,
- opt.needsInputThreadgroupMem);
+ opt.shouldFlipVertexY);
}
template<class Archive>
@@ -1654,10 +1698,21 @@
}
template<class Archive>
- void serialize(Archive & archive, SPIRVToMSLConverterContext& ctx) {
+ void serialize(Archive & archive, SPIRVToMSLConversionConfiguration& ctx) {
archive(ctx.options, ctx.vertexAttributes, ctx.resourceBindings);
}
+ template<class Archive>
+ void serialize(Archive & archive, SPIRVToMSLConversionResults& scr) {
+ archive(scr.entryPoint,
+ scr.isRasterizationDisabled,
+ scr.needsSwizzleBuffer,
+ scr.needsOutputBuffer,
+ scr.needsPatchOutputBuffer,
+ scr.needsBufferSizeBuffer,
+ scr.needsInputThreadgroupMem);
+ }
+
}
template<class Archive>
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKQueryPool.mm b/MoltenVK/MoltenVK/GPUObjects/MVKQueryPool.mm
index 1b5e77b..0090244 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKQueryPool.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKQueryPool.mm
@@ -71,7 +71,7 @@
uint32_t endQuery = firstQuery + queryCount;
- if (mvkAreFlagsEnabled(flags, VK_QUERY_RESULT_WAIT_BIT)) {
+ if (mvkAreAllFlagsEnabled(flags, VK_QUERY_RESULT_WAIT_BIT)) {
_availabilityBlocker.wait(lock, [this, firstQuery, endQuery]{
return areQueriesHostAvailable(firstQuery, endQuery);
});
@@ -104,14 +104,14 @@
VkResult MVKQueryPool::getResult(uint32_t query, void* pQryData, VkQueryResultFlags flags) {
bool isAvailable = _availability[query] == Available;
- bool shouldOutput = (isAvailable || mvkAreFlagsEnabled(flags, VK_QUERY_RESULT_PARTIAL_BIT));
- bool shouldOutput64Bit = mvkAreFlagsEnabled(flags, VK_QUERY_RESULT_64_BIT);
+ bool shouldOutput = (isAvailable || mvkAreAllFlagsEnabled(flags, VK_QUERY_RESULT_PARTIAL_BIT));
+ bool shouldOutput64Bit = mvkAreAllFlagsEnabled(flags, VK_QUERY_RESULT_64_BIT);
// Output the results of this query
if (shouldOutput) { getResult(query, pQryData, shouldOutput64Bit); }
// If requested, output the availability bit
- if (mvkAreFlagsEnabled(flags, VK_QUERY_RESULT_WITH_AVAILABILITY_BIT)) {
+ if (mvkAreAllFlagsEnabled(flags, VK_QUERY_RESULT_WITH_AVAILABILITY_BIT)) {
if (shouldOutput64Bit) {
uintptr_t pAvailability = (uintptr_t)pQryData + (_queryElementCount * sizeof(uint64_t));
*(uint64_t*)pAvailability = isAvailable;
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKQueue.h b/MoltenVK/MoltenVK/GPUObjects/MVKQueue.h
index b661f64..7e326f6 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKQueue.h
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKQueue.h
@@ -184,6 +184,7 @@
MVKQueueSubmission* _next;
MVKVectorInline<MVKSemaphore*, 8> _waitSemaphores;
bool _isAwaitingSemaphores;
+ bool _trackPerformance;
};
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKQueue.mm b/MoltenVK/MoltenVK/GPUObjects/MVKQueue.mm
index ecffbdb..6a8647d 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKQueue.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKQueue.mm
@@ -65,13 +65,13 @@
#pragma mark Queue submissions
-// Execute the queue submission under an autorelease pool to ensure transient Metal objects are autoreleased.
+// Execute the queue submission under an autoreleasepool to ensure transient Metal objects are autoreleased.
// This is critical for apps that don't use standard OS autoreleasing runloop threading.
static inline void execute(MVKQueueSubmission* qSubmit) { @autoreleasepool { qSubmit->execute(); } }
// Executes the submmission, either immediately, or by dispatching to an execution queue.
-// Submissions to the execution queue are wrapped in a dedicated autorelease pool.
-// Relying on the dispatch queue to find time to drain the autorelease pool can
+// Submissions to the execution queue are wrapped in a dedicated autoreleasepool.
+// Relying on the dispatch queue to find time to drain the autoreleasepool can
// result in significant memory creep under heavy workloads.
VkResult MVKQueue::submit(MVKQueueSubmission* qSubmit) {
if ( !qSubmit ) { return VK_SUCCESS; } // Ignore nils
@@ -202,8 +202,9 @@
uint32_t waitSemaphoreCount,
const VkSemaphore* pWaitSemaphores) {
_queue = queue;
- _prev = VK_NULL_HANDLE;
- _next = VK_NULL_HANDLE;
+ _prev = nullptr;
+ _next = nullptr;
+ _trackPerformance = _queue->_device->_pMVKConfig->performanceTracking;
_isAwaitingSemaphores = waitSemaphoreCount > 0;
_waitSemaphores.reserve(waitSemaphoreCount);
@@ -280,9 +281,13 @@
for (auto& ws : _waitSemaphores) { ws->wait(); }
}
- if (signalCompletion) {
+ MVKDevice* mkvDev = _queue->_device;
+ uint64_t startTime = mkvDev->getPerformanceTimestamp();
+
+ if (signalCompletion || _trackPerformance) {
[_activeMTLCommandBuffer addCompletedHandler: ^(id<MTLCommandBuffer> mtlCmdBuff) {
- this->finish();
+ _queue->_device->addActivityPerformance(mkvDev->_performanceStatistics.queue.mtlCommandBufferCompletion, startTime);
+ if (signalCompletion) { this->finish(); }
}];
}
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKShaderModule.h b/MoltenVK/MoltenVK/GPUObjects/MVKShaderModule.h
index d53a4ec..d9a8f84 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKShaderModule.h
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKShaderModule.h
@@ -38,14 +38,23 @@
#pragma mark -
#pragma mark MVKShaderLibrary
-/** Specifies the SPIRV LocalSize, which is the number of threads in a compute shader workgroup. */
-typedef struct {
- id<MTLFunction> mtlFunction;
- MTLSize threadGroupSize;
+/** A MTLFunction and corresponding result information resulting from a shader conversion. */
+typedef struct MVKMTLFunction {
+ SPIRVToMSLConversionResults shaderConversionResults;
+ MTLSize threadGroupSize;
+ inline id<MTLFunction> getMTLFunction() { return _mtlFunction; }
+
+ MVKMTLFunction(id<MTLFunction> mtlFunc, const SPIRVToMSLConversionResults scRslts, MTLSize tgSize);
+ MVKMTLFunction(const MVKMTLFunction& other);
+ ~MVKMTLFunction();
+
+private:
+ id<MTLFunction> _mtlFunction;
+
} MVKMTLFunction;
/** A MVKMTLFunction indicating an invalid MTLFunction. The mtlFunction member is nil. */
-extern const MVKMTLFunction MVKMTLFunctionNull;
+const MVKMTLFunction MVKMTLFunctionNull(nil, SPIRVToMSLConversionResults(), MTLSizeMake(1, 1, 1));
/** Wraps a single MTLLibrary. */
class MVKShaderLibrary : public MVKBaseObject {
@@ -55,13 +64,28 @@
/** Returns the Vulkan API opaque object controlling this object. */
MVKVulkanAPIObject* getVulkanAPIObject() override { return _owner->getVulkanAPIObject(); };
- /** Sets the number of threads in a single compute kernel workgroup, per dimension. */
+ /**
+ * Sets the entry point function name.
+ *
+ * This is usually set automatically during shader conversion from SPIR-V to MSL.
+ * For a library that was created directly from MSL, this function can be used to
+ * set the name of the function if it has a different name than the default main0().
+ */
+ void setEntryPointName(std::string& funcName);
+
+ /**
+ * Sets the number of threads in a single compute kernel workgroup, per dimension.
+ *
+ * This is usually set automatically during shader conversion from SPIR-V to MSL.
+ * For a library that was created directly from MSL, this function can be used to
+ * set the workgroup size..
+ */
void setWorkgroupSize(uint32_t x, uint32_t y, uint32_t z);
/** Constructs an instance from the specified MSL source code. */
MVKShaderLibrary(MVKVulkanAPIDeviceObject* owner,
const std::string& mslSourceCode,
- const SPIRVEntryPoint& entryPoint);
+ const SPIRVToMSLConversionResults& shaderConversionResults);
/** Constructs an instance from the specified compiled MSL code data. */
MVKShaderLibrary(MVKVulkanAPIDeviceObject* owner,
@@ -69,7 +93,7 @@
size_t mslCompiledCodeLength);
/** Copy constructor. */
- MVKShaderLibrary(MVKShaderLibrary& other);
+ MVKShaderLibrary(const MVKShaderLibrary& other);
~MVKShaderLibrary() override;
@@ -84,7 +108,7 @@
MVKVulkanAPIDeviceObject* _owner;
id<MTLLibrary> _mtlLibrary;
- SPIRVEntryPoint _entryPoint;
+ SPIRVToMSLConversionResults _shaderConversionResults;
std::string _msl;
};
@@ -107,7 +131,7 @@
* If pWasAdded is not nil, this function will set it to true if a new shader library was created,
* and to false if an existing shader library was found and returned.
*/
- MVKShaderLibrary* getShaderLibrary(SPIRVToMSLConverterContext* pContext,
+ MVKShaderLibrary* getShaderLibrary(SPIRVToMSLConversionConfiguration* pContext,
MVKShaderModule* shaderModule,
bool* pWasAdded = nullptr);
@@ -120,14 +144,14 @@
friend MVKPipelineCache;
friend MVKShaderModule;
- MVKShaderLibrary* findShaderLibrary(SPIRVToMSLConverterContext* pContext);
- MVKShaderLibrary* addShaderLibrary(SPIRVToMSLConverterContext* pContext,
+ MVKShaderLibrary* findShaderLibrary(SPIRVToMSLConversionConfiguration* pContext);
+ MVKShaderLibrary* addShaderLibrary(SPIRVToMSLConversionConfiguration* pContext,
const std::string& mslSourceCode,
- const SPIRVEntryPoint& entryPoint);
+ const SPIRVToMSLConversionResults& shaderConversionResults);
void merge(MVKShaderLibraryCache* other);
MVKVulkanAPIDeviceObject* _owner;
- std::vector<std::pair<SPIRVToMSLConverterContext, MVKShaderLibrary*>> _shaderLibraries;
+ std::vector<std::pair<SPIRVToMSLConversionConfiguration, MVKShaderLibrary*>> _shaderLibraries;
};
@@ -168,12 +192,12 @@
VkDebugReportObjectTypeEXT getVkDebugReportObjectType() override { return VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT; }
/** Returns the Metal shader function, possibly specialized. */
- MVKMTLFunction getMTLFunction(SPIRVToMSLConverterContext* pContext,
+ MVKMTLFunction getMTLFunction(SPIRVToMSLConversionConfiguration* pContext,
const VkSpecializationInfo* pSpecializationInfo,
MVKPipelineCache* pipelineCache);
/** Convert the SPIR-V to MSL, using the specified shader conversion context. */
- bool convert(SPIRVToMSLConverterContext* pContext);
+ bool convert(SPIRVToMSLConversionConfiguration* pContext);
/** Returns the original SPIR-V code that was specified when this object was created. */
const std::vector<uint32_t>& getSPIRV() { return _spvConverter.getSPIRV(); }
@@ -184,12 +208,9 @@
*/
const std::string& getMSL() { return _spvConverter.getMSL(); }
- /**
- * Returns information about the shader entry point as converted by the most recent
- * call to convert() function, or set directly using the setMSL() function.
- */
- const SPIRVEntryPoint& getEntryPoint() { return _spvConverter.getEntryPoint(); }
-
+ /** Returns information about the shader conversion results. */
+ const SPIRVToMSLConversionResults& getConversionResults() { return _spvConverter.getConversionResults(); }
+
/** Sets the number of threads in a single compute kernel workgroup, per dimension. */
void setWorkgroupSize(uint32_t x, uint32_t y, uint32_t z);
@@ -204,12 +225,12 @@
friend MVKShaderCacheIterator;
void propogateDebugName() override {}
- MVKGLSLConversionShaderStage getMVKGLSLConversionShaderStage(SPIRVToMSLConverterContext* pContext);
+ MVKGLSLConversionShaderStage getMVKGLSLConversionShaderStage(SPIRVToMSLConversionConfiguration* pContext);
MVKShaderLibraryCache _shaderLibraryCache;
SPIRVToMSLConverter _spvConverter;
GLSLToSPIRVConverter _glslConverter;
- MVKShaderLibrary* _defaultLibrary;
+ MVKShaderLibrary* _directMSLLibrary;
MVKShaderModuleKey _key;
std::mutex _accessLock;
};
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKShaderModule.mm b/MoltenVK/MoltenVK/GPUObjects/MVKShaderModule.mm
index 426670a..aa0823f 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKShaderModule.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKShaderModule.mm
@@ -26,7 +26,22 @@
using namespace std;
-const MVKMTLFunction MVKMTLFunctionNull = { nil, MTLSizeMake(1, 1, 1) };
+MVKMTLFunction::MVKMTLFunction(id<MTLFunction> mtlFunc, const SPIRVToMSLConversionResults scRslts, MTLSize tgSize) {
+ _mtlFunction = [mtlFunc retain]; // retained
+ shaderConversionResults = scRslts;
+ threadGroupSize = tgSize;
+}
+
+MVKMTLFunction::MVKMTLFunction(const MVKMTLFunction& other) {
+ _mtlFunction = [other._mtlFunction retain]; // retained
+ shaderConversionResults = other.shaderConversionResults;
+ threadGroupSize = other.threadGroupSize;
+}
+
+MVKMTLFunction::~MVKMTLFunction() {
+ [_mtlFunction release];
+}
+
#pragma mark -
#pragma mark MVKShaderLibrary
@@ -42,7 +57,6 @@
}
}
}
-
return wgDim.size;
}
@@ -50,56 +64,65 @@
if ( !_mtlLibrary ) { return MVKMTLFunctionNull; }
- NSString* mtlFuncName = @(_entryPoint.mtlFunctionName.c_str());
- MVKDevice* mvkDev = _owner->getDevice();
- uint64_t startTime = mvkDev->getPerformanceTimestamp();
- id<MTLFunction> mtlFunc = [[_mtlLibrary newFunctionWithName: mtlFuncName] autorelease];
- mvkDev->addActivityPerformance(mvkDev->_performanceStatistics.shaderCompilation.functionRetrieval, startTime);
+ id<MTLFunction> mtlFunc = nil;
+ @autoreleasepool {
+ NSString* mtlFuncName = @(_shaderConversionResults.entryPoint.mtlFunctionName.c_str());
+ MVKDevice* mvkDev = _owner->getDevice();
+ uint64_t startTime = mvkDev->getPerformanceTimestamp();
+ mtlFunc = [_mtlLibrary newFunctionWithName: mtlFuncName]; // temp retain
+ mvkDev->addActivityPerformance(mvkDev->_performanceStatistics.shaderCompilation.functionRetrieval, startTime);
- if (mtlFunc) {
- // If the Metal device supports shader specialization, and the Metal function expects to be
- // specialized, populate Metal function constant values from the Vulkan specialization info,
- // and compiled a specialized Metal function, otherwise simply use the unspecialized Metal function.
- if (mvkDev->_pMetalFeatures->shaderSpecialization) {
- NSArray<MTLFunctionConstant*>* mtlFCs = mtlFunc.functionConstantsDictionary.allValues;
- if (mtlFCs.count) {
- // The Metal shader contains function constants and expects to be specialized
- // Populate the Metal function constant values from the Vulkan specialization info.
- MTLFunctionConstantValues* mtlFCVals = [[MTLFunctionConstantValues new] autorelease];
- if (pSpecializationInfo) {
- // Iterate through the provided Vulkan specialization entries, and populate the
- // Metal function constant value that matches the Vulkan specialization constantID.
- for (uint32_t specIdx = 0; specIdx < pSpecializationInfo->mapEntryCount; specIdx++) {
- const VkSpecializationMapEntry* pMapEntry = &pSpecializationInfo->pMapEntries[specIdx];
- NSUInteger mtlFCIndex = pMapEntry->constantID;
- MTLFunctionConstant* mtlFC = getFunctionConstant(mtlFCs, mtlFCIndex);
- if (mtlFC) {
- [mtlFCVals setConstantValue: &(((char*)pSpecializationInfo->pData)[pMapEntry->offset])
- type: mtlFC.type
- atIndex: mtlFCIndex];
- }
- }
- }
+ if (mtlFunc) {
+ // If the Metal device supports shader specialization, and the Metal function expects to be
+ // specialized, populate Metal function constant values from the Vulkan specialization info,
+ // and compiled a specialized Metal function, otherwise simply use the unspecialized Metal function.
+ if (mvkDev->_pMetalFeatures->shaderSpecialization) {
+ NSArray<MTLFunctionConstant*>* mtlFCs = mtlFunc.functionConstantsDictionary.allValues;
+ if (mtlFCs.count) {
+ // The Metal shader contains function constants and expects to be specialized
+ // Populate the Metal function constant values from the Vulkan specialization info.
+ MTLFunctionConstantValues* mtlFCVals = [MTLFunctionConstantValues new]; // temp retain
+ if (pSpecializationInfo) {
+ // Iterate through the provided Vulkan specialization entries, and populate the
+ // Metal function constant value that matches the Vulkan specialization constantID.
+ for (uint32_t specIdx = 0; specIdx < pSpecializationInfo->mapEntryCount; specIdx++) {
+ const VkSpecializationMapEntry* pMapEntry = &pSpecializationInfo->pMapEntries[specIdx];
+ NSUInteger mtlFCIndex = pMapEntry->constantID;
+ MTLFunctionConstant* mtlFC = getFunctionConstant(mtlFCs, mtlFCIndex);
+ if (mtlFC) {
+ [mtlFCVals setConstantValue: &(((char*)pSpecializationInfo->pData)[pMapEntry->offset])
+ type: mtlFC.type
+ atIndex: mtlFCIndex];
+ }
+ }
+ }
- // Compile the specialized Metal function, and use it instead of the unspecialized Metal function.
- MVKFunctionSpecializer* fs = new MVKFunctionSpecializer(_owner);
- mtlFunc = [fs->newMTLFunction(_mtlLibrary, mtlFuncName, mtlFCVals) autorelease];
- fs->destroy();
- }
- }
- } else {
- reportError(VK_ERROR_INVALID_SHADER_NV, "Shader module does not contain an entry point named '%s'.", mtlFuncName.UTF8String);
- }
+ // Compile the specialized Metal function, and use it instead of the unspecialized Metal function.
+ MVKFunctionSpecializer* fs = new MVKFunctionSpecializer(_owner);
+ [mtlFunc release]; // temp release
+ mtlFunc = fs->newMTLFunction(_mtlLibrary, mtlFuncName, mtlFCVals); // temp retain
+ fs->destroy();
+ [mtlFCVals release]; // temp release
+ }
+ }
+ } else {
+ reportError(VK_ERROR_INVALID_SHADER_NV, "Shader module does not contain an entry point named '%s'.", mtlFuncName.UTF8String);
+ }
- // Set the debug name. First try name of shader module, otherwise try name of owner.
- NSString* dbName = shaderModule-> getDebugName();
- if ( !dbName ) { dbName = _owner-> getDebugName(); }
- setLabelIfNotNil(mtlFunc, dbName);
+ // Set the debug name. First try name of shader module, otherwise try name of owner.
+ NSString* dbName = shaderModule-> getDebugName();
+ if ( !dbName ) { dbName = _owner-> getDebugName(); }
+ setLabelIfNotNil(mtlFunc, dbName);
+ }
- return { mtlFunc, MTLSizeMake(getWorkgroupDimensionSize(_entryPoint.workgroupSize.width, pSpecializationInfo),
- getWorkgroupDimensionSize(_entryPoint.workgroupSize.height, pSpecializationInfo),
- getWorkgroupDimensionSize(_entryPoint.workgroupSize.depth, pSpecializationInfo)) };
+ auto& wgSize = _shaderConversionResults.entryPoint.workgroupSize;
+ MVKMTLFunction mvkMTLFunc(mtlFunc, _shaderConversionResults, MTLSizeMake(getWorkgroupDimensionSize(wgSize.width, pSpecializationInfo),
+ getWorkgroupDimensionSize(wgSize.height, pSpecializationInfo),
+ getWorkgroupDimensionSize(wgSize.depth, pSpecializationInfo)));
+ [mtlFunc release]; // temp release
+
+ return mvkMTLFunc;
}
// Returns the MTLFunctionConstant with the specified ID from the specified array of function constants.
@@ -109,12 +132,29 @@
return nil;
}
-MVKShaderLibrary::MVKShaderLibrary(MVKVulkanAPIDeviceObject* owner, const string& mslSourceCode, const SPIRVEntryPoint& entryPoint) : _owner(owner) {
+void MVKShaderLibrary::setEntryPointName(string& funcName) {
+ _shaderConversionResults.entryPoint.mtlFunctionName = funcName;
+}
+
+void MVKShaderLibrary::setWorkgroupSize(uint32_t x, uint32_t y, uint32_t z) {
+ auto& wgSize = _shaderConversionResults.entryPoint.workgroupSize;
+ wgSize.width.size = x;
+ wgSize.height.size = y;
+ wgSize.depth.size = z;
+}
+
+MVKShaderLibrary::MVKShaderLibrary(MVKVulkanAPIDeviceObject* owner,
+ const string& mslSourceCode,
+ const SPIRVToMSLConversionResults& shaderConversionResults) : _owner(owner) {
MVKShaderLibraryCompiler* slc = new MVKShaderLibraryCompiler(_owner);
- _mtlLibrary = slc->newMTLLibrary(@(mslSourceCode.c_str())); // retained
+
+ NSString* nsSrc = [[NSString alloc] initWithUTF8String: mslSourceCode.c_str()]; // temp retained
+ _mtlLibrary = slc->newMTLLibrary(nsSrc); // retained
+ [nsSrc release]; // release temp string
+
slc->destroy();
- _entryPoint = entryPoint;
+ _shaderConversionResults = shaderConversionResults;
_msl = mslSourceCode;
}
@@ -136,9 +176,9 @@
mvkDev->addActivityPerformance(mvkDev->_performanceStatistics.shaderCompilation.mslLoad, startTime);
}
-MVKShaderLibrary::MVKShaderLibrary(MVKShaderLibrary& other) : _owner(other._owner) {
+MVKShaderLibrary::MVKShaderLibrary(const MVKShaderLibrary& other) : _owner(other._owner) {
_mtlLibrary = [other._mtlLibrary retain];
- _entryPoint = other._entryPoint;
+ _shaderConversionResults = other._shaderConversionResults;
_msl = other._msl;
}
@@ -158,12 +198,6 @@
}
}
-void MVKShaderLibrary::setWorkgroupSize(uint32_t x, uint32_t y, uint32_t z) {
- _entryPoint.workgroupSize.width.size = x;
- _entryPoint.workgroupSize.height.size = y;
- _entryPoint.workgroupSize.depth.size = z;
-}
-
MVKShaderLibrary::~MVKShaderLibrary() {
[_mtlLibrary release];
}
@@ -172,14 +206,14 @@
#pragma mark -
#pragma mark MVKShaderLibraryCache
-MVKShaderLibrary* MVKShaderLibraryCache::getShaderLibrary(SPIRVToMSLConverterContext* pContext,
+MVKShaderLibrary* MVKShaderLibraryCache::getShaderLibrary(SPIRVToMSLConversionConfiguration* pContext,
MVKShaderModule* shaderModule,
bool* pWasAdded) {
bool wasAdded = false;
MVKShaderLibrary* shLib = findShaderLibrary(pContext);
if ( !shLib ) {
if (shaderModule->convert(pContext)) {
- shLib = addShaderLibrary(pContext, shaderModule->getMSL(), shaderModule->getEntryPoint());
+ shLib = addShaderLibrary(pContext, shaderModule->getMSL(), shaderModule->getConversionResults());
wasAdded = true;
}
}
@@ -191,7 +225,7 @@
// Finds and returns a shader library matching the specified context, or returns nullptr if it doesn't exist.
// If a match is found, the specified context is aligned with the context of the matching library.
-MVKShaderLibrary* MVKShaderLibraryCache::findShaderLibrary(SPIRVToMSLConverterContext* pContext) {
+MVKShaderLibrary* MVKShaderLibraryCache::findShaderLibrary(SPIRVToMSLConversionConfiguration* pContext) {
for (auto& slPair : _shaderLibraries) {
if (slPair.first.matches(*pContext)) {
pContext->alignWith(slPair.first);
@@ -202,10 +236,10 @@
}
// Adds and returns a new shader library configured from the specified context.
-MVKShaderLibrary* MVKShaderLibraryCache::addShaderLibrary(SPIRVToMSLConverterContext* pContext,
+MVKShaderLibrary* MVKShaderLibraryCache::addShaderLibrary(SPIRVToMSLConversionConfiguration* pContext,
const string& mslSourceCode,
- const SPIRVEntryPoint& entryPoint) {
- MVKShaderLibrary* shLib = new MVKShaderLibrary(_owner, mslSourceCode, entryPoint);
+ const SPIRVToMSLConversionResults& shaderConversionResults) {
+ MVKShaderLibrary* shLib = new MVKShaderLibrary(_owner, mslSourceCode, shaderConversionResults);
_shaderLibraries.emplace_back(*pContext, shLib);
return shLib;
}
@@ -228,12 +262,12 @@
#pragma mark -
#pragma mark MVKShaderModule
-MVKMTLFunction MVKShaderModule::getMTLFunction(SPIRVToMSLConverterContext* pContext,
+MVKMTLFunction MVKShaderModule::getMTLFunction(SPIRVToMSLConversionConfiguration* pContext,
const VkSpecializationInfo* pSpecializationInfo,
MVKPipelineCache* pipelineCache) {
lock_guard<mutex> lock(_accessLock);
- MVKShaderLibrary* mvkLib = _defaultLibrary;
+ MVKShaderLibrary* mvkLib = _directMSLLibrary;
if ( !mvkLib ) {
uint64_t startTime = _device->getPerformanceTimestamp();
if (pipelineCache) {
@@ -243,13 +277,14 @@
}
_device->addActivityPerformance(_device->_performanceStatistics.shaderCompilation.shaderLibraryFromCache, startTime);
} else {
+ mvkLib->setEntryPointName(pContext->options.entryPointName);
pContext->markAllAttributesAndResourcesUsed();
}
return mvkLib ? mvkLib->getMTLFunction(pSpecializationInfo, this) : MVKMTLFunctionNull;
}
-bool MVKShaderModule::convert(SPIRVToMSLConverterContext* pContext) {
+bool MVKShaderModule::convert(SPIRVToMSLConversionConfiguration* pContext) {
bool shouldLogCode = _device->_pMVKConfig->debugMode;
bool shouldLogEstimatedGLSL = shouldLogCode;
@@ -283,7 +318,7 @@
}
// Returns the MVKGLSLConversionShaderStage corresponding to the shader stage in the SPIR-V converter context.
-MVKGLSLConversionShaderStage MVKShaderModule::getMVKGLSLConversionShaderStage(SPIRVToMSLConverterContext* pContext) {
+MVKGLSLConversionShaderStage MVKShaderModule::getMVKGLSLConversionShaderStage(SPIRVToMSLConversionConfiguration* pContext) {
switch (pContext->options.entryPointStage) {
case spv::ExecutionModelVertex: return kMVKGLSLConversionShaderStageVertex;
case spv::ExecutionModelTessellationControl: return kMVKGLSLConversionShaderStageTessControl;
@@ -299,12 +334,18 @@
}
}
+void MVKShaderModule::setWorkgroupSize(uint32_t x, uint32_t y, uint32_t z) {
+ _spvConverter.setWorkgroupSize(x, y, z);
+ if(_directMSLLibrary) { _directMSLLibrary->setWorkgroupSize(x, y, z); }
+}
+
+
#pragma mark Construction
MVKShaderModule::MVKShaderModule(MVKDevice* device,
const VkShaderModuleCreateInfo* pCreateInfo) : MVKVulkanAPIDeviceObject(device), _shaderLibraryCache(this) {
- _defaultLibrary = nullptr;
+ _directMSLLibrary = nullptr;
size_t codeSize = pCreateInfo->codeSize;
@@ -341,7 +382,7 @@
_device->addActivityPerformance(_device->_performanceStatistics.shaderCompilation.hashShaderCode, startTime);
_spvConverter.setMSL(pMSLCode, nullptr);
- _defaultLibrary = new MVKShaderLibrary(this, _spvConverter.getMSL().c_str(), _spvConverter.getEntryPoint());
+ _directMSLLibrary = new MVKShaderLibrary(this, _spvConverter.getMSL().c_str(), _spvConverter.getConversionResults());
break;
}
@@ -355,7 +396,7 @@
codeHash = mvkHash(pMSLCode, mslCodeLen, codeHash);
_device->addActivityPerformance(_device->_performanceStatistics.shaderCompilation.hashShaderCode, startTime);
- _defaultLibrary = new MVKShaderLibrary(this, (void*)(pMSLCode), mslCodeLen);
+ _directMSLLibrary = new MVKShaderLibrary(this, (void*)(pMSLCode), mslCodeLen);
break;
}
@@ -379,12 +420,7 @@
}
MVKShaderModule::~MVKShaderModule() {
- if (_defaultLibrary) { _defaultLibrary->destroy(); }
-}
-
-void MVKShaderModule::setWorkgroupSize(uint32_t x, uint32_t y, uint32_t z) {
- _spvConverter.setWorkgroupSize(x, y, z);
- if(_defaultLibrary) { _defaultLibrary->setWorkgroupSize(x, y, z); }
+ if (_directMSLLibrary) { _directMSLLibrary->destroy(); }
}
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKSurface.h b/MoltenVK/MoltenVK/GPUObjects/MVKSurface.h
index 59f8b73..f34df5a 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKSurface.h
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKSurface.h
@@ -66,6 +66,10 @@
#pragma mark Construction
MVKSurface(MVKInstance* mvkInstance,
+ const VkMetalSurfaceCreateInfoEXT* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator);
+
+ MVKSurface(MVKInstance* mvkInstance,
const Vk_PLATFORM_SurfaceCreateInfoMVK* pCreateInfo,
const VkAllocationCallbacks* pAllocator);
@@ -73,6 +77,7 @@
protected:
void propogateDebugName() override {}
+ void initLayerObserver();
MVKInstance* _mvkInstance;
CAMetalLayer* _mtlCAMetalLayer;
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKSurface.mm b/MoltenVK/MoltenVK/GPUObjects/MVKSurface.mm
index f2f5596..3dd8118 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKSurface.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKSurface.mm
@@ -23,16 +23,28 @@
#include "MVKOSExtensions.h"
#import "MVKBlockObserver.h"
-#define STR(NAME) #NAME
+// We need to double-dereference the name to first convert to the platform symbol, then to a string.
+#define STR_PLATFORM(NAME) #NAME
+#define STR(NAME) STR_PLATFORM(NAME)
#pragma mark MVKSurface
+MVKSurface::MVKSurface(MVKInstance* mvkInstance,
+ const VkMetalSurfaceCreateInfoEXT* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator) : _mvkInstance(mvkInstance) {
+
+ _mtlCAMetalLayer = (CAMetalLayer*)[pCreateInfo->pLayer retain];
+ initLayerObserver();
+}
+
// pCreateInfo->pView can be either a CAMetalLayer or a view (NSView/UIView).
MVKSurface::MVKSurface(MVKInstance* mvkInstance,
const Vk_PLATFORM_SurfaceCreateInfoMVK* pCreateInfo,
const VkAllocationCallbacks* pAllocator) : _mvkInstance(mvkInstance) {
+ MVKLogInfo("%s(): This function is obsolete. Consider using the vkCreateMetalSurfaceEXT() function from the VK_EXT_metal_surface extension instead.", STR(vkCreate_PLATFORM_SurfaceMVK));
+
// Get the platform object contained in pView
id<NSObject> obj = (id<NSObject>)pCreateInfo->pView;
@@ -45,30 +57,34 @@
obj = ((PLATFORM_VIEW_CLASS*)obj).layer;
}
- _layerObserver = nil;
-
// Confirm that we were provided with a CAMetalLayer
if ([obj isKindOfClass: [CAMetalLayer class]]) {
_mtlCAMetalLayer = (CAMetalLayer*)[obj retain]; // retained
- if ([_mtlCAMetalLayer.delegate isKindOfClass: [PLATFORM_VIEW_CLASS class]]) {
- // Sometimes, the owning view can replace its CAMetalLayer. In that case, the client
- // needs to recreate the surface.
- _layerObserver = [MVKBlockObserver observerWithBlock: ^(NSString* path, id, NSDictionary*, void*) {
- if ( ![path isEqualToString: @"layer"] ) { return; }
- std::lock_guard<std::mutex> lock(this->_lock);
- [this->_mtlCAMetalLayer release];
- this->_mtlCAMetalLayer = nil;
- this->setConfigurationResult(VK_ERROR_SURFACE_LOST_KHR);
- [this->_layerObserver release];
- this->_layerObserver = nil;
- } forObject: _mtlCAMetalLayer.delegate atKeyPath: @"layer"];
- }
} else {
setConfigurationResult(reportError(VK_ERROR_INITIALIZATION_FAILED,
"%s(): On-screen rendering requires a layer of type CAMetalLayer.",
STR(vkCreate_PLATFORM_SurfaceMVK)));
_mtlCAMetalLayer = nil;
}
+
+ initLayerObserver();
+}
+
+// Sometimes, the owning view can replace its CAMetalLayer. In that case, the client needs to recreate the surface.
+void MVKSurface::initLayerObserver() {
+
+ _layerObserver = nil;
+ if ( ![_mtlCAMetalLayer.delegate isKindOfClass: [PLATFORM_VIEW_CLASS class]] ) { return; }
+
+ _layerObserver = [MVKBlockObserver observerWithBlock: ^(NSString* path, id, NSDictionary*, void*) {
+ if ( ![path isEqualToString: @"layer"] ) { return; }
+ std::lock_guard<std::mutex> lock(this->_lock);
+ [this->_mtlCAMetalLayer release];
+ this->_mtlCAMetalLayer = nil;
+ this->setConfigurationResult(VK_ERROR_SURFACE_LOST_KHR);
+ [this->_layerObserver release];
+ this->_layerObserver = nil;
+ } forObject: _mtlCAMetalLayer.delegate atKeyPath: @"layer"];
}
MVKSurface::~MVKSurface() {
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKSwapchain.mm b/MoltenVK/MoltenVK/GPUObjects/MVKSwapchain.mm
index 42a3b8b..ac3eabc 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKSwapchain.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKSwapchain.mm
@@ -38,7 +38,9 @@
if (_debugName) {
size_t imgCnt = _surfaceImages.size();
for (size_t imgIdx = 0; imgIdx < imgCnt; imgIdx++) {
- _surfaceImages[imgIdx]->setDebugName([NSString stringWithFormat: @"%@(%lu)", _debugName, imgIdx].UTF8String);
+ NSString* nsName = [[NSString alloc] initWithFormat: @"%@(%lu)", _debugName, imgIdx]; // temp retain
+ _surfaceImages[imgIdx]->setDebugName(nsName.UTF8String);
+ [nsName release]; // release temp string
}
}
}
@@ -224,12 +226,40 @@
VK_IMAGE_USAGE_TRANSFER_DST_BIT |
VK_IMAGE_USAGE_SAMPLED_BIT |
VK_IMAGE_USAGE_STORAGE_BIT));
+#if MVK_MACOS
+ switch (pCreateInfo->imageColorSpace) {
+ case VK_COLOR_SPACE_SRGB_NONLINEAR_KHR:
+ _mtlLayer.colorspace = CGColorSpaceCreateWithName(kCGColorSpaceSRGB);
+ break;
+ case VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT:
+ _mtlLayer.colorspace = CGColorSpaceCreateWithName(kCGColorSpaceDisplayP3);
+ break;
+ case VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT:
+ _mtlLayer.colorspace = CGColorSpaceCreateWithName(kCGColorSpaceExtendedLinearSRGB);
+ break;
+ case VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT:
+ _mtlLayer.colorspace = CGColorSpaceCreateWithName(kCGColorSpaceDCIP3);
+ break;
+ case VK_COLOR_SPACE_BT709_NONLINEAR_EXT:
+ _mtlLayer.colorspace = CGColorSpaceCreateWithName(kCGColorSpaceITUR_709);
+ break;
+ case VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT:
+ _mtlLayer.colorspace = CGColorSpaceCreateWithName(kCGColorSpaceAdobeRGB1998);
+ break;
+ case VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT:
+ _mtlLayer.colorspace = CGColorSpaceCreateWithName(kCGColorSpaceExtendedSRGB);
+ break;
+ case VK_COLOR_SPACE_PASS_THROUGH_EXT:
+ default:
+ // Nothing - the default is not to do color matching.
+ break;
+ }
+#endif
_mtlLayerOrigDrawSize = _mtlLayer.updatedDrawableSizeMVK;
// TODO: set additional CAMetalLayer properties before extracting drawables:
// - presentsWithTransaction
// - drawsAsynchronously
- // - colorspace (macOS only) Vulkan only supports sRGB colorspace for now.
// - wantsExtendedDynamicRangeContent (macOS only)
if ( [_mtlLayer.delegate isKindOfClass: [PLATFORM_VIEW_CLASS class]] ) {
@@ -268,7 +298,7 @@
.flags = 0,
};
- if (mvkAreFlagsEnabled(pCreateInfo->flags, VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR)) {
+ if (mvkAreAllFlagsEnabled(pCreateInfo->flags, VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR)) {
mvkEnableFlag(imgInfo.flags, VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT | VK_IMAGE_CREATE_EXTENDED_USAGE_BIT);
}
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKSync.h b/MoltenVK/MoltenVK/GPUObjects/MVKSync.h
index 1fa52cf..fa5f647 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKSync.h
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKSync.h
@@ -197,7 +197,7 @@
#pragma mark Construction
MVKFence(MVKDevice* device, const VkFenceCreateInfo* pCreateInfo) :
- MVKVulkanAPIDeviceObject(device), _isSignaled(mvkAreFlagsEnabled(pCreateInfo->flags, VK_FENCE_CREATE_SIGNALED_BIT)) {}
+ MVKVulkanAPIDeviceObject(device), _isSignaled(mvkAreAllFlagsEnabled(pCreateInfo->flags, VK_FENCE_CREATE_SIGNALED_BIT)) {}
protected:
void propogateDebugName() override {}
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKSync.mm b/MoltenVK/MoltenVK/GPUObjects/MVKSync.mm
index 171df2a..f0a1b1c 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKSync.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKSync.mm
@@ -215,8 +215,10 @@
_blocker.wait_for(lock, nanoTimeout, [this]{ return _isCompileDone; });
if ( !_isCompileDone ) {
- NSString* errDesc = [NSString stringWithFormat: @"Timeout after %.3f milliseconds. Likely internal Metal compiler error", (double)nanoTimeout.count() / 1e6];
- _compileError = [[NSError alloc] initWithDomain: @"MoltenVK" code: 1 userInfo: @{NSLocalizedDescriptionKey : errDesc}]; // retained
+ @autoreleasepool {
+ NSString* errDesc = [NSString stringWithFormat: @"Timeout after %.3f milliseconds. Likely internal Metal compiler error", (double)nanoTimeout.count() / 1e6];
+ _compileError = [[NSError alloc] initWithDomain: @"MoltenVK" code: 1 userInfo: @{NSLocalizedDescriptionKey : errDesc}]; // retained
+ }
}
if (_compileError) { handleError(); }
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKVulkanAPIObject.h b/MoltenVK/MoltenVK/GPUObjects/MVKVulkanAPIObject.h
index 0a326dd..8b3ada0 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKVulkanAPIObject.h
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKVulkanAPIObject.h
@@ -21,7 +21,7 @@
#include "MVKBaseObject.h"
#include <vulkan/vk_icd.h>
#include <string>
-#include <mutex>
+#include <atomic>
#import <Foundation/NSString.h>
@@ -93,25 +93,18 @@
static MVKVulkanAPIObject* getMVKVulkanAPIObject(VkObjectType objType, uint64_t objectHandle);
/** Construct an empty instance. Declared here to support copy constructor. */
- MVKVulkanAPIObject() {}
+ MVKVulkanAPIObject() : _refCount(1) {}
- /**
- * Construct an instance from a copy. Default copy constructor disallowed due to mutex.
- * Copies start with fresh reference counts.
- */
- MVKVulkanAPIObject(const MVKVulkanAPIObject& other) {}
+ /** Default copy constructor disallowed due to mutex. Copy starts with fresh reference counts. */
+ MVKVulkanAPIObject(const MVKVulkanAPIObject& other) : _refCount(1) {}
~MVKVulkanAPIObject() override;
protected:
- bool decrementRetainCount();
- bool markDestroyed();
virtual void propogateDebugName() = 0;
+ std::atomic<uint32_t> _refCount;
NSString* _debugName = nil;
- std::mutex _refLock;
- unsigned _refCount = 0;
- bool _isDestroyed = false;
};
@@ -129,21 +122,30 @@
public:
/**
- * Returns a reference to this object suitable for use as a Vulkan API handle.
- * This is the compliment of the getDispatchableObject() method.
+ * Returns a reference to this object suitable for use as a dispatchable Vulkan API handle.
+ *
+ * Establishes the loader magic number every time, in case the loader
+ * overwrote it for some reason before passing the object back,
+ * particularly in pooled objects that the loader might consider freed.
+ *
+ * This is the compliment of the getDispatchableObject() function.
*/
- void* getVkHandle() override { return &_icdRef; }
+ void* getVkHandle() override {
+ set_loader_magic_value(&_icdRef);
+ return &_icdRef;
+ }
/**
* Retrieves the MVKDispatchableVulkanAPIObject instance referenced by the dispatchable Vulkan handle.
- * This is the compliment of the getVkHandle() method.
+ *
+ * This is the compliment of the getVkHandle() function.
*/
static inline MVKDispatchableVulkanAPIObject* getDispatchableObject(void* vkHandle) {
return vkHandle ? ((MVKDispatchableObjectICDRef*)vkHandle)->mvkObject : nullptr;
}
protected:
- MVKDispatchableObjectICDRef _icdRef = { ICD_LOADER_MAGIC, this };
+ MVKDispatchableObjectICDRef _icdRef = { VK_NULL_HANDLE, this };
};
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKVulkanAPIObject.mm b/MoltenVK/MoltenVK/GPUObjects/MVKVulkanAPIObject.mm
index 6fd294d..109844d 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKVulkanAPIObject.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKVulkanAPIObject.mm
@@ -25,39 +25,21 @@
#pragma mark MVKVulkanAPIObject
void MVKVulkanAPIObject::retain() {
- lock_guard<mutex> lock(_refLock);
-
_refCount++;
}
void MVKVulkanAPIObject::release() {
- if (decrementRetainCount()) { destroy(); }
+ if (--_refCount == 0) { MVKConfigurableObject::destroy(); }
}
void MVKVulkanAPIObject::destroy() {
- if (markDestroyed()) { MVKConfigurableObject::destroy(); }
-}
-
-// Decrements the reference count, and returns whether it's time to destroy this object.
-bool MVKVulkanAPIObject::decrementRetainCount() {
- lock_guard<mutex> lock(_refLock);
-
- if (_refCount > 0) { _refCount--; }
- return (_isDestroyed && _refCount == 0);
-}
-
-// Marks this object as destroyed, and returns whether no references are left outstanding.
-bool MVKVulkanAPIObject::markDestroyed() {
- lock_guard<mutex> lock(_refLock);
-
- _isDestroyed = true;
- return _refCount == 0;
+ release();
}
VkResult MVKVulkanAPIObject::setDebugName(const char* pObjectName) {
if (pObjectName) {
[_debugName release];
- _debugName = [[NSString stringWithUTF8String: pObjectName] retain]; // retained
+ _debugName = [[NSString alloc] initWithUTF8String: pObjectName]; // retained
propogateDebugName();
}
return VK_SUCCESS;
diff --git a/MoltenVK/MoltenVK/Layers/MVKExtensions.def b/MoltenVK/MoltenVK/Layers/MVKExtensions.def
index 5e64a66..44589cb 100644
--- a/MoltenVK/MoltenVK/Layers/MVKExtensions.def
+++ b/MoltenVK/MoltenVK/Layers/MVKExtensions.def
@@ -35,6 +35,7 @@
MVK_EXTENSION(KHR_bind_memory2, KHR_BIND_MEMORY_2)
MVK_EXTENSION(KHR_dedicated_allocation, KHR_DEDICATED_ALLOCATION)
MVK_EXTENSION(KHR_descriptor_update_template, KHR_DESCRIPTOR_UPDATE_TEMPLATE)
+MVK_EXTENSION(KHR_device_group_creation, KHR_DEVICE_GROUP_CREATION)
MVK_EXTENSION(KHR_get_memory_requirements2, KHR_GET_MEMORY_REQUIREMENTS_2)
MVK_EXTENSION(KHR_get_physical_device_properties2, KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2)
MVK_EXTENSION(KHR_get_surface_capabilities2, KHR_GET_SURFACE_CAPABILITIES_2)
@@ -51,13 +52,20 @@
MVK_EXTENSION(KHR_surface, KHR_SURFACE)
MVK_EXTENSION(KHR_swapchain, KHR_SWAPCHAIN)
MVK_EXTENSION(KHR_swapchain_mutable_format, KHR_SWAPCHAIN_MUTABLE_FORMAT)
+MVK_EXTENSION(KHR_uniform_buffer_standard_layout, KHR_UNIFORM_BUFFER_STANDARD_LAYOUT)
MVK_EXTENSION(KHR_variable_pointers, KHR_VARIABLE_POINTERS)
MVK_EXTENSION(EXT_debug_marker, EXT_DEBUG_MARKER)
MVK_EXTENSION(EXT_debug_report, EXT_DEBUG_REPORT)
MVK_EXTENSION(EXT_debug_utils, EXT_DEBUG_UTILS)
MVK_EXTENSION(EXT_host_query_reset, EXT_HOST_QUERY_RESET)
MVK_EXTENSION(EXT_memory_budget, EXT_MEMORY_BUDGET)
+MVK_EXTENSION(EXT_metal_surface, EXT_METAL_SURFACE)
+MVK_EXTENSION(EXT_post_depth_coverage, EXT_POST_DEPTH_COVERAGE)
+MVK_EXTENSION(EXT_scalar_block_layout, EXT_SCALAR_BLOCK_LAYOUT)
+MVK_EXTENSION(EXT_shader_stencil_export, EXT_SHADER_STENCIL_EXPORT)
MVK_EXTENSION(EXT_shader_viewport_index_layer, EXT_SHADER_VIEWPORT_INDEX_LAYER)
+MVK_EXTENSION(EXT_swapchain_colorspace, EXT_SWAPCHAIN_COLOR_SPACE)
+MVK_EXTENSION(EXT_texel_buffer_alignment, EXT_TEXEL_BUFFER_ALIGNMENT)
MVK_EXTENSION(EXT_vertex_attribute_divisor, EXT_VERTEX_ATTRIBUTE_DIVISOR)
MVK_EXTENSION(EXTX_portability_subset, EXTX_PORTABILITY_SUBSET)
MVK_EXTENSION(MVK_ios_surface, MVK_IOS_SURFACE)
@@ -65,7 +73,10 @@
MVK_EXTENSION(MVK_moltenvk, MVK_MOLTENVK)
MVK_EXTENSION(AMD_gpu_shader_half_float, AMD_GPU_SHADER_HALF_FLOAT)
MVK_EXTENSION(AMD_negative_viewport_height, AMD_NEGATIVE_VIEWPORT_HEIGHT)
+MVK_EXTENSION(AMD_shader_image_load_store_lod, AMD_SHADER_IMAGE_LOAD_STORE_LOD)
+MVK_EXTENSION(AMD_shader_trinary_minmax, AMD_SHADER_TRINARY_MINMAX)
MVK_EXTENSION(IMG_format_pvrtc, IMG_FORMAT_PVRTC)
+MVK_EXTENSION(INTEL_shader_integer_functions2, INTEL_SHADER_INTEGER_FUNCTIONS2)
MVK_EXTENSION_LAST(NV_glsl_shader, NV_GLSL_SHADER)
#undef MVK_EXTENSION
diff --git a/MoltenVK/MoltenVK/Layers/MVKExtensions.h b/MoltenVK/MoltenVK/Layers/MVKExtensions.h
index e93fa50..f42aa0f 100644
--- a/MoltenVK/MoltenVK/Layers/MVKExtensions.h
+++ b/MoltenVK/MoltenVK/Layers/MVKExtensions.h
@@ -85,6 +85,20 @@
*/
std::string enabledNamesString(const char* separator = " ", bool prefixFirstWithSeparator = false) const;
+ /**
+ * If pProperties is null, the value of pCount is updated with the number of extensions
+ * enabled in this list.
+ *
+ * If pProperties is not null, then pCount extension properties are copied into the array.
+ * If the number of available extensions is less than pCount, the value of pCount is updated
+ * to indicate the number of extension properties actually returned in the array.
+ *
+ * Returns VK_SUCCESS if successful. Returns VK_INCOMPLETE if the number of extensions
+ * enabled in this list is larger than the specified pCount. Returns other values
+ * if an error occurs.
+ */
+ VkResult getProperties(uint32_t* pCount, VkExtensionProperties* pProperties);
+
MVKExtensionList(MVKVulkanAPIObject* apiObject, bool enableForPlatform = false);
protected:
diff --git a/MoltenVK/MoltenVK/Layers/MVKExtensions.mm b/MoltenVK/MoltenVK/Layers/MVKExtensions.mm
index 8ca031a..f6bad88 100644
--- a/MoltenVK/MoltenVK/Layers/MVKExtensions.mm
+++ b/MoltenVK/MoltenVK/Layers/MVKExtensions.mm
@@ -46,19 +46,43 @@
// Returns whether the specified properties are valid for this platform
static bool mvkIsSupportedOnPlatform(VkExtensionProperties* pProperties) {
-#if !(MVK_IOS)
+#if MVK_MACOS
if (pProperties == &kVkExtProps_EXT_MEMORY_BUDGET) {
return mvkOSVersion() >= 10.13;
}
+ if (pProperties == &kVkExtProps_EXT_POST_DEPTH_COVERAGE) { return false; }
+ if (pProperties == &kVkExtProps_EXT_SHADER_STENCIL_EXPORT) {
+ return mvkOSVersion() >= 10.14;
+ }
+ if (pProperties == &kVkExtProps_EXT_TEXEL_BUFFER_ALIGNMENT) {
+ return mvkOSVersion() >= 10.13;
+ }
if (pProperties == &kVkExtProps_MVK_IOS_SURFACE) { return false; }
+ if (pProperties == &kVkExtProps_AMD_SHADER_IMAGE_LOAD_STORE_LOD) { return false; }
+ if (pProperties == &kVkExtProps_AMD_SHADER_TRINARY_MINMAX) {
+ return mvkOSVersion() >= 10.14;
+ }
if (pProperties == &kVkExtProps_IMG_FORMAT_PVRTC) { return false; }
#endif
-#if !(MVK_MACOS)
+#if MVK_IOS
if (pProperties == &kVkExtProps_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE) { return false; }
if (pProperties == &kVkExtProps_EXT_MEMORY_BUDGET) {
return mvkOSVersion() >= 11.0;
}
+ if (pProperties == &kVkExtProps_EXT_POST_DEPTH_COVERAGE) {
+ return mvkOSVersion() >= 11.0;
+ }
+ if (pProperties == &kVkExtProps_EXT_SHADER_STENCIL_EXPORT) {
+ return mvkOSVersion() >= 12.0;
+ }
+ if (pProperties == &kVkExtProps_EXT_SWAPCHAIN_COLOR_SPACE) { return false; }
+ if (pProperties == &kVkExtProps_EXT_TEXEL_BUFFER_ALIGNMENT) {
+ return mvkOSVersion() >= 11.0;
+ }
if (pProperties == &kVkExtProps_MVK_MACOS_SURFACE) { return false; }
+ if (pProperties == &kVkExtProps_AMD_SHADER_TRINARY_MINMAX) {
+ return mvkOSVersion() >= 12.0;
+ }
#endif
return true;
@@ -157,3 +181,31 @@
}
return logMsg;
}
+
+VkResult MVKExtensionList::getProperties(uint32_t* pCount, VkExtensionProperties* pProperties) {
+
+ uint32_t enabledCnt = 0;
+
+ // Iterate extensions and handle those that are enabled. Count them,
+ // and if they are to be returned, and there is room, do so.
+ uint32_t extnCnt = getCount();
+ MVKExtension* extnAry = &extensionArray;
+ for (uint32_t extnIdx = 0; extnIdx < extnCnt; extnIdx++) {
+ if (extnAry[extnIdx].enabled) {
+ if (pProperties) {
+ if (enabledCnt < *pCount) {
+ pProperties[enabledCnt] = *(extnAry[extnIdx].pProperties);
+ } else {
+ return VK_INCOMPLETE;
+ }
+ }
+ enabledCnt++;
+ }
+ }
+
+ // Return the count of enabled extensions. This will either be a
+ // count of all enabled extensions, or a count of those returned.
+ *pCount = enabledCnt;
+ return VK_SUCCESS;
+}
+
diff --git a/MoltenVK/MoltenVK/Layers/MVKLayers.mm b/MoltenVK/MoltenVK/Layers/MVKLayers.mm
index bbc5a79..0fb19e6 100644
--- a/MoltenVK/MoltenVK/Layers/MVKLayers.mm
+++ b/MoltenVK/MoltenVK/Layers/MVKLayers.mm
@@ -32,29 +32,7 @@
VkResult MVKLayer::getExtensionProperties(uint32_t* pCount, VkExtensionProperties* pProperties) {
- uint32_t enabledCnt = 0;
-
- // Iterate extensions and handle those that are enabled. Count them,
- // and if they are to be returned, and there is room, do so.
- uint32_t extnCnt = _supportedExtensions.getCount();
- MVKExtension* extnAry = &_supportedExtensions.extensionArray;
- for (uint32_t extnIdx = 0; extnIdx < extnCnt; extnIdx++) {
- if (extnAry[extnIdx].enabled) {
- if (pProperties) {
- if (enabledCnt < *pCount) {
- pProperties[enabledCnt] = *(extnAry[extnIdx].pProperties);
- } else {
- return VK_INCOMPLETE;
- }
- }
- enabledCnt++;
- }
- }
-
- // Return the count of enabled extensions. This will either be a
- // count of all enabled extensions, or a count of those returned.
- *pCount = enabledCnt;
- return VK_SUCCESS;
+ return _supportedExtensions.getProperties(pCount, pProperties);
}
diff --git a/MoltenVK/MoltenVK/OS/MVKGPUCapture.mm b/MoltenVK/MoltenVK/OS/MVKGPUCapture.mm
index 156a16e..4ae0de9 100644
--- a/MoltenVK/MoltenVK/OS/MVKGPUCapture.mm
+++ b/MoltenVK/MoltenVK/OS/MVKGPUCapture.mm
@@ -59,8 +59,10 @@
MVKGPUCaptureScope::MVKGPUCaptureScope(MVKQueue* mvkQueue, const char* purpose) : _queue(mvkQueue) {
_mtlQueue = [_queue->getMTLCommandQueue() retain]; // retained
if (mvkOSVersion() >= kMinOSVersionMTLCaptureScope) {
+ NSString* nsQLbl = [[NSString alloc] initWithUTF8String: (_queue->getName() + "-" + purpose).c_str()]; // temp retained
_mtlCaptureScope = [[MTLCaptureManager sharedCaptureManager] newCaptureScopeWithCommandQueue: _mtlQueue]; // retained
- _mtlCaptureScope.label = @((_queue->getName() + "-" + purpose).c_str());
+ _mtlCaptureScope.label = nsQLbl;
+ [nsQLbl release]; // release temp
}
}
diff --git a/MoltenVK/MoltenVK/Utility/MVKFoundation.h b/MoltenVK/MoltenVK/Utility/MVKFoundation.h
index 00b0b85..0fddedd 100644
--- a/MoltenVK/MoltenVK/Utility/MVKFoundation.h
+++ b/MoltenVK/MoltenVK/Utility/MVKFoundation.h
@@ -391,6 +391,13 @@
}
#endif
+/** Returns whether the container contains an item equal to the value. */
+template<class C, class T>
+bool contains(const C& container, const T& val) {
+ for (const T& cVal : container) { if (cVal == val) { return true; } }
+ return false;
+}
+
/** Removes the first occurance of the specified value from the specified container. */
template<class C, class T>
void mvkRemoveFirstOccurance(C& container, T val) {
@@ -465,19 +472,19 @@
template<typename T1, typename T2>
void mvkDisableFlag(T1& value, const T2 bitMask) { value &= ~bitMask; }
-/** Returns whether the specified value has ALL of the flags specified in bitMask enabled (set to 1). */
-template<typename T1, typename T2>
-bool mvkAreFlagsEnabled(T1 value, const T2 bitMask) { return ((value & bitMask) == bitMask); }
-
/** Returns whether the specified value has ANY of the flags specified in bitMask enabled (set to 1). */
template<typename T1, typename T2>
bool mvkIsAnyFlagEnabled(T1 value, const T2 bitMask) { return !!(value & bitMask); }
-/** Returns whether the specified value has ONLY ALL of the flags specified in bitMask enabled (set to 1), and none others. */
+/** Returns whether the specified value has ALL of the flags specified in bitMask enabled (set to 1). */
template<typename T1, typename T2>
-bool mvkAreOnlyAllFlagsEnabled(T1 value, const T2 bitMask) { return (value == bitMask); }
+bool mvkAreAllFlagsEnabled(T1 value, const T2 bitMask) { return ((value & bitMask) == bitMask); }
/** Returns whether the specified value has ONLY one or more of the flags specified in bitMask enabled (set to 1), and none others. */
template<typename T1, typename T2>
-bool mvkAreOnlyAnyFlagsEnabled(T1 value, const T2 bitMask) { return (mvkIsAnyFlagEnabled(value, bitMask) && ((value | bitMask) == bitMask)); }
+bool mvkIsOnlyAnyFlagEnabled(T1 value, const T2 bitMask) { return (mvkIsAnyFlagEnabled(value, bitMask) && ((value | bitMask) == bitMask)); }
+
+/** Returns whether the specified value has ONLY ALL of the flags specified in bitMask enabled (set to 1), and none others. */
+template<typename T1, typename T2>
+bool mvkAreOnlyAllFlagsEnabled(T1 value, const T2 bitMask) { return (value == bitMask); }
diff --git a/MoltenVK/MoltenVK/Utility/MVKWatermark.mm b/MoltenVK/MoltenVK/Utility/MVKWatermark.mm
index db7740c..cfc4b56 100644
--- a/MoltenVK/MoltenVK/Utility/MVKWatermark.mm
+++ b/MoltenVK/MoltenVK/Utility/MVKWatermark.mm
@@ -75,7 +75,7 @@
}
id<MTLRenderPipelineState> MVKWatermark::newRenderPipelineState() {
- MTLRenderPipelineDescriptor* plDesc = [[MTLRenderPipelineDescriptor new] autorelease];
+ MTLRenderPipelineDescriptor* plDesc = [MTLRenderPipelineDescriptor new]; // temp retained
plDesc.label = _mtlName;
plDesc.vertexFunction = _mtlFunctionVertex;
@@ -128,7 +128,8 @@
NSError* err = nil;
id<MTLRenderPipelineState> rps = [_mtlDevice newRenderPipelineStateWithDescriptor: plDesc error: &err]; // retained
MVKAssert( !err, "Could not create watermark pipeline state (Error code %li)\n%s", (long)err.code, err.localizedDescription.UTF8String);
- return rps;
+ [plDesc release]; // temp released
+ return rps;
}
@@ -296,21 +297,26 @@
bytesPerRow: textureBytesPerRow
bytesPerImage: 0];
- MTLSamplerDescriptor* sampDesc = [[MTLSamplerDescriptor new] autorelease];
+ MTLSamplerDescriptor* sampDesc = [MTLSamplerDescriptor new]; // temp retained
sampDesc.minFilter = MTLSamplerMinMagFilterLinear;
- _mtlSamplerState = [_mtlDevice newSamplerStateWithDescriptor: sampDesc]; // retained
+ _mtlSamplerState = [_mtlDevice newSamplerStateWithDescriptor: sampDesc]; // retained
+ [sampDesc release]; // temp released
}
// Initialize the shader functions for rendering the watermark
void MVKWatermark::initShaders(const char* mslSourceCode) {
NSError* err = nil;
- id<MTLLibrary> mtlLib = [[_mtlDevice newLibraryWithSource: @(mslSourceCode)
- options: nil
- error: &err] autorelease];
+ NSString* nsSrc = [[NSString alloc] initWithUTF8String: mslSourceCode]; // temp retained
+ id<MTLLibrary> mtlLib = [_mtlDevice newLibraryWithSource: nsSrc
+ options: nil
+ error: &err]; // temp retained
MVKAssert( !err, "Could not compile watermark shaders (Error code %li):\n%s", (long)err.code, err.localizedDescription.UTF8String);
_mtlFunctionVertex = [mtlLib newFunctionWithName: @"watermarkVertex"]; // retained
_mtlFunctionFragment = [mtlLib newFunctionWithName: @"watermarkFragment"]; // retained
+
+ [nsSrc release]; // temp released
+ [mtlLib release]; // temp released
}
// Initialize the vertex buffers to use for rendering the watermark
diff --git a/MoltenVK/MoltenVK/Vulkan/mvk_datatypes.hpp b/MoltenVK/MoltenVK/Vulkan/mvk_datatypes.hpp
index 6cc918f..62eeae7 100644
--- a/MoltenVK/MoltenVK/Vulkan/mvk_datatypes.hpp
+++ b/MoltenVK/MoltenVK/Vulkan/mvk_datatypes.hpp
@@ -22,6 +22,8 @@
#include "mvk_datatypes.h"
+#include <functional>
+
class MVKBaseObject;
/*
@@ -75,4 +77,13 @@
MTLTessellationPartitionMode mvkMTLTessellationPartitionModeFromSpvExecutionModeInObj(uint32_t spvMode, MVKBaseObject* mvkObj);
#define mvkMTLTessellationPartitionModeFromSpvExecutionMode(spvMode) mvkMTLTessellationPartitionModeFromSpvExecutionModeInObj(spvMode, this)
+
+#pragma mark -
+#pragma mark Image properties
+
+#pragma mark Texture formats
+
+/** Enumerates all formats that support the given features, calling a specified function for each one. */
+void mvkEnumerateSupportedFormats(VkFormatProperties properties, bool any, std::function<bool(VkFormat)> func);
+
#endif
diff --git a/MoltenVK/MoltenVK/Vulkan/mvk_datatypes.mm b/MoltenVK/MoltenVK/Vulkan/mvk_datatypes.mm
index 0cdf559..e3890a0 100644
--- a/MoltenVK/MoltenVK/Vulkan/mvk_datatypes.mm
+++ b/MoltenVK/MoltenVK/Vulkan/mvk_datatypes.mm
@@ -69,7 +69,7 @@
#if MVK_MACOS
// macOS does not support linear images as framebuffer attachments.
-#define MVK_FMT_LINEAR_TILING_FEATS MVK_FMT_IMAGE_FEATS
+#define MVK_FMT_LINEAR_TILING_FEATS (MVK_FMT_IMAGE_FEATS | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT)
// macOS also does not support E5B9G9R9 for anything but filtering.
#define MVK_FMT_E5B9G9R9_FEATS MVK_FMT_COMPRESSED_FEATS
@@ -245,7 +245,7 @@
MVK_MAKE_FMT_STRUCT( VK_FORMAT_R8_SSCALED, MTLPixelFormatInvalid, MTLPixelFormatInvalid, kMTLFmtNA, kMTLFmtNA, 1, 1, 1, MTLVertexFormatInvalid, MTLVertexFormatInvalid, kMTLFmtNA, kMTLFmtNA, kMVKFormatColorFloat, MVK_FMT_NO_FEATS, MVK_FMT_NO_FEATS ),
MVK_MAKE_FMT_STRUCT( VK_FORMAT_R8_UINT, MTLPixelFormatR8Uint, MTLPixelFormatInvalid, 8.0, 10.11, 1, 1, 1, MTLVertexFormatUChar, MTLVertexFormatUChar2, 11.0, 10.13, kMVKFormatColorUInt8, MVK_FMT_COLOR_INTEGER_FEATS, MVK_FMT_BUFFER_VTX_FEATS ),
MVK_MAKE_FMT_STRUCT( VK_FORMAT_R8_SINT, MTLPixelFormatR8Sint, MTLPixelFormatInvalid, 8.0, 10.11, 1, 1, 1, MTLVertexFormatChar, MTLVertexFormatChar2, 11.0, 10.13, kMVKFormatColorInt8, MVK_FMT_COLOR_INTEGER_FEATS, MVK_FMT_BUFFER_VTX_FEATS ),
- MVK_MAKE_FMT_STRUCT( VK_FORMAT_R8_SRGB, MTLPixelFormatR8Unorm_sRGB, MTLPixelFormatInvalid, 8.0, kMTLFmtNA, 1, 1, 1, MTLVertexFormatUCharNormalized, MTLVertexFormatUChar2Normalized, 11.0, 10.13, kMVKFormatColorFloat, MVK_FMT_COLOR_FEATS, MVK_FMT_BUFFER_VTX_FEATS ),
+ MVK_MAKE_FMT_STRUCT( VK_FORMAT_R8_SRGB, MTLPixelFormatR8Unorm_sRGB, MTLPixelFormatInvalid, 8.0, kMTLFmtNA, 1, 1, 1, MTLVertexFormatUCharNormalized, MTLVertexFormatUChar2Normalized, 11.0, 10.13, kMVKFormatColorFloat, MVK_FMT_COLOR_FEATS, MVK_FMT_BUFFER_FEATS ),
MVK_MAKE_FMT_STRUCT( VK_FORMAT_R8G8_UNORM, MTLPixelFormatRG8Unorm, MTLPixelFormatInvalid, 8.0, 10.11, 1, 1, 2, MTLVertexFormatUChar2Normalized, MTLVertexFormatInvalid, 8.0, 10.11, kMVKFormatColorFloat, MVK_FMT_COLOR_FEATS, MVK_FMT_BUFFER_VTX_FEATS ),
MVK_MAKE_FMT_STRUCT( VK_FORMAT_R8G8_SNORM, MTLPixelFormatRG8Snorm, MTLPixelFormatInvalid, 8.0, 10.11, 1, 1, 2, MTLVertexFormatChar2Normalized, MTLVertexFormatInvalid, 8.0, 10.11, kMVKFormatColorFloat, MVK_FMT_COLOR_FEATS, MVK_FMT_BUFFER_VTX_FEATS ),
@@ -253,7 +253,7 @@
MVK_MAKE_FMT_STRUCT( VK_FORMAT_R8G8_SSCALED, MTLPixelFormatInvalid, MTLPixelFormatInvalid, kMTLFmtNA, kMTLFmtNA, 1, 1, 2, MTLVertexFormatInvalid, MTLVertexFormatInvalid, kMTLFmtNA, kMTLFmtNA, kMVKFormatColorFloat, MVK_FMT_NO_FEATS, MVK_FMT_NO_FEATS ),
MVK_MAKE_FMT_STRUCT( VK_FORMAT_R8G8_UINT, MTLPixelFormatRG8Uint, MTLPixelFormatInvalid, 8.0, 10.11, 1, 1, 2, MTLVertexFormatUChar2, MTLVertexFormatInvalid, 8.0, 10.11, kMVKFormatColorUInt8, MVK_FMT_COLOR_INTEGER_FEATS, MVK_FMT_BUFFER_VTX_FEATS ),
MVK_MAKE_FMT_STRUCT( VK_FORMAT_R8G8_SINT, MTLPixelFormatRG8Sint, MTLPixelFormatInvalid, 8.0, 10.11, 1, 1, 2, MTLVertexFormatChar2, MTLVertexFormatInvalid, 8.0, 10.11, kMVKFormatColorInt8, MVK_FMT_COLOR_INTEGER_FEATS, MVK_FMT_BUFFER_VTX_FEATS ),
- MVK_MAKE_FMT_STRUCT( VK_FORMAT_R8G8_SRGB, MTLPixelFormatRG8Unorm_sRGB, MTLPixelFormatInvalid, 8.0, kMTLFmtNA, 1, 1, 2, MTLVertexFormatUChar2Normalized, MTLVertexFormatInvalid, 8.0, 10.11, kMVKFormatColorFloat, MVK_FMT_COLOR_FEATS, MVK_FMT_BUFFER_VTX_FEATS ),
+ MVK_MAKE_FMT_STRUCT( VK_FORMAT_R8G8_SRGB, MTLPixelFormatRG8Unorm_sRGB, MTLPixelFormatInvalid, 8.0, kMTLFmtNA, 1, 1, 2, MTLVertexFormatUChar2Normalized, MTLVertexFormatInvalid, 8.0, 10.11, kMVKFormatColorFloat, MVK_FMT_COLOR_FEATS, MVK_FMT_BUFFER_FEATS ),
MVK_MAKE_FMT_STRUCT( VK_FORMAT_R8G8B8_UNORM, MTLPixelFormatInvalid, MTLPixelFormatInvalid, kMTLFmtNA, kMTLFmtNA, 1, 1, 3, MTLVertexFormatUChar3Normalized, MTLVertexFormatInvalid, 8.0, 10.11, kMVKFormatColorFloat, MVK_FMT_COLOR_FEATS, MVK_FMT_BUFFER_VTX_FEATS ),
MVK_MAKE_FMT_STRUCT( VK_FORMAT_R8G8B8_SNORM, MTLPixelFormatInvalid, MTLPixelFormatInvalid, kMTLFmtNA, kMTLFmtNA, 1, 1, 3, MTLVertexFormatChar3Normalized, MTLVertexFormatInvalid, 8.0, 10.11, kMVKFormatColorFloat, MVK_FMT_COLOR_FEATS, MVK_FMT_BUFFER_VTX_FEATS ),
@@ -261,7 +261,7 @@
MVK_MAKE_FMT_STRUCT( VK_FORMAT_R8G8B8_SSCALED, MTLPixelFormatInvalid, MTLPixelFormatInvalid, kMTLFmtNA, kMTLFmtNA, 1, 1, 3, MTLVertexFormatInvalid, MTLVertexFormatInvalid, kMTLFmtNA, kMTLFmtNA, kMVKFormatColorFloat, MVK_FMT_NO_FEATS, MVK_FMT_NO_FEATS ),
MVK_MAKE_FMT_STRUCT( VK_FORMAT_R8G8B8_UINT, MTLPixelFormatInvalid, MTLPixelFormatInvalid, kMTLFmtNA, kMTLFmtNA, 1, 1, 3, MTLVertexFormatUChar3, MTLVertexFormatInvalid, 8.0, 10.11, kMVKFormatColorUInt8, MVK_FMT_COLOR_INTEGER_FEATS, MVK_FMT_BUFFER_VTX_FEATS ),
MVK_MAKE_FMT_STRUCT( VK_FORMAT_R8G8B8_SINT, MTLPixelFormatInvalid, MTLPixelFormatInvalid, kMTLFmtNA, kMTLFmtNA, 1, 1, 3, MTLVertexFormatChar3, MTLVertexFormatInvalid, 8.0, 10.11, kMVKFormatColorInt8, MVK_FMT_COLOR_INTEGER_FEATS, MVK_FMT_BUFFER_VTX_FEATS ),
- MVK_MAKE_FMT_STRUCT( VK_FORMAT_R8G8B8_SRGB, MTLPixelFormatInvalid, MTLPixelFormatInvalid, kMTLFmtNA, kMTLFmtNA, 1, 1, 3, MTLVertexFormatUChar3Normalized, MTLVertexFormatInvalid, 8.0, 10.11, kMVKFormatColorFloat, MVK_FMT_COLOR_FEATS, MVK_FMT_BUFFER_VTX_FEATS ),
+ MVK_MAKE_FMT_STRUCT( VK_FORMAT_R8G8B8_SRGB, MTLPixelFormatInvalid, MTLPixelFormatInvalid, kMTLFmtNA, kMTLFmtNA, 1, 1, 3, MTLVertexFormatUChar3Normalized, MTLVertexFormatInvalid, 8.0, 10.11, kMVKFormatColorFloat, MVK_FMT_COLOR_FEATS, MVK_FMT_BUFFER_FEATS ),
MVK_MAKE_FMT_STRUCT( VK_FORMAT_B8G8R8_UNORM, MTLPixelFormatInvalid, MTLPixelFormatInvalid, kMTLFmtNA, kMTLFmtNA, 1, 1, 3, MTLVertexFormatInvalid, MTLVertexFormatInvalid, kMTLFmtNA, kMTLFmtNA, kMVKFormatColorFloat, MVK_FMT_NO_FEATS, MVK_FMT_NO_FEATS ),
MVK_MAKE_FMT_STRUCT( VK_FORMAT_B8G8R8_SNORM, MTLPixelFormatInvalid, MTLPixelFormatInvalid, kMTLFmtNA, kMTLFmtNA, 1, 1, 3, MTLVertexFormatInvalid, MTLVertexFormatInvalid, kMTLFmtNA, kMTLFmtNA, kMVKFormatColorFloat, MVK_FMT_NO_FEATS, MVK_FMT_NO_FEATS ),
@@ -277,7 +277,7 @@
MVK_MAKE_FMT_STRUCT( VK_FORMAT_R8G8B8A8_SSCALED, MTLPixelFormatInvalid, MTLPixelFormatInvalid, kMTLFmtNA, kMTLFmtNA, 1, 1, 4, MTLVertexFormatInvalid, MTLVertexFormatInvalid, kMTLFmtNA, kMTLFmtNA, kMVKFormatColorFloat, MVK_FMT_NO_FEATS, MVK_FMT_NO_FEATS ),
MVK_MAKE_FMT_STRUCT( VK_FORMAT_R8G8B8A8_UINT, MTLPixelFormatRGBA8Uint, MTLPixelFormatInvalid, 8.0, 10.11, 1, 1, 4, MTLVertexFormatUChar4, MTLVertexFormatInvalid, 8.0, 10.11, kMVKFormatColorUInt8, MVK_FMT_COLOR_INTEGER_FEATS, MVK_FMT_BUFFER_VTX_FEATS ),
MVK_MAKE_FMT_STRUCT( VK_FORMAT_R8G8B8A8_SINT, MTLPixelFormatRGBA8Sint, MTLPixelFormatInvalid, 8.0, 10.11, 1, 1, 4, MTLVertexFormatChar4, MTLVertexFormatInvalid, 8.0, 10.11, kMVKFormatColorInt8, MVK_FMT_COLOR_INTEGER_FEATS, MVK_FMT_BUFFER_VTX_FEATS ),
- MVK_MAKE_FMT_STRUCT( VK_FORMAT_R8G8B8A8_SRGB, MTLPixelFormatRGBA8Unorm_sRGB, MTLPixelFormatInvalid, 8.0, 10.11, 1, 1, 4, MTLVertexFormatUChar4Normalized, MTLVertexFormatInvalid, 8.0, 10.11, kMVKFormatColorFloat, MVK_FMT_COLOR_FEATS, MVK_FMT_BUFFER_VTX_FEATS ),
+ MVK_MAKE_FMT_STRUCT( VK_FORMAT_R8G8B8A8_SRGB, MTLPixelFormatRGBA8Unorm_sRGB, MTLPixelFormatInvalid, 8.0, 10.11, 1, 1, 4, MTLVertexFormatUChar4Normalized, MTLVertexFormatInvalid, 8.0, 10.11, kMVKFormatColorFloat, MVK_FMT_COLOR_FEATS, MVK_FMT_BUFFER_FEATS ),
MVK_MAKE_FMT_STRUCT( VK_FORMAT_B8G8R8A8_UNORM, MTLPixelFormatBGRA8Unorm, MTLPixelFormatInvalid, 8.0, 10.11, 1, 1, 4, MTLVertexFormatUChar4Normalized_BGRA, MTLVertexFormatInvalid, 11.0, 10.13, kMVKFormatColorFloat, MVK_FMT_COLOR_FEATS, MVK_FMT_BUFFER_VTX_FEATS ),
MVK_MAKE_FMT_STRUCT( VK_FORMAT_B8G8R8A8_SNORM, MTLPixelFormatInvalid, MTLPixelFormatInvalid, kMTLFmtNA, kMTLFmtNA, 1, 1, 4, MTLVertexFormatInvalid, MTLVertexFormatInvalid, kMTLFmtNA, kMTLFmtNA, kMVKFormatColorFloat, MVK_FMT_NO_FEATS, MVK_FMT_NO_FEATS ),
@@ -293,9 +293,9 @@
MVK_MAKE_FMT_STRUCT( VK_FORMAT_A8B8G8R8_SSCALED_PACK32, MTLPixelFormatInvalid, MTLPixelFormatInvalid, kMTLFmtNA, kMTLFmtNA, 1, 1, 4, MTLVertexFormatInvalid, MTLVertexFormatInvalid, kMTLFmtNA, kMTLFmtNA, kMVKFormatColorFloat, MVK_FMT_NO_FEATS, MVK_FMT_NO_FEATS ),
MVK_MAKE_FMT_STRUCT( VK_FORMAT_A8B8G8R8_UINT_PACK32, MTLPixelFormatRGBA8Uint, MTLPixelFormatInvalid, 8.0, 10.11, 1, 1, 4, MTLVertexFormatUChar4, MTLVertexFormatInvalid, 8.0, 10.11, kMVKFormatColorUInt8, MVK_FMT_COLOR_INTEGER_FEATS, MVK_FMT_BUFFER_VTX_FEATS ),
MVK_MAKE_FMT_STRUCT( VK_FORMAT_A8B8G8R8_SINT_PACK32, MTLPixelFormatRGBA8Sint, MTLPixelFormatInvalid, 8.0, 10.11, 1, 1, 4, MTLVertexFormatChar4, MTLVertexFormatInvalid, 8.0, 10.11, kMVKFormatColorInt8, MVK_FMT_COLOR_INTEGER_FEATS, MVK_FMT_BUFFER_VTX_FEATS ),
- MVK_MAKE_FMT_STRUCT( VK_FORMAT_A8B8G8R8_SRGB_PACK32, MTLPixelFormatRGBA8Unorm_sRGB, MTLPixelFormatInvalid, 8.0, 10.11, 1, 1, 4, MTLVertexFormatUChar4Normalized, MTLVertexFormatInvalid, 8.0, 10.11, kMVKFormatColorFloat, MVK_FMT_COLOR_FEATS, MVK_FMT_BUFFER_VTX_FEATS ),
+ MVK_MAKE_FMT_STRUCT( VK_FORMAT_A8B8G8R8_SRGB_PACK32, MTLPixelFormatRGBA8Unorm_sRGB, MTLPixelFormatInvalid, 8.0, 10.11, 1, 1, 4, MTLVertexFormatUChar4Normalized, MTLVertexFormatInvalid, 8.0, 10.11, kMVKFormatColorFloat, MVK_FMT_COLOR_FEATS, MVK_FMT_BUFFER_FEATS ),
- MVK_MAKE_FMT_STRUCT( VK_FORMAT_A2R10G10B10_UNORM_PACK32, MTLPixelFormatBGR10A2Unorm, MTLPixelFormatInvalid, 11.0, 10.13, 1, 1, 4, MTLVertexFormatInvalid, MTLVertexFormatInvalid, kMTLFmtNA, kMTLFmtNA, kMVKFormatColorFloat, MVK_FMT_COLOR_FEATS, MVK_FMT_NO_FEATS ), // Vulkan packed is reversed
+ MVK_MAKE_FMT_STRUCT( VK_FORMAT_A2R10G10B10_UNORM_PACK32, MTLPixelFormatBGR10A2Unorm, MTLPixelFormatInvalid, 11.0, 10.13, 1, 1, 4, MTLVertexFormatInvalid, MTLVertexFormatInvalid, kMTLFmtNA, kMTLFmtNA, kMVKFormatColorFloat, MVK_FMT_COLOR_FEATS, MVK_FMT_BUFFER_FEATS ), // Vulkan packed is reversed
MVK_MAKE_FMT_STRUCT( VK_FORMAT_A2R10G10B10_SNORM_PACK32, MTLPixelFormatInvalid, MTLPixelFormatInvalid, kMTLFmtNA, kMTLFmtNA, 1, 1, 4, MTLVertexFormatInvalid, MTLVertexFormatInvalid, kMTLFmtNA, kMTLFmtNA, kMVKFormatColorFloat, MVK_FMT_NO_FEATS, MVK_FMT_NO_FEATS ),
MVK_MAKE_FMT_STRUCT( VK_FORMAT_A2R10G10B10_USCALED_PACK32, MTLPixelFormatInvalid, MTLPixelFormatInvalid, kMTLFmtNA, kMTLFmtNA, 1, 1, 4, MTLVertexFormatInvalid, MTLVertexFormatInvalid, kMTLFmtNA, kMTLFmtNA, kMVKFormatColorFloat, MVK_FMT_NO_FEATS, MVK_FMT_NO_FEATS ),
MVK_MAKE_FMT_STRUCT( VK_FORMAT_A2R10G10B10_SSCALED_PACK32, MTLPixelFormatInvalid, MTLPixelFormatInvalid, kMTLFmtNA, kMTLFmtNA, 1, 1, 4, MTLVertexFormatInvalid, MTLVertexFormatInvalid, kMTLFmtNA, kMTLFmtNA, kMVKFormatColorFloat, MVK_FMT_NO_FEATS, MVK_FMT_NO_FEATS ),
@@ -665,6 +665,26 @@
return formatDescForMTLPixelFormat(mtlFormat).mtlName;
}
+void mvkEnumerateSupportedFormats(VkFormatProperties properties, bool any, std::function<bool(VkFormat)> func) {
+ static const auto areFeaturesSupported = [any](uint32_t a, uint32_t b) {
+ if (b == 0) return true;
+ if (any)
+ return mvkIsAnyFlagEnabled(a, b);
+ else
+ return mvkAreAllFlagsEnabled(a, b);
+ };
+ for (auto& formatDesc : _formatDescriptions) {
+ if (formatDesc.isSupported() &&
+ areFeaturesSupported(formatDesc.properties.linearTilingFeatures, properties.linearTilingFeatures) &&
+ areFeaturesSupported(formatDesc.properties.optimalTilingFeatures, properties.optimalTilingFeatures) &&
+ areFeaturesSupported(formatDesc.properties.bufferFeatures, properties.bufferFeatures)) {
+ if (!func(formatDesc.vk)) {
+ break;
+ }
+ }
+ }
+}
+
#undef mvkMTLVertexFormatFromVkFormat
MVK_PUBLIC_SYMBOL MTLVertexFormat mvkMTLVertexFormatFromVkFormat(VkFormat vkFormat) {
return mvkMTLVertexFormatFromVkFormatInObj(vkFormat, nullptr);
@@ -809,64 +829,67 @@
}
MVK_PUBLIC_SYMBOL VkImageType mvkVkImageTypeFromMTLTextureType(MTLTextureType mtlTextureType) {
- switch (mtlTextureType) {
- case MTLTextureType1D: return VK_IMAGE_TYPE_1D;
- case MTLTextureType1DArray: return VK_IMAGE_TYPE_1D;
- case MTLTextureType3D: return VK_IMAGE_TYPE_3D;
- default: return VK_IMAGE_TYPE_2D;
- }
+ switch (mtlTextureType) {
+ case MTLTextureType1D:
+ case MTLTextureType1DArray:
+ return VK_IMAGE_TYPE_1D;
+ case MTLTextureType3D:
+ return VK_IMAGE_TYPE_3D;
+ default:
+ return VK_IMAGE_TYPE_2D;
+ }
}
MVK_PUBLIC_SYMBOL MTLTextureType mvkMTLTextureTypeFromVkImageViewType(VkImageViewType vkImageViewType,
- bool isMultisample) {
- switch (vkImageViewType) {
- case VK_IMAGE_VIEW_TYPE_1D: return MTLTextureType1D;
- case VK_IMAGE_VIEW_TYPE_1D_ARRAY: return MTLTextureType1DArray;
- case VK_IMAGE_VIEW_TYPE_2D: return (isMultisample ? MTLTextureType2DMultisample : MTLTextureType2D);
- case VK_IMAGE_VIEW_TYPE_2D_ARRAY:
+ bool isMultisample) {
+ switch (vkImageViewType) {
+ case VK_IMAGE_VIEW_TYPE_1D: return MTLTextureType1D;
+ case VK_IMAGE_VIEW_TYPE_1D_ARRAY: return MTLTextureType1DArray;
+ case VK_IMAGE_VIEW_TYPE_2D: return (isMultisample ? MTLTextureType2DMultisample : MTLTextureType2D);
+ case VK_IMAGE_VIEW_TYPE_2D_ARRAY:
#if MVK_MACOS
- if (isMultisample) {
- return MTLTextureType2DMultisampleArray;
- }
+ if (isMultisample) { return MTLTextureType2DMultisampleArray; }
#endif
- return MTLTextureType2DArray;
- case VK_IMAGE_VIEW_TYPE_3D: return MTLTextureType3D;
- case VK_IMAGE_VIEW_TYPE_CUBE: return MTLTextureTypeCube;
- case VK_IMAGE_VIEW_TYPE_CUBE_ARRAY: return MTLTextureTypeCubeArray;
- default: return MTLTextureType2D;
- }
+ return MTLTextureType2DArray;
+ case VK_IMAGE_VIEW_TYPE_3D: return MTLTextureType3D;
+ case VK_IMAGE_VIEW_TYPE_CUBE: return MTLTextureTypeCube;
+ case VK_IMAGE_VIEW_TYPE_CUBE_ARRAY: return MTLTextureTypeCubeArray;
+ default: return MTLTextureType2D;
+ }
}
MVK_PUBLIC_SYMBOL MTLTextureUsage mvkMTLTextureUsageFromVkImageUsageFlags(VkImageUsageFlags vkImageUsageFlags) {
MTLTextureUsage mtlUsage = MTLTextureUsageUnknown;
- if ( mvkAreFlagsEnabled(vkImageUsageFlags, VK_IMAGE_USAGE_TRANSFER_SRC_BIT) ) {
- mvkEnableFlag(mtlUsage, MTLTextureUsageShaderRead);
- }
- if ( mvkAreFlagsEnabled(vkImageUsageFlags, VK_IMAGE_USAGE_TRANSFER_DST_BIT) ) {
- mvkEnableFlag(mtlUsage, MTLTextureUsageRenderTarget);
- }
- if ( mvkAreFlagsEnabled(vkImageUsageFlags, VK_IMAGE_USAGE_SAMPLED_BIT) ) {
- mvkEnableFlag(mtlUsage, MTLTextureUsageShaderRead);
- mvkEnableFlag(mtlUsage, MTLTextureUsagePixelFormatView);
- }
- if ( mvkAreFlagsEnabled(vkImageUsageFlags, VK_IMAGE_USAGE_STORAGE_BIT) ) {
- mvkEnableFlag(mtlUsage, MTLTextureUsageShaderRead);
- mvkEnableFlag(mtlUsage, MTLTextureUsageShaderWrite);
- mvkEnableFlag(mtlUsage, MTLTextureUsagePixelFormatView);
- }
- if ( mvkAreFlagsEnabled(vkImageUsageFlags, VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT) ) {
- mvkEnableFlag(mtlUsage, MTLTextureUsageShaderRead);
- mvkEnableFlag(mtlUsage, MTLTextureUsagePixelFormatView);
- }
- if ( mvkAreFlagsEnabled(vkImageUsageFlags, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) ) {
- mvkEnableFlag(mtlUsage, MTLTextureUsageRenderTarget);
- mvkEnableFlag(mtlUsage, MTLTextureUsagePixelFormatView);
- }
- if ( mvkAreFlagsEnabled(vkImageUsageFlags, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT) ) {
- mvkEnableFlag(mtlUsage, MTLTextureUsageRenderTarget);
- mvkDisableFlag(mtlUsage, MTLTextureUsagePixelFormatView); // Clears bit. Do this last.
- }
+ // Read from...
+ if (mvkIsAnyFlagEnabled(vkImageUsageFlags, (VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
+ VK_IMAGE_USAGE_SAMPLED_BIT |
+ VK_IMAGE_USAGE_STORAGE_BIT |
+ VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT))) {
+ mvkEnableFlag(mtlUsage, MTLTextureUsageShaderRead);
+ }
+
+ // Write to...
+ if (mvkIsAnyFlagEnabled(vkImageUsageFlags, (VK_IMAGE_USAGE_STORAGE_BIT))) {
+ mvkEnableFlag(mtlUsage, MTLTextureUsageShaderWrite);
+ }
+
+ // Render to...
+ if (mvkIsAnyFlagEnabled(vkImageUsageFlags, (VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
+ VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT |
+ VK_IMAGE_USAGE_TRANSFER_DST_BIT))) { // Scaling a BLIT may use rendering.
+ mvkEnableFlag(mtlUsage, MTLTextureUsageRenderTarget);
+ }
+
+ // Create view on...
+ if (mvkIsAnyFlagEnabled(vkImageUsageFlags, (VK_IMAGE_USAGE_TRANSFER_SRC_BIT | // May use temp view if transfer involves format change
+ VK_IMAGE_USAGE_SAMPLED_BIT |
+ VK_IMAGE_USAGE_STORAGE_BIT |
+ VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT |
+ VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
+ VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT))) { // D/S may be filtered out after device check
+ mvkEnableFlag(mtlUsage, MTLTextureUsagePixelFormatView);
+ }
return mtlUsage;
}
@@ -874,12 +897,12 @@
MVK_PUBLIC_SYMBOL VkImageUsageFlags mvkVkImageUsageFlagsFromMTLTextureUsage(MTLTextureUsage mtlUsage, MTLPixelFormat mtlFormat) {
VkImageUsageFlags vkImageUsageFlags = 0;
- if ( mvkAreFlagsEnabled(mtlUsage, MTLTextureUsageShaderRead) ) {
+ if ( mvkAreAllFlagsEnabled(mtlUsage, MTLTextureUsageShaderRead) ) {
mvkEnableFlag(vkImageUsageFlags, VK_IMAGE_USAGE_TRANSFER_SRC_BIT);
mvkEnableFlag(vkImageUsageFlags, VK_IMAGE_USAGE_SAMPLED_BIT);
mvkEnableFlag(vkImageUsageFlags, VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT);
}
- if ( mvkAreFlagsEnabled(mtlUsage, MTLTextureUsageRenderTarget) ) {
+ if ( mvkAreAllFlagsEnabled(mtlUsage, MTLTextureUsageRenderTarget) ) {
mvkEnableFlag(vkImageUsageFlags, VK_IMAGE_USAGE_TRANSFER_DST_BIT);
if (mvkMTLPixelFormatIsDepthFormat(mtlFormat) || mvkMTLPixelFormatIsStencilFormat(mtlFormat)) {
mvkEnableFlag(vkImageUsageFlags, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT);
@@ -887,7 +910,7 @@
mvkEnableFlag(vkImageUsageFlags, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT);
}
}
- if ( mvkAreFlagsEnabled(mtlUsage, MTLTextureUsageShaderWrite) ) {
+ if ( mvkAreAllFlagsEnabled(mtlUsage, MTLTextureUsageShaderWrite) ) {
mvkEnableFlag(vkImageUsageFlags, VK_IMAGE_USAGE_STORAGE_BIT);
}
@@ -1003,10 +1026,10 @@
MVK_PUBLIC_SYMBOL MTLColorWriteMask mvkMTLColorWriteMaskFromVkChannelFlags(VkColorComponentFlags vkWriteFlags) {
MTLColorWriteMask mtlWriteMask = MTLColorWriteMaskNone;
- if (mvkAreFlagsEnabled(vkWriteFlags, VK_COLOR_COMPONENT_R_BIT)) { mvkEnableFlag(mtlWriteMask, MTLColorWriteMaskRed); }
- if (mvkAreFlagsEnabled(vkWriteFlags, VK_COLOR_COMPONENT_G_BIT)) { mvkEnableFlag(mtlWriteMask, MTLColorWriteMaskGreen); }
- if (mvkAreFlagsEnabled(vkWriteFlags, VK_COLOR_COMPONENT_B_BIT)) { mvkEnableFlag(mtlWriteMask, MTLColorWriteMaskBlue); }
- if (mvkAreFlagsEnabled(vkWriteFlags, VK_COLOR_COMPONENT_A_BIT)) { mvkEnableFlag(mtlWriteMask, MTLColorWriteMaskAlpha); }
+ if (mvkAreAllFlagsEnabled(vkWriteFlags, VK_COLOR_COMPONENT_R_BIT)) { mvkEnableFlag(mtlWriteMask, MTLColorWriteMaskRed); }
+ if (mvkAreAllFlagsEnabled(vkWriteFlags, VK_COLOR_COMPONENT_G_BIT)) { mvkEnableFlag(mtlWriteMask, MTLColorWriteMaskGreen); }
+ if (mvkAreAllFlagsEnabled(vkWriteFlags, VK_COLOR_COMPONENT_B_BIT)) { mvkEnableFlag(mtlWriteMask, MTLColorWriteMaskBlue); }
+ if (mvkAreAllFlagsEnabled(vkWriteFlags, VK_COLOR_COMPONENT_A_BIT)) { mvkEnableFlag(mtlWriteMask, MTLColorWriteMaskAlpha); }
return mtlWriteMask;
}
@@ -1325,14 +1348,14 @@
// barrier is to be placed before the render stages, it should come before the vertex stage, otherwise
// if the barrier is to be placed after the render stages, it should come after the fragment stage.
if (placeBarrierBefore) {
- bool placeBeforeFragment = mvkAreOnlyAnyFlagsEnabled(vkStages, (VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT |
+ bool placeBeforeFragment = mvkIsOnlyAnyFlagEnabled(vkStages, (VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT |
VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT));
return placeBeforeFragment ? MTLRenderStageFragment : MTLRenderStageVertex;
} else {
- bool placeAfterVertex = mvkAreOnlyAnyFlagsEnabled(vkStages, (VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
+ bool placeAfterVertex = mvkIsOnlyAnyFlagEnabled(vkStages, (VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
@@ -1365,10 +1388,10 @@
MVK_PUBLIC_SYMBOL MTLStorageMode mvkMTLStorageModeFromVkMemoryPropertyFlags(VkMemoryPropertyFlags vkFlags) {
// If not visible to the host: Private
- if ( !mvkAreFlagsEnabled(vkFlags, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) ) {
+ if ( !mvkAreAllFlagsEnabled(vkFlags, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) ) {
#if MVK_IOS
// iOS: If lazily allocated, Memoryless
- if (mvkAreFlagsEnabled(vkFlags, VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT)) {
+ if (mvkAreAllFlagsEnabled(vkFlags, VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT)) {
return MTLStorageModeMemoryless;
}
#endif
@@ -1376,7 +1399,7 @@
}
// If visible to the host and coherent: Shared
- if (mvkAreFlagsEnabled(vkFlags, VK_MEMORY_PROPERTY_HOST_COHERENT_BIT)) {
+ if (mvkAreAllFlagsEnabled(vkFlags, VK_MEMORY_PROPERTY_HOST_COHERENT_BIT)) {
return MTLStorageModeShared;
}
@@ -1392,44 +1415,9 @@
return MTLCPUCacheModeDefaultCache;
}
-MVK_PUBLIC_SYMBOL MTLResourceOptions mvkMTLResourceOptionsFromVkMemoryPropertyFlags(VkMemoryPropertyFlags vkFlags) {
- MTLResourceOptions mtlFlags = 0;
-
- // First set the resource CPU cache mode
- MTLCPUCacheMode mtlCPUMode = mvkMTLCPUCacheModeFromVkMemoryPropertyFlags(vkFlags);
- switch (mtlCPUMode) {
- case MTLCPUCacheModeDefaultCache:
- mvkEnableFlag(mtlFlags, MTLResourceCPUCacheModeDefaultCache);
- break;
- case MTLCPUCacheModeWriteCombined:
- mvkEnableFlag(mtlFlags, MTLResourceCPUCacheModeWriteCombined);
- break;
- }
-
- // Then set the resource storage mode
- MTLStorageMode mtlStgMode = mvkMTLStorageModeFromVkMemoryPropertyFlags(vkFlags);
- switch (mtlStgMode) {
- case MTLStorageModePrivate:
- mvkEnableFlag(mtlFlags, MTLResourceStorageModePrivate);
- break;
- case MTLStorageModeShared:
- mvkEnableFlag(mtlFlags, MTLResourceStorageModeShared);
- break;
-#if MVK_MACOS
- case MTLStorageModeManaged:
- mvkEnableFlag(mtlFlags, MTLResourceStorageModeManaged);
- break;
-#endif
-#if MVK_IOS
- case MTLStorageModeMemoryless:
- mvkEnableFlag(mtlFlags, MTLResourceStorageModeMemoryless);
- break;
-#endif
- default: // Silence erroneous -Wswitch-enum warning on MTLResourceStorageModeManaged under iOS
- break;
- }
-
- return mtlFlags;
+MVK_PUBLIC_SYMBOL MTLResourceOptions mvkMTLResourceOptions(MTLStorageMode mtlStorageMode,
+ MTLCPUCacheMode mtlCPUCacheMode) {
+ return (mtlStorageMode << MTLResourceStorageModeShift) | (mtlCPUCacheMode << MTLResourceCPUCacheModeShift);
}
diff --git a/MoltenVK/MoltenVK/Vulkan/vulkan.mm b/MoltenVK/MoltenVK/Vulkan/vulkan.mm
index fb5ffac..3522f87 100644
--- a/MoltenVK/MoltenVK/Vulkan/vulkan.mm
+++ b/MoltenVK/MoltenVK/Vulkan/vulkan.mm
@@ -40,29 +40,89 @@
#include "MVKSwapchain.h"
#include "MVKSurface.h"
#include "MVKFoundation.h"
+#include "MVKOSExtensions.h"
#include "MVKLogging.h"
-static bool _mvkTraceVulkanCalls = false;
-#define MVKTraceVulkanCall() if (_mvkTraceVulkanCalls) { fprintf(stderr, "[mvk-trace] %s()\n", __FUNCTION__); }
+
+#pragma mark -
+#pragma mark Tracing Vulkan calls
+
+#ifndef MVK_CONFIG_TRACE_VULKAN_CALLS
+# define MVK_CONFIG_TRACE_VULKAN_CALLS 0
+#endif
+
+static uint32_t _mvkTraceVulkanCalls = 0;
+static bool _mvkVulkanCallTracingInitialized = false;
+__attribute__((constructor)) static void MVKInitVulkanCallTracing() {
+ if (_mvkVulkanCallTracingInitialized ) { return; }
+ _mvkVulkanCallTracingInitialized = true;
+
+ MVK_SET_FROM_ENV_OR_BUILD_INT32(_mvkTraceVulkanCalls, MVK_CONFIG_TRACE_VULKAN_CALLS);
+}
+
+// Optionally log start of function calls to stderr
+static inline uint64_t MVKTraceVulkanCallStartImpl(const char* funcName) {
+ uint64_t timestamp = 0;
+ switch(_mvkTraceVulkanCalls) {
+ case 3: // Fall through
+ timestamp = mvkGetTimestamp();
+ case 2:
+ fprintf(stderr, "[mvk-trace] %s() {\n", funcName);
+ break;
+ case 1:
+ fprintf(stderr, "[mvk-trace] %s()\n", funcName);
+ break;
+ case 0:
+ default:
+ break;
+ }
+ return timestamp;
+}
+
+// Optionally log end of function calls and timings to stderr
+static inline void MVKTraceVulkanCallEndImpl(const char* funcName, uint64_t startTime) {
+ switch(_mvkTraceVulkanCalls) {
+ case 3:
+ fprintf(stderr, "[mvk-trace] } %s() (%.4f ms)\n", funcName, mvkGetElapsedMilliseconds(startTime));
+ break;
+ case 2:
+ fprintf(stderr, "[mvk-trace] } %s()\n", funcName);
+ break;
+ case 1:
+ case 0:
+ default:
+ break;
+ }
+}
+
+#define MVKTraceVulkanCallStart() uint64_t tvcStartTime = MVKTraceVulkanCallStartImpl(__FUNCTION__)
+#define MVKTraceVulkanCallEnd() MVKTraceVulkanCallEndImpl(__FUNCTION__, tvcStartTime)
+
+
+#pragma mark -
+#pragma mark Vulkan calls
MVK_PUBLIC_SYMBOL VkResult vkCreateInstance(
const VkInstanceCreateInfo* pCreateInfo,
const VkAllocationCallbacks* pAllocator,
VkInstance* pInstance) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKInstance* mvkInst = new MVKInstance(pCreateInfo);
*pInstance = mvkInst->getVkInstance();
- return mvkInst->getConfigurationResult();
+ VkResult rslt = mvkInst->getConfigurationResult();
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL void vkDestroyInstance(
VkInstance instance,
const VkAllocationCallbacks* pAllocator) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
if ( !instance ) { return; }
MVKInstance::getMVKInstance(instance)->destroy();
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL VkResult vkEnumeratePhysicalDevices(
@@ -70,18 +130,21 @@
uint32_t* pPhysicalDeviceCount,
VkPhysicalDevice* pPhysicalDevices) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKInstance* mvkInst = MVKInstance::getMVKInstance(instance);
- return mvkInst->getPhysicalDevices(pPhysicalDeviceCount, pPhysicalDevices);
+ VkResult rslt = mvkInst->getPhysicalDevices(pPhysicalDeviceCount, pPhysicalDevices);
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL void vkGetPhysicalDeviceFeatures(
VkPhysicalDevice physicalDevice,
VkPhysicalDeviceFeatures* pFeatures) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKPhysicalDevice* mvkPD = MVKPhysicalDevice::getMVKPhysicalDevice(physicalDevice);
mvkPD->getFeatures(pFeatures);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkGetPhysicalDeviceFormatProperties(
@@ -89,9 +152,10 @@
VkFormat format,
VkFormatProperties* pFormatProperties) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKPhysicalDevice* mvkPD = MVKPhysicalDevice::getMVKPhysicalDevice(physicalDevice);
mvkPD->getFormatProperties(format, pFormatProperties);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL VkResult vkGetPhysicalDeviceImageFormatProperties(
@@ -103,18 +167,21 @@
VkImageCreateFlags flags,
VkImageFormatProperties* pImageFormatProperties) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKPhysicalDevice* mvkPD = MVKPhysicalDevice::getMVKPhysicalDevice(physicalDevice);
- return mvkPD->getImageFormatProperties(format, type, tiling, usage, flags, pImageFormatProperties);
+ VkResult rslt = mvkPD->getImageFormatProperties(format, type, tiling, usage, flags, pImageFormatProperties);
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL void vkGetPhysicalDeviceProperties(
VkPhysicalDevice physicalDevice,
VkPhysicalDeviceProperties* pProperties) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKPhysicalDevice* mvkPD = MVKPhysicalDevice::getMVKPhysicalDevice(physicalDevice);
mvkPD->getProperties(pProperties);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkGetPhysicalDeviceQueueFamilyProperties(
@@ -122,43 +189,53 @@
uint32_t* pQueueFamilyPropertyCount,
VkQueueFamilyProperties* pQueueFamilyProperties) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKPhysicalDevice* mvkPD = MVKPhysicalDevice::getMVKPhysicalDevice(physicalDevice);
mvkPD->getQueueFamilyProperties(pQueueFamilyPropertyCount, pQueueFamilyProperties);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkGetPhysicalDeviceMemoryProperties(
VkPhysicalDevice physicalDevice,
VkPhysicalDeviceMemoryProperties* pMemoryProperties) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKPhysicalDevice* mvkPD = MVKPhysicalDevice::getMVKPhysicalDevice(physicalDevice);
mvkPD->getPhysicalDeviceMemoryProperties(pMemoryProperties);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL PFN_vkVoidFunction vkGetInstanceProcAddr(
VkInstance instance,
const char* pName) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
// Handle the special platform functions where the instance parameter may be NULL.
- if (strcmp(pName, "vkCreateInstance") == 0) { return (PFN_vkVoidFunction)vkCreateInstance; }
- if (strcmp(pName, "vkEnumerateInstanceExtensionProperties") == 0) { return (PFN_vkVoidFunction)vkEnumerateInstanceExtensionProperties; }
- if (strcmp(pName, "vkEnumerateInstanceLayerProperties") == 0) { return (PFN_vkVoidFunction)vkEnumerateInstanceLayerProperties; }
- if ( !instance ) { return nullptr; }
-
- MVKInstance* mvkInst = MVKInstance::getMVKInstance(instance);
- return mvkInst->getProcAddr(pName);
+ PFN_vkVoidFunction func = nullptr;
+ if (strcmp(pName, "vkCreateInstance") == 0) {
+ func = (PFN_vkVoidFunction)vkCreateInstance;
+ } else if (strcmp(pName, "vkEnumerateInstanceExtensionProperties") == 0) {
+ func = (PFN_vkVoidFunction)vkEnumerateInstanceExtensionProperties;
+ } else if (strcmp(pName, "vkEnumerateInstanceLayerProperties") == 0) {
+ func = (PFN_vkVoidFunction)vkEnumerateInstanceLayerProperties;
+ } else if (instance) {
+ MVKInstance* mvkInst = MVKInstance::getMVKInstance(instance);
+ func = mvkInst->getProcAddr(pName);
+ }
+ MVKTraceVulkanCallEnd();
+ return func;
}
MVK_PUBLIC_SYMBOL PFN_vkVoidFunction vkGetDeviceProcAddr(
VkDevice device,
const char* pName) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
- return mvkDev->getProcAddr(pName);
+ PFN_vkVoidFunction func = mvkDev->getProcAddr(pName);
+ MVKTraceVulkanCallEnd();
+ return func;
}
MVK_PUBLIC_SYMBOL VkResult vkCreateDevice(
@@ -167,20 +244,23 @@
const VkAllocationCallbacks* pAllocator,
VkDevice* pDevice) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKPhysicalDevice* mvkPD = MVKPhysicalDevice::getMVKPhysicalDevice(physicalDevice);
MVKDevice* mvkDev = new MVKDevice(mvkPD, pCreateInfo);
*pDevice = mvkDev->getVkDevice();
- return mvkDev->getConfigurationResult();
+ VkResult rslt = mvkDev->getConfigurationResult();
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL void vkDestroyDevice(
VkDevice device,
const VkAllocationCallbacks* pAllocator) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
if ( !device ) { return; }
MVKDevice::getMVKDevice(device)->destroy();
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL VkResult vkEnumerateInstanceExtensionProperties(
@@ -188,8 +268,10 @@
uint32_t* pCount,
VkExtensionProperties* pProperties) {
- MVKTraceVulkanCall();
- return MVKLayerManager::globalManager()->getLayerNamed(pLayerName)->getExtensionProperties(pCount, pProperties);
+ MVKTraceVulkanCallStart();
+ VkResult rslt = MVKLayerManager::globalManager()->getLayerNamed(pLayerName)->getExtensionProperties(pCount, pProperties);
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL VkResult vkEnumerateDeviceExtensionProperties(
@@ -198,17 +280,21 @@
uint32_t* pCount,
VkExtensionProperties* pProperties) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKPhysicalDevice* mvkPD = MVKPhysicalDevice::getMVKPhysicalDevice(physicalDevice);
- return mvkPD->getInstance()->getLayerManager()->getLayerNamed(pLayerName)->getExtensionProperties(pCount, pProperties);
+ VkResult rslt = mvkPD->getExtensionProperties(pLayerName, pCount, pProperties);
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL VkResult vkEnumerateInstanceLayerProperties(
uint32_t* pCount,
VkLayerProperties* pProperties) {
- MVKTraceVulkanCall();
- return MVKLayerManager::globalManager()->getLayerProperties(pCount, pProperties);
+ MVKTraceVulkanCallStart();
+ VkResult rslt = MVKLayerManager::globalManager()->getLayerProperties(pCount, pProperties);
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL VkResult vkEnumerateDeviceLayerProperties(
@@ -216,9 +302,11 @@
uint32_t* pCount,
VkLayerProperties* pProperties) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKPhysicalDevice* mvkPD = MVKPhysicalDevice::getMVKPhysicalDevice(physicalDevice);
- return mvkPD->getInstance()->getLayerManager()->getLayerProperties(pCount, pProperties);
+ VkResult rslt = mvkPD->getInstance()->getLayerManager()->getLayerProperties(pCount, pProperties);
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL void vkGetDeviceQueue(
@@ -227,11 +315,12 @@
uint32_t queueIndex,
VkQueue* pQueue) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
if (pQueue) {
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
*pQueue = mvkDev->getQueue(queueFamilyIndex, queueIndex)->getVkQueue();
}
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL VkResult vkQueueSubmit(
@@ -240,25 +329,31 @@
const VkSubmitInfo* pSubmits,
VkFence fence) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKQueue* mvkQ = MVKQueue::getMVKQueue(queue);
- return mvkQ->submit(submitCount, pSubmits, fence);
+ VkResult rslt = mvkQ->submit(submitCount, pSubmits, fence);
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL VkResult vkQueueWaitIdle(
VkQueue queue) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKQueue* mvkQ = MVKQueue::getMVKQueue(queue);
- return mvkQ->waitIdle();
+ VkResult rslt = mvkQ->waitIdle();
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL VkResult vkDeviceWaitIdle(
VkDevice device) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
- return mvkDev->waitIdle();
+ VkResult rslt = mvkDev->waitIdle();
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL VkResult vkAllocateMemory(
@@ -267,11 +362,12 @@
const VkAllocationCallbacks* pAllocator,
VkDeviceMemory* pMem) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
MVKDeviceMemory* mvkMem = mvkDev->allocateMemory(pAllocateInfo, pAllocator);
VkResult rslt = mvkMem->getConfigurationResult();
*pMem = (VkDeviceMemory)((rslt == VK_SUCCESS) ? mvkMem : VK_NULL_HANDLE);
+ MVKTraceVulkanCallEnd();
return rslt;
}
@@ -280,10 +376,11 @@
VkDeviceMemory mem,
const VkAllocationCallbacks* pAllocator) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
if ( !mem ) { return; }
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
mvkDev->freeMemory((MVKDeviceMemory*)mem, pAllocator);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL VkResult vkMapMemory(
@@ -294,18 +391,21 @@
VkMemoryMapFlags flags,
void** ppData) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKDeviceMemory* mvkMem = (MVKDeviceMemory*)mem;
- return mvkMem->map(offset, size, flags, ppData);
+ VkResult rslt = mvkMem->map(offset, size, flags, ppData);
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL void vkUnmapMemory(
VkDevice device,
VkDeviceMemory mem) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKDeviceMemory* mvkMem = (MVKDeviceMemory*)mem;
- return mvkMem->unmap();
+ mvkMem->unmap();
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL VkResult vkFlushMappedMemoryRanges(
@@ -313,7 +413,7 @@
uint32_t memRangeCount,
const VkMappedMemoryRange* pMemRanges) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
VkResult rslt = VK_SUCCESS;
for (uint32_t i = 0; i < memRangeCount; i++) {
const VkMappedMemoryRange* pMem = &pMemRanges[i];
@@ -321,6 +421,7 @@
VkResult r = mvkMem->flushToDevice(pMem->offset, pMem->size);
if (rslt == VK_SUCCESS) { rslt = r; }
}
+ MVKTraceVulkanCallEnd();
return rslt;
}
@@ -329,7 +430,7 @@
uint32_t memRangeCount,
const VkMappedMemoryRange* pMemRanges) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
VkResult rslt = VK_SUCCESS;
for (uint32_t i = 0; i < memRangeCount; i++) {
const VkMappedMemoryRange* pMem = &pMemRanges[i];
@@ -337,6 +438,7 @@
VkResult r = mvkMem->pullFromDevice(pMem->offset, pMem->size);
if (rslt == VK_SUCCESS) { rslt = r; }
}
+ MVKTraceVulkanCallEnd();
return rslt;
}
@@ -345,11 +447,12 @@
VkDeviceMemory memory,
VkDeviceSize* pCommittedMemoryInBytes) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
if ( !pCommittedMemoryInBytes ) { return; }
MVKDeviceMemory* mvkMem = (MVKDeviceMemory*)memory;
*pCommittedMemoryInBytes = mvkMem->getDeviceMemoryCommitment();
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL VkResult vkBindBufferMemory(
@@ -358,10 +461,12 @@
VkDeviceMemory mem,
VkDeviceSize memOffset) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKBuffer* mvkBuff = (MVKBuffer*)buffer;
MVKDeviceMemory* mvkMem = (MVKDeviceMemory*)mem;
- return mvkBuff->bindDeviceMemory(mvkMem, memOffset);
+ VkResult rslt = mvkBuff->bindDeviceMemory(mvkMem, memOffset);
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL VkResult vkBindImageMemory(
@@ -370,10 +475,12 @@
VkDeviceMemory mem,
VkDeviceSize memOffset) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKImage* mvkImg = (MVKImage*)image;
MVKDeviceMemory* mvkMem = (MVKDeviceMemory*)mem;
- return mvkImg->bindDeviceMemory(mvkMem, memOffset);
+ VkResult rslt = mvkImg->bindDeviceMemory(mvkMem, memOffset);
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL void vkGetBufferMemoryRequirements(
@@ -381,9 +488,10 @@
VkBuffer buffer,
VkMemoryRequirements* pMemoryRequirements) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKBuffer* mvkBuff = (MVKBuffer*)buffer;
mvkBuff->getMemoryRequirements(pMemoryRequirements);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkGetImageMemoryRequirements(
@@ -391,9 +499,10 @@
VkImage image,
VkMemoryRequirements* pMemoryRequirements) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKImage* mvkImg = (MVKImage*)image;
mvkImg->getMemoryRequirements(pMemoryRequirements);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkGetImageSparseMemoryRequirements(
@@ -402,13 +511,14 @@
uint32_t* pNumRequirements,
VkSparseImageMemoryRequirements* pSparseMemoryRequirements) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
// Metal does not support sparse images.
// Vulkan spec: "If the image was not created with VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT then
// pSparseMemoryRequirementCount will be set to zero and pSparseMemoryRequirements will not be written to.".
*pNumRequirements = 0;
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkGetPhysicalDeviceSparseImageFormatProperties(
@@ -421,13 +531,14 @@
uint32_t* pPropertyCount,
VkSparseImageFormatProperties* pProperties) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
// Metal does not support sparse images.
// Vulkan spec: "If VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT is not supported for the given arguments,
// pPropertyCount will be set to zero upon return, and no data will be written to pProperties.".
*pPropertyCount = 0;
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL VkResult vkQueueBindSparse(
@@ -436,9 +547,11 @@
const VkBindSparseInfo* pBindInfo,
VkFence fence) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKQueue* mvkQ = MVKQueue::getMVKQueue(queue);
- return mvkQ->reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkQueueBindSparse(): Sparse binding is not supported.");
+ VkResult rslt = mvkQ->reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkQueueBindSparse(): Sparse binding is not supported.");
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL VkResult vkCreateFence(
@@ -447,11 +560,13 @@
const VkAllocationCallbacks* pAllocator,
VkFence* pFence) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
MVKFence* mvkFence = mvkDev->createFence(pCreateInfo, pAllocator);
*pFence = (VkFence)mvkFence;
- return mvkFence->getConfigurationResult();
+ VkResult rslt = mvkFence->getConfigurationResult();
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL void vkDestroyFence(
@@ -459,10 +574,11 @@
VkFence fence,
const VkAllocationCallbacks* pAllocator) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
if ( !fence ) { return; }
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
mvkDev->destroyFence((MVKFence*)fence, pAllocator);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL VkResult vkResetFences(
@@ -470,17 +586,21 @@
uint32_t fenceCount,
const VkFence* pFences) {
- MVKTraceVulkanCall();
- return mvkResetFences(fenceCount, pFences);
+ MVKTraceVulkanCallStart();
+ VkResult rslt = mvkResetFences(fenceCount, pFences);
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL VkResult vkGetFenceStatus(
VkDevice device,
VkFence fence) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKFence* mvkFence = (MVKFence*)fence;
- return mvkFence->getIsSignaled() ? VK_SUCCESS : VK_NOT_READY;
+ VkResult rslt = mvkFence->getIsSignaled() ? VK_SUCCESS : VK_NOT_READY;
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL VkResult vkWaitForFences(
@@ -490,9 +610,11 @@
VkBool32 waitAll,
uint64_t timeout) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
- return mvkWaitForFences(mvkDev, fenceCount, pFences, waitAll, timeout);
+ VkResult rslt = mvkWaitForFences(mvkDev, fenceCount, pFences, waitAll, timeout);
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL VkResult vkCreateSemaphore(
@@ -501,11 +623,13 @@
const VkAllocationCallbacks* pAllocator,
VkSemaphore* pSemaphore) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
MVKSemaphore* mvkSem4 = mvkDev->createSemaphore(pCreateInfo, pAllocator);
*pSemaphore = (VkSemaphore)mvkSem4;
- return mvkSem4->getConfigurationResult();
+ VkResult rslt = mvkSem4->getConfigurationResult();
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL void vkDestroySemaphore(
@@ -513,10 +637,11 @@
VkSemaphore semaphore,
const VkAllocationCallbacks* pAllocator) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
if ( !semaphore ) { return; }
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
mvkDev->destroySemaphore((MVKSemaphore*)semaphore, pAllocator);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL VkResult vkCreateEvent(
@@ -525,10 +650,12 @@
const VkAllocationCallbacks* pAllocator,
VkEvent* pEvent) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
//VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
- return mvkDev->reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCreateEvent(): Vukan events are not supported.");
+ VkResult rslt = mvkDev->reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCreateEvent(): Vukan events are not supported.");
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL void vkDestroyEvent(
@@ -536,37 +663,44 @@
VkEvent event,
const VkAllocationCallbacks* pAllocator) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
if ( !event ) { return; }
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
mvkDev->reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkDestroyEvent(): Vukan events are not supported.");
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL VkResult vkGetEventStatus(
VkDevice device,
VkEvent event) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
- return mvkDev->reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkGetEventStatus(): Vukan events are not supported.");
+ VkResult rslt = mvkDev->reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkGetEventStatus(): Vukan events are not supported.");
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL VkResult vkSetEvent(
VkDevice device,
VkEvent event) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
- return mvkDev->reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkSetEvent(): Vukan events are not supported.");
+ VkResult rslt = mvkDev->reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkSetEvent(): Vukan events are not supported.");
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL VkResult vkResetEvent(
VkDevice device,
VkEvent event) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
- return mvkDev->reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkResetEvent(): Vukan events are not supported.");
+ VkResult rslt = mvkDev->reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkResetEvent(): Vukan events are not supported.");
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL VkResult vkCreateQueryPool(
@@ -575,11 +709,13 @@
const VkAllocationCallbacks* pAllocator,
VkQueryPool* pQueryPool) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
MVKQueryPool* mvkQP = mvkDev->createQueryPool(pCreateInfo, pAllocator);
*pQueryPool = (VkQueryPool)mvkQP;
- return mvkQP->getConfigurationResult();
+ VkResult rslt = mvkQP->getConfigurationResult();
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL void vkDestroyQueryPool(
@@ -587,10 +723,11 @@
VkQueryPool queryPool,
const VkAllocationCallbacks* pAllocator) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
if ( !queryPool ) { return; }
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
mvkDev->destroyQueryPool((MVKQueryPool*)queryPool, pAllocator);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL VkResult vkGetQueryPoolResults(
@@ -603,9 +740,11 @@
VkDeviceSize stride,
VkQueryResultFlags flags) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKQueryPool* mvkQP = (MVKQueryPool*)queryPool;
- return mvkQP->getResults(firstQuery, queryCount, dataSize, pData, stride, flags);
+ VkResult rslt = mvkQP->getResults(firstQuery, queryCount, dataSize, pData, stride, flags);
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL VkResult vkCreateBuffer(
@@ -614,11 +753,13 @@
const VkAllocationCallbacks* pAllocator,
VkBuffer* pBuffer) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
MVKBuffer* mvkBuff = mvkDev->createBuffer(pCreateInfo, pAllocator);
*pBuffer = (VkBuffer)mvkBuff;
- return mvkBuff->getConfigurationResult();
+ VkResult rslt = mvkBuff->getConfigurationResult();
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL void vkDestroyBuffer(
@@ -626,10 +767,11 @@
VkBuffer buffer,
const VkAllocationCallbacks* pAllocator) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
if ( !buffer ) { return; }
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
mvkDev->destroyBuffer((MVKBuffer*)buffer, pAllocator);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL VkResult vkCreateBufferView(
@@ -638,11 +780,13 @@
const VkAllocationCallbacks* pAllocator,
VkBufferView* pView) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
MVKBufferView* mvkBuffView = mvkDev->createBufferView(pCreateInfo, pAllocator);
*pView = (VkBufferView)mvkBuffView;
- return mvkBuffView->getConfigurationResult();
+ VkResult rslt = mvkBuffView->getConfigurationResult();
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL void vkDestroyBufferView(
@@ -650,10 +794,11 @@
VkBufferView bufferView,
const VkAllocationCallbacks* pAllocator) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
if ( !bufferView ) { return; }
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
mvkDev->destroyBufferView((MVKBufferView*)bufferView, pAllocator);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL VkResult vkCreateImage(
@@ -662,11 +807,13 @@
const VkAllocationCallbacks* pAllocator,
VkImage* pImage) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
MVKImage* mvkImg = mvkDev->createImage(pCreateInfo, pAllocator);
*pImage = (VkImage)mvkImg;
- return mvkImg->getConfigurationResult();
+ VkResult rslt = mvkImg->getConfigurationResult();
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL void vkDestroyImage(
@@ -674,10 +821,11 @@
VkImage image,
const VkAllocationCallbacks* pAllocator) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
if ( !image ) { return; }
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
mvkDev->destroyImage((MVKImage*)image, pAllocator);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkGetImageSubresourceLayout(
@@ -686,9 +834,10 @@
const VkImageSubresource* pSubresource,
VkSubresourceLayout* pLayout) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKImage* mvkImg = (MVKImage*)image;
mvkImg->getSubresourceLayout(pSubresource, pLayout);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL VkResult vkCreateImageView(
@@ -697,11 +846,13 @@
const VkAllocationCallbacks* pAllocator,
VkImageView* pView) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
MVKImageView* mvkImgView = mvkDev->createImageView(pCreateInfo, pAllocator);
*pView = (VkImageView)mvkImgView;
- return mvkImgView->getConfigurationResult();
+ VkResult rslt = mvkImgView->getConfigurationResult();
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL void vkDestroyImageView(
@@ -709,10 +860,11 @@
VkImageView imageView,
const VkAllocationCallbacks* pAllocator) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
if ( !imageView ) { return; }
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
mvkDev->destroyImageView((MVKImageView*)imageView, pAllocator);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL VkResult vkCreateShaderModule(
@@ -721,11 +873,13 @@
const VkAllocationCallbacks* pAllocator,
VkShaderModule* pShaderModule) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
MVKShaderModule* mvkShdrMod = mvkDev->createShaderModule(pCreateInfo, pAllocator);
*pShaderModule = (VkShaderModule)mvkShdrMod;
- return mvkShdrMod->getConfigurationResult();
+ VkResult rslt = mvkShdrMod->getConfigurationResult();
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL void vkDestroyShaderModule(
@@ -733,10 +887,11 @@
VkShaderModule shaderModule,
const VkAllocationCallbacks* pAllocator) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
if ( !shaderModule ) { return; }
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
mvkDev->destroyShaderModule((MVKShaderModule*)shaderModule, pAllocator);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL VkResult vkCreatePipelineCache(
@@ -745,11 +900,13 @@
const VkAllocationCallbacks* pAllocator,
VkPipelineCache* pPipelineCache) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
MVKPipelineCache* mvkPLC = mvkDev->createPipelineCache(pCreateInfo, pAllocator);
*pPipelineCache = (VkPipelineCache)mvkPLC;
- return mvkPLC->getConfigurationResult();
+ VkResult rslt = mvkPLC->getConfigurationResult();
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL void vkDestroyPipelineCache(
@@ -757,10 +914,11 @@
VkPipelineCache pipelineCache,
const VkAllocationCallbacks* pAllocator) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
if ( !pipelineCache ) { return; }
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
mvkDev->destroyPipelineCache((MVKPipelineCache*)pipelineCache, pAllocator);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL VkResult vkGetPipelineCacheData(
@@ -769,9 +927,11 @@
size_t* pDataSize,
void* pData) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKPipelineCache* mvkPLC = (MVKPipelineCache*)pipelineCache;
- return mvkPLC->writeData(pDataSize, pData);
+ VkResult rslt = mvkPLC->writeData(pDataSize, pData);
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL VkResult vkMergePipelineCaches(
@@ -780,9 +940,11 @@
uint32_t srcCacheCount,
const VkPipelineCache* pSrcCaches) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKPipelineCache* mvkPLC = (MVKPipelineCache*)destCache;
- return mvkPLC->mergePipelineCaches(srcCacheCount, pSrcCaches);
+ VkResult rslt = mvkPLC->mergePipelineCaches(srcCacheCount, pSrcCaches);
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL VkResult vkCreateGraphicsPipelines(
@@ -793,9 +955,11 @@
const VkAllocationCallbacks* pAllocator,
VkPipeline* pPipelines) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
- return mvkDev->createPipelines<MVKGraphicsPipeline, VkGraphicsPipelineCreateInfo>(pipelineCache, count, pCreateInfos, pAllocator, pPipelines);
+ VkResult rslt = mvkDev->createPipelines<MVKGraphicsPipeline, VkGraphicsPipelineCreateInfo>(pipelineCache, count, pCreateInfos, pAllocator, pPipelines);
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL VkResult vkCreateComputePipelines(
@@ -806,9 +970,11 @@
const VkAllocationCallbacks* pAllocator,
VkPipeline* pPipelines) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
- return mvkDev->createPipelines<MVKComputePipeline, VkComputePipelineCreateInfo>(pipelineCache, count, pCreateInfos, pAllocator, pPipelines);
+ VkResult rslt = mvkDev->createPipelines<MVKComputePipeline, VkComputePipelineCreateInfo>(pipelineCache, count, pCreateInfos, pAllocator, pPipelines);
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL void vkDestroyPipeline(
@@ -816,10 +982,11 @@
VkPipeline pipeline,
const VkAllocationCallbacks* pAllocator) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
if ( !pipeline ) { return; }
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
mvkDev->destroyPipeline((MVKPipeline*)pipeline, pAllocator);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL VkResult vkCreatePipelineLayout(
@@ -828,11 +995,13 @@
const VkAllocationCallbacks* pAllocator,
VkPipelineLayout* pPipelineLayout) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
MVKPipelineLayout* mvkPLL = mvkDev->createPipelineLayout(pCreateInfo, pAllocator);
*pPipelineLayout = (VkPipelineLayout)mvkPLL;
- return mvkPLL->getConfigurationResult();
+ VkResult rslt = mvkPLL->getConfigurationResult();
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL void vkDestroyPipelineLayout(
@@ -840,10 +1009,11 @@
VkPipelineLayout pipelineLayout,
const VkAllocationCallbacks* pAllocator) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
if ( !pipelineLayout ) { return; }
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
mvkDev->destroyPipelineLayout((MVKPipelineLayout*)pipelineLayout, pAllocator);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL VkResult vkCreateSampler(
@@ -852,11 +1022,13 @@
const VkAllocationCallbacks* pAllocator,
VkSampler* pSampler) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
MVKSampler* mvkSamp = mvkDev->createSampler(pCreateInfo, pAllocator);
*pSampler = (VkSampler)mvkSamp;
- return mvkSamp->getConfigurationResult();
+ VkResult rslt = mvkSamp->getConfigurationResult();
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL void vkDestroySampler(
@@ -864,10 +1036,11 @@
VkSampler sampler,
const VkAllocationCallbacks* pAllocator) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
if ( !sampler ) { return; }
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
mvkDev->destroySampler((MVKSampler*)sampler, pAllocator);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL VkResult vkCreateDescriptorSetLayout(
@@ -876,11 +1049,13 @@
const VkAllocationCallbacks* pAllocator,
VkDescriptorSetLayout* pSetLayout) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
MVKDescriptorSetLayout* mvkDSL = mvkDev->createDescriptorSetLayout(pCreateInfo, pAllocator);
*pSetLayout = (VkDescriptorSetLayout)mvkDSL;
- return mvkDSL->getConfigurationResult();
+ VkResult rslt = mvkDSL->getConfigurationResult();
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL void vkDestroyDescriptorSetLayout(
@@ -888,10 +1063,11 @@
VkDescriptorSetLayout descriptorSetLayout,
const VkAllocationCallbacks* pAllocator) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
if ( !descriptorSetLayout ) { return; }
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
mvkDev->destroyDescriptorSetLayout((MVKDescriptorSetLayout*)descriptorSetLayout, pAllocator);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL VkResult vkCreateDescriptorPool(
@@ -900,11 +1076,13 @@
const VkAllocationCallbacks* pAllocator,
VkDescriptorPool* pDescriptorPool) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
MVKDescriptorPool* mvkDP = mvkDev->createDescriptorPool(pCreateInfo, pAllocator);
*pDescriptorPool = (VkDescriptorPool)mvkDP;
- return mvkDP->getConfigurationResult();
+ VkResult rslt = mvkDP->getConfigurationResult();
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL void vkDestroyDescriptorPool(
@@ -912,10 +1090,11 @@
VkDescriptorPool descriptorPool,
const VkAllocationCallbacks* pAllocator) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
if ( !descriptorPool ) { return; }
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
mvkDev->destroyDescriptorPool((MVKDescriptorPool*)descriptorPool, pAllocator);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL VkResult vkResetDescriptorPool(
@@ -923,9 +1102,11 @@
VkDescriptorPool descriptorPool,
VkDescriptorPoolResetFlags flags) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKDescriptorPool* mvkDP = (MVKDescriptorPool*)descriptorPool;
- return mvkDP->reset(flags);
+ VkResult rslt = mvkDP->reset(flags);
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL VkResult vkAllocateDescriptorSets(
@@ -933,11 +1114,13 @@
const VkDescriptorSetAllocateInfo* pAllocateInfo,
VkDescriptorSet* pDescriptorSets) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKDescriptorPool* mvkDP = (MVKDescriptorPool*)pAllocateInfo->descriptorPool;
- return mvkDP->allocateDescriptorSets(pAllocateInfo->descriptorSetCount,
- pAllocateInfo->pSetLayouts,
- pDescriptorSets);
+ VkResult rslt = mvkDP->allocateDescriptorSets(pAllocateInfo->descriptorSetCount,
+ pAllocateInfo->pSetLayouts,
+ pDescriptorSets);
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL VkResult vkFreeDescriptorSets(
@@ -946,9 +1129,11 @@
uint32_t count,
const VkDescriptorSet* pDescriptorSets) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKDescriptorPool* mvkDP = (MVKDescriptorPool*)descriptorPool;
- return mvkDP->freeDescriptorSets(count, pDescriptorSets);
+ VkResult rslt = mvkDP->freeDescriptorSets(count, pDescriptorSets);
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL void vkUpdateDescriptorSets(
@@ -958,8 +1143,9 @@
uint32_t copyCount,
const VkCopyDescriptorSet* pDescriptorCopies) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
mvkUpdateDescriptorSets(writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL VkResult vkCreateFramebuffer(
@@ -968,11 +1154,13 @@
const VkAllocationCallbacks* pAllocator,
VkFramebuffer* pFramebuffer) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
MVKFramebuffer* mvkFB = mvkDev->createFramebuffer(pCreateInfo, pAllocator);
*pFramebuffer = (VkFramebuffer)mvkFB;
- return mvkFB->getConfigurationResult();
+ VkResult rslt = mvkFB->getConfigurationResult();
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL void vkDestroyFramebuffer(
@@ -980,10 +1168,11 @@
VkFramebuffer framebuffer,
const VkAllocationCallbacks* pAllocator) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
if ( !framebuffer ) { return; }
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
mvkDev->destroyFramebuffer((MVKFramebuffer*)framebuffer, pAllocator);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL VkResult vkCreateRenderPass(
@@ -992,11 +1181,13 @@
const VkAllocationCallbacks* pAllocator,
VkRenderPass* pRenderPass) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
MVKRenderPass* mvkRendPass = mvkDev->createRenderPass(pCreateInfo, pAllocator);
*pRenderPass = (VkRenderPass)mvkRendPass;
- return mvkRendPass->getConfigurationResult();
+ VkResult rslt = mvkRendPass->getConfigurationResult();
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL void vkDestroyRenderPass(
@@ -1004,10 +1195,11 @@
VkRenderPass renderPass,
const VkAllocationCallbacks* pAllocator) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
if ( !renderPass ) { return; }
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
mvkDev->destroyRenderPass((MVKRenderPass*)renderPass, pAllocator);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkGetRenderAreaGranularity(
@@ -1015,11 +1207,12 @@
VkRenderPass renderPass,
VkExtent2D* pGranularity) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
if ( !pGranularity ) { return; }
MVKRenderPass* mvkRendPass = (MVKRenderPass*)renderPass;
*pGranularity = mvkRendPass->getRenderAreaGranularity();
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL VkResult vkCreateCommandPool(
@@ -1028,11 +1221,13 @@
const VkAllocationCallbacks* pAllocator,
VkCommandPool* pCmdPool) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
MVKCommandPool* mvkCmdPool = mvkDev->createCommandPool(pCreateInfo, pAllocator);
*pCmdPool = (VkCommandPool)mvkCmdPool;
- return mvkCmdPool->getConfigurationResult();
+ VkResult rslt = mvkCmdPool->getConfigurationResult();
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL void vkDestroyCommandPool(
@@ -1040,10 +1235,11 @@
VkCommandPool commandPool,
const VkAllocationCallbacks* pAllocator) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
if ( !commandPool ) { return; }
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
mvkDev->destroyCommandPool((MVKCommandPool*)commandPool, pAllocator);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL VkResult vkResetCommandPool(
@@ -1051,9 +1247,11 @@
VkCommandPool commandPool,
VkCommandPoolResetFlags flags) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandPool* mvkCmdPool = (MVKCommandPool*)commandPool;
- return mvkCmdPool->reset(flags);
+ VkResult rslt = mvkCmdPool->reset(flags);
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL VkResult vkAllocateCommandBuffers(
@@ -1061,9 +1259,11 @@
const VkCommandBufferAllocateInfo* pAllocateInfo,
VkCommandBuffer* pCmdBuffer) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandPool* mvkCmdPool = (MVKCommandPool*)pAllocateInfo->commandPool;
- return mvkCmdPool->allocateCommandBuffers(pAllocateInfo, pCmdBuffer);
+ VkResult rslt = mvkCmdPool->allocateCommandBuffers(pAllocateInfo, pCmdBuffer);
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL void vkFreeCommandBuffers(
@@ -1072,35 +1272,42 @@
uint32_t commandBufferCount,
const VkCommandBuffer* pCommandBuffers) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandPool* mvkCmdPool = (MVKCommandPool*)commandPool;
mvkCmdPool->freeCommandBuffers(commandBufferCount, pCommandBuffers);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL VkResult vkBeginCommandBuffer(
VkCommandBuffer commandBuffer,
const VkCommandBufferBeginInfo* pBeginInfo) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
- return cmdBuff->begin(pBeginInfo);
+ VkResult rslt = cmdBuff->begin(pBeginInfo);
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL VkResult vkEndCommandBuffer(
VkCommandBuffer commandBuffer) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
- return cmdBuff->end();
+ VkResult rslt = cmdBuff->end();
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL VkResult vkResetCommandBuffer(
VkCommandBuffer commandBuffer,
VkCommandBufferResetFlags flags) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
- return cmdBuff->reset(flags);
+ VkResult rslt = cmdBuff->reset(flags);
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL void vkCmdBindPipeline(
@@ -1108,9 +1315,10 @@
VkPipelineBindPoint pipelineBindPoint,
VkPipeline pipeline) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdBindPipeline(cmdBuff, pipelineBindPoint, pipeline);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdSetViewport(
@@ -1119,9 +1327,10 @@
uint32_t viewportCount,
const VkViewport* pViewports) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdSetViewport(cmdBuff, firstViewport, viewportCount, pViewports);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdSetScissor(
@@ -1130,18 +1339,20 @@
uint32_t scissorCount,
const VkRect2D* pScissors) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdSetScissor(cmdBuff, firstScissor, scissorCount, pScissors);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdSetLineWidth(
VkCommandBuffer commandBuffer,
float lineWidth) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdSetLineWidth(cmdBuff, lineWidth);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdSetDepthBias(
@@ -1150,18 +1361,20 @@
float depthBiasClamp,
float depthBiasSlopeFactor) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdSetDepthBias(cmdBuff,depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdSetBlendConstants(
VkCommandBuffer commandBuffer,
const float blendConst[4]) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdSetBlendConstants(cmdBuff, blendConst);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdSetDepthBounds(
@@ -1169,9 +1382,10 @@
float minDepthBounds,
float maxDepthBounds) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdSetDepthBounds(cmdBuff, minDepthBounds, maxDepthBounds);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdSetStencilCompareMask(
@@ -1179,9 +1393,10 @@
VkStencilFaceFlags faceMask,
uint32_t stencilCompareMask) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdSetStencilCompareMask(cmdBuff, faceMask, stencilCompareMask);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdSetStencilWriteMask(
@@ -1189,9 +1404,10 @@
VkStencilFaceFlags faceMask,
uint32_t stencilWriteMask) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdSetStencilWriteMask(cmdBuff, faceMask, stencilWriteMask);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdSetStencilReference(
@@ -1199,12 +1415,12 @@
VkStencilFaceFlags faceMask,
uint32_t stencilReference) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdSetStencilReference(cmdBuff, faceMask, stencilReference);
+ MVKTraceVulkanCallEnd();
}
-
MVK_PUBLIC_SYMBOL void vkCmdBindDescriptorSets(
VkCommandBuffer commandBuffer,
VkPipelineBindPoint pipelineBindPoint,
@@ -1215,10 +1431,11 @@
uint32_t dynamicOffsetCount,
const uint32_t* pDynamicOffsets) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdBindDescriptorSets(cmdBuff, pipelineBindPoint, layout, firstSet, setCount,
pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdBindIndexBuffer(
@@ -1227,9 +1444,10 @@
VkDeviceSize offset,
VkIndexType indexType) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdBindIndexBuffer(cmdBuff, buffer, offset, indexType);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdBindVertexBuffers(
@@ -1239,9 +1457,10 @@
const VkBuffer* pBuffers,
const VkDeviceSize* pOffsets) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdBindVertexBuffers(cmdBuff, startBinding, bindingCount, pBuffers, pOffsets);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdDraw(
@@ -1251,9 +1470,10 @@
uint32_t firstVertex,
uint32_t firstInstance) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdDraw(cmdBuff, vertexCount, instanceCount, firstVertex, firstInstance);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdDrawIndexed(
@@ -1264,9 +1484,10 @@
int32_t vertexOffset,
uint32_t firstInstance) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdDrawIndexed(cmdBuff, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdDrawIndirect(
@@ -1276,9 +1497,10 @@
uint32_t drawCount,
uint32_t stride) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdDrawIndirect(cmdBuff, buffer, offset, drawCount, stride);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdDrawIndexedIndirect(
@@ -1288,9 +1510,10 @@
uint32_t drawCount,
uint32_t stride) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdDrawIndexedIndirect(cmdBuff, buffer, offset, drawCount, stride);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdDispatch(
@@ -1299,9 +1522,10 @@
uint32_t y,
uint32_t z) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdDispatch(cmdBuff, x, y, z);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdDispatchIndirect(
@@ -1309,9 +1533,10 @@
VkBuffer buffer,
VkDeviceSize offset) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdDispatchIndirect(cmdBuff, buffer, offset);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdCopyBuffer(
@@ -1321,9 +1546,10 @@
uint32_t regionCount,
const VkBufferCopy* pRegions) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdCopyBuffer(cmdBuff, srcBuffer, destBuffer, regionCount, pRegions);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdCopyImage(
@@ -1335,12 +1561,13 @@
uint32_t regionCount,
const VkImageCopy* pRegions) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdCopyImage(cmdBuff,
srcImage, srcImageLayout,
dstImage, dstImageLayout,
regionCount, pRegions);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdBlitImage(
@@ -1353,12 +1580,13 @@
const VkImageBlit* pRegions,
VkFilter filter) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdBlitImage(cmdBuff,
srcImage, srcImageLayout,
dstImage, dstImageLayout,
regionCount, pRegions, filter);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdCopyBufferToImage(
@@ -1369,10 +1597,11 @@
uint32_t regionCount,
const VkBufferImageCopy* pRegions) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdCopyBufferToImage(cmdBuff, srcBuffer, dstImage,
dstImageLayout, regionCount, pRegions);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdCopyImageToBuffer(
@@ -1383,10 +1612,11 @@
uint32_t regionCount,
const VkBufferImageCopy* pRegions) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdCopyImageToBuffer(cmdBuff, srcImage, srcImageLayout,
dstBuffer, regionCount, pRegions);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdUpdateBuffer(
@@ -1396,9 +1626,10 @@
VkDeviceSize dataSize,
const void* pData) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdUpdateBuffer(cmdBuff, dstBuffer, dstOffset, dataSize, pData);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdFillBuffer(
@@ -1408,9 +1639,10 @@
VkDeviceSize size,
uint32_t data) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdFillBuffer(cmdBuff, dstBuffer, dstOffset, size, data);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdClearColorImage(
@@ -1421,9 +1653,10 @@
uint32_t rangeCount,
const VkImageSubresourceRange* pRanges) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdClearColorImage(cmdBuff, image, imageLayout, pColor, rangeCount, pRanges);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdClearDepthStencilImage(
@@ -1434,9 +1667,10 @@
uint32_t rangeCount,
const VkImageSubresourceRange* pRanges) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdClearDepthStencilImage(cmdBuff, image, imageLayout, pDepthStencil, rangeCount, pRanges);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdClearAttachments(
@@ -1446,9 +1680,10 @@
uint32_t rectCount,
const VkClearRect* pRects) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdClearAttachments(cmdBuff, attachmentCount, pAttachments, rectCount, pRects);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdResolveImage(
@@ -1460,10 +1695,11 @@
uint32_t regionCount,
const VkImageResolve* pRegions) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdResolveImage(cmdBuff, srcImage, srcImageLayout,
dstImage, dstImageLayout, regionCount, pRegions);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdSetEvent(
@@ -1471,9 +1707,10 @@
VkEvent event,
VkPipelineStageFlags stageMask) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
cmdBuff->reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCmdSetEvent(): Vukan events are not supported.");
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdResetEvent(
@@ -1481,9 +1718,10 @@
VkEvent event,
VkPipelineStageFlags stageMask) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
cmdBuff->reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCmdResetEvent(): Vukan events are not supported.");
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdWaitEvents(
@@ -1499,9 +1737,10 @@
uint32_t imageMemoryBarrierCount,
const VkImageMemoryBarrier* pImageMemoryBarriers) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
cmdBuff->reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCmdWaitEvents(): Vukan events are not supported.");
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdPipelineBarrier(
@@ -1516,12 +1755,13 @@
uint32_t imageMemoryBarrierCount,
const VkImageMemoryBarrier* pImageMemoryBarriers) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdPipelineBarrier(cmdBuff, srcStageMask, dstStageMask,
dependencyFlags, memoryBarrierCount, pMemoryBarriers,
bufferMemoryBarrierCount, pBufferMemoryBarriers,
imageMemoryBarrierCount, pImageMemoryBarriers);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdBeginQuery(
@@ -1530,9 +1770,10 @@
uint32_t query,
VkQueryControlFlags flags) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdBeginQuery(cmdBuff, queryPool, query, flags);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdEndQuery(
@@ -1540,9 +1781,10 @@
VkQueryPool queryPool,
uint32_t query) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdEndQuery(cmdBuff, queryPool, query);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdResetQueryPool(
@@ -1551,9 +1793,10 @@
uint32_t firstQuery,
uint32_t queryCount) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdResetQueryPool(cmdBuff, queryPool, firstQuery, queryCount);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdWriteTimestamp(
@@ -1562,9 +1805,10 @@
VkQueryPool queryPool,
uint32_t query) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdWriteTimestamp(cmdBuff, pipelineStage, queryPool, query);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdCopyQueryPoolResults(
@@ -1577,10 +1821,11 @@
VkDeviceSize destStride,
VkQueryResultFlags flags) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdCopyQueryPoolResults(cmdBuff, queryPool, firstQuery, queryCount,
destBuffer, destOffset, destStride, flags);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdPushConstants(
@@ -1591,9 +1836,10 @@
uint32_t size,
const void* pValues) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdPushConstants(cmdBuff, layout, stageFlags, offset, size, pValues);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdBeginRenderPass(
@@ -1601,26 +1847,29 @@
const VkRenderPassBeginInfo* pRenderPassBegin,
VkSubpassContents contents) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdBeginRenderPass(cmdBuff,pRenderPassBegin, contents);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdNextSubpass(
VkCommandBuffer commandBuffer,
VkSubpassContents contents) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdNextSubpass(cmdBuff, contents);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdEndRenderPass(
VkCommandBuffer commandBuffer) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdEndRenderPass(cmdBuff);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdExecuteCommands(
@@ -1628,9 +1877,10 @@
uint32_t cmdBuffersCount,
const VkCommandBuffer* pCommandBuffers) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdExecuteCommands(cmdBuff, cmdBuffersCount, pCommandBuffers);
+ MVKTraceVulkanCallEnd();
}
@@ -1642,13 +1892,14 @@
uint32_t bindInfoCount,
const VkBindBufferMemoryInfoKHR* pBindInfos) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
VkResult rslt = VK_SUCCESS;
for (uint32_t i = 0; i < bindInfoCount; ++i) {
MVKBuffer* mvkBuff = (MVKBuffer*)pBindInfos[i].buffer;
VkResult r = mvkBuff->bindDeviceMemory2(&pBindInfos[i]);
if (rslt == VK_SUCCESS) { rslt = r; }
}
+ MVKTraceVulkanCallEnd();
return rslt;
}
@@ -1657,13 +1908,14 @@
uint32_t bindInfoCount,
const VkBindImageMemoryInfoKHR* pBindInfos) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
VkResult rslt = VK_SUCCESS;
for (uint32_t i = 0; i < bindInfoCount; ++i) {
MVKImage* mvkImg = (MVKImage*)pBindInfos[i].image;
VkResult r = mvkImg->bindDeviceMemory2(&pBindInfos[i]);
if (rslt == VK_SUCCESS) { rslt = r; }
}
+ MVKTraceVulkanCallEnd();
return rslt;
}
@@ -1677,12 +1929,14 @@
const VkAllocationCallbacks* pAllocator,
VkDescriptorUpdateTemplateKHR* pDescriptorUpdateTemplate) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
auto *mvkDUT = mvkDev->createDescriptorUpdateTemplate(pCreateInfo,
pAllocator);
*pDescriptorUpdateTemplate = (VkDescriptorUpdateTemplateKHR)mvkDUT;
- return mvkDUT->getConfigurationResult();
+ VkResult rslt = mvkDUT->getConfigurationResult();
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL void vkDestroyDescriptorUpdateTemplateKHR(
@@ -1690,10 +1944,11 @@
VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate,
const VkAllocationCallbacks* pAllocator) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
if (!descriptorUpdateTemplate) { return; }
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
mvkDev->destroyDescriptorUpdateTemplate((MVKDescriptorUpdateTemplate*)descriptorUpdateTemplate, pAllocator);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkUpdateDescriptorSetWithTemplateKHR(
@@ -1702,8 +1957,24 @@
VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate,
const void* pData) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
mvkUpdateDescriptorSetWithTemplate(descriptorSet, descriptorUpdateTemplate, pData);
+ MVKTraceVulkanCallEnd();
+}
+
+
+#pragma mark -
+#pragma mark VK_KHR_device_group_creation extension
+
+MVK_PUBLIC_SYMBOL VkResult vkEnumeratePhysicalDeviceGroupsKHR(
+ VkInstance instance,
+ uint32_t* pPhysicalDeviceGroupCount,
+ VkPhysicalDeviceGroupPropertiesKHR* pPhysicalDeviceGroupProperties) {
+ MVKTraceVulkanCallStart();
+ MVKInstance* mvkInst = MVKInstance::getMVKInstance(instance);
+ VkResult rslt = mvkInst->getPhysicalDeviceGroups(pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties);
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
@@ -1715,9 +1986,10 @@
const VkBufferMemoryRequirementsInfo2KHR* pInfo,
VkMemoryRequirements2KHR* pMemoryRequirements) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKBuffer* mvkBuff = (MVKBuffer*)pInfo->buffer;
mvkBuff->getMemoryRequirements(pInfo, pMemoryRequirements);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkGetImageMemoryRequirements2KHR(
@@ -1725,9 +1997,10 @@
const VkImageMemoryRequirementsInfo2KHR* pInfo,
VkMemoryRequirements2KHR* pMemoryRequirements) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
auto* mvkImg = (MVKImage*)pInfo->image;
mvkImg->getMemoryRequirements(pInfo, pMemoryRequirements);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkGetImageSparseMemoryRequirements2KHR(
@@ -1736,13 +2009,14 @@
uint32_t* pSparseMemoryRequirementCount,
VkSparseImageMemoryRequirements2KHR* pSparseMemoryRequirements) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
// Metal does not support sparse images.
// Vulkan spec: "If the image was not created with VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT then
// pSparseMemoryRequirementCount will be set to zero and pSparseMemoryRequirements will not be written to.".
*pSparseMemoryRequirementCount = 0;
+ MVKTraceVulkanCallEnd();
}
@@ -1753,18 +2027,20 @@
VkPhysicalDevice physicalDevice,
VkPhysicalDeviceFeatures2KHR* pFeatures) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKPhysicalDevice* mvkPD = MVKPhysicalDevice::getMVKPhysicalDevice(physicalDevice);
mvkPD->getFeatures(pFeatures);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkGetPhysicalDeviceProperties2KHR(
VkPhysicalDevice physicalDevice,
VkPhysicalDeviceProperties2KHR* pProperties) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKPhysicalDevice* mvkPD = MVKPhysicalDevice::getMVKPhysicalDevice(physicalDevice);
mvkPD->getProperties(pProperties);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkGetPhysicalDeviceFormatProperties2KHR(
@@ -1772,9 +2048,10 @@
VkFormat format,
VkFormatProperties2KHR* pFormatProperties) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKPhysicalDevice* mvkPD = MVKPhysicalDevice::getMVKPhysicalDevice(physicalDevice);
mvkPD->getFormatProperties(format, pFormatProperties);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL VkResult vkGetPhysicalDeviceImageFormatProperties2KHR(
@@ -1782,9 +2059,11 @@
const VkPhysicalDeviceImageFormatInfo2KHR* pImageFormatInfo,
VkImageFormatProperties2KHR* pImageFormatProperties) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKPhysicalDevice* mvkPD = MVKPhysicalDevice::getMVKPhysicalDevice(physicalDevice);
- return mvkPD->getImageFormatProperties(pImageFormatInfo, pImageFormatProperties);
+ VkResult rslt = mvkPD->getImageFormatProperties(pImageFormatInfo, pImageFormatProperties);
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL void vkGetPhysicalDeviceQueueFamilyProperties2KHR(
@@ -1792,18 +2071,20 @@
uint32_t* pQueueFamilyPropertyCount,
VkQueueFamilyProperties2KHR* pQueueFamilyProperties) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKPhysicalDevice* mvkPD = MVKPhysicalDevice::getMVKPhysicalDevice(physicalDevice);
mvkPD->getQueueFamilyProperties(pQueueFamilyPropertyCount, pQueueFamilyProperties);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkGetPhysicalDeviceMemoryProperties2KHR(
VkPhysicalDevice physicalDevice,
VkPhysicalDeviceMemoryProperties2KHR* pMemoryProperties) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKPhysicalDevice* mvkPD = MVKPhysicalDevice::getMVKPhysicalDevice(physicalDevice);
mvkPD->getPhysicalDeviceMemoryProperties(pMemoryProperties);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkGetPhysicalDeviceSparseImageFormatProperties2KHR(
@@ -1812,13 +2093,14 @@
uint32_t* pPropertyCount,
VkSparseImageFormatProperties2KHR* pProperties) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
// Metal does not support sparse images.
// Vulkan spec: "If VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT is not supported for the given arguments,
// pPropertyCount will be set to zero upon return, and no data will be written to pProperties.".
*pPropertyCount = 0;
+ MVKTraceVulkanCallEnd();
}
@@ -1830,9 +2112,10 @@
VkCommandPool commandPool,
VkCommandPoolTrimFlagsKHR flags) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandPool* mvkCmdPool = (MVKCommandPool*)commandPool;
mvkCmdPool->trim();
+ MVKTraceVulkanCallEnd();
}
@@ -1844,9 +2127,10 @@
const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
VkDescriptorSetLayoutSupportKHR* pSupport) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKDevice* mvkDevice = MVKDevice::getMVKDevice(device);
mvkDevice->getDescriptorSetLayoutSupport(pCreateInfo, pSupport);
+ MVKTraceVulkanCallEnd();
}
@@ -1861,9 +2145,10 @@
uint32_t descriptorWriteCount,
const VkWriteDescriptorSet* pDescriptorWrites) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdPushDescriptorSet(cmdBuff, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdPushDescriptorSetWithTemplateKHR(
@@ -1873,9 +2158,10 @@
uint32_t set,
const void* pData) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdPushDescriptorSetWithTemplate(cmdBuff, descriptorUpdateTemplate, layout, set, pData);
+ MVKTraceVulkanCallEnd();
}
@@ -1888,11 +2174,13 @@
const VkAllocationCallbacks* pAllocator,
VkSwapchainKHR* pSwapchain) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
MVKSwapchain* mvkSwpChn = mvkDev->createSwapchain(pCreateInfo, pAllocator);
*pSwapchain = (VkSwapchainKHR)(mvkSwpChn);
- return mvkSwpChn->getConfigurationResult();
+ VkResult rslt = mvkSwpChn->getConfigurationResult();
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL void vkDestroySwapchainKHR(
@@ -1900,10 +2188,11 @@
VkSwapchainKHR swapchain,
const VkAllocationCallbacks* pAllocator) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
if ( !swapchain ) { return; }
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
mvkDev->destroySwapchain((MVKSwapchain*)swapchain, pAllocator);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL VkResult vkGetSwapchainImagesKHR(
@@ -1912,9 +2201,11 @@
uint32_t* pCount,
VkImage* pSwapchainImages) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKSwapchain* mvkSwapchain = (MVKSwapchain*)swapchain;
- return mvkSwapchain->getImages(pCount, pSwapchainImages);
+ VkResult rslt = mvkSwapchain->getImages(pCount, pSwapchainImages);
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL VkResult vkAcquireNextImageKHR(
@@ -1925,27 +2216,33 @@
VkFence fence,
uint32_t* pImageIndex) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKSwapchain* mvkSwapchain = (MVKSwapchain*)swapchain;
- return mvkSwapchain->acquireNextImageKHR(timeout, semaphore, fence, ~0u, pImageIndex);
+ VkResult rslt = mvkSwapchain->acquireNextImageKHR(timeout, semaphore, fence, ~0u, pImageIndex);
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL VkResult vkQueuePresentKHR(
VkQueue queue,
const VkPresentInfoKHR* pPresentInfo) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKQueue* mvkQ = MVKQueue::getMVKQueue(queue);
- return mvkQ->submit(pPresentInfo);
+ VkResult rslt = mvkQ->submit(pPresentInfo);
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL VkResult vkGetDeviceGroupPresentCapabilitiesKHR(
VkDevice device,
VkDeviceGroupPresentCapabilitiesKHR* pDeviceGroupPresentCapabilities) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKDevice* mvkDevice = MVKDevice::getMVKDevice(device);
- return mvkDevice->getDeviceGroupPresentCapabilities(pDeviceGroupPresentCapabilities);
+ VkResult rslt = mvkDevice->getDeviceGroupPresentCapabilities(pDeviceGroupPresentCapabilities);
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL VkResult vkGetDeviceGroupSurfacePresentModesKHR(
@@ -1953,10 +2250,12 @@
VkSurfaceKHR surface,
VkDeviceGroupPresentModeFlagsKHR* pModes) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKDevice* mvkDevice = MVKDevice::getMVKDevice(device);
MVKSurface* mvkSrfc = (MVKSurface*)surface;
- return mvkDevice->getDeviceGroupSurfacePresentModes(mvkSrfc, pModes);
+ VkResult rslt = mvkDevice->getDeviceGroupSurfacePresentModes(mvkSrfc, pModes);
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL VkResult vkGetPhysicalDevicePresentRectanglesKHR(
@@ -1965,10 +2264,12 @@
uint32_t* pRectCount,
VkRect2D* pRects) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKPhysicalDevice* mvkPD = MVKPhysicalDevice::getMVKPhysicalDevice(physicalDevice);
MVKSurface* mvkSrfc = (MVKSurface*)surface;
- return mvkPD->getPresentRectangles(mvkSrfc, pRectCount, pRects);
+ VkResult rslt = mvkPD->getPresentRectangles(mvkSrfc, pRectCount, pRects);
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL VkResult vkAcquireNextImage2KHR(
@@ -1976,13 +2277,15 @@
const VkAcquireNextImageInfoKHR* pAcquireInfo,
uint32_t* pImageIndex) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKSwapchain* mvkSwapchain = (MVKSwapchain*)pAcquireInfo->swapchain;
- return mvkSwapchain->acquireNextImageKHR(pAcquireInfo->timeout,
- pAcquireInfo->semaphore,
- pAcquireInfo->fence,
- pAcquireInfo->deviceMask,
- pImageIndex);
+ VkResult rslt = mvkSwapchain->acquireNextImageKHR(pAcquireInfo->timeout,
+ pAcquireInfo->semaphore,
+ pAcquireInfo->fence,
+ pAcquireInfo->deviceMask,
+ pImageIndex);
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
@@ -1994,10 +2297,11 @@
VkSurfaceKHR surface,
const VkAllocationCallbacks* pAllocator) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
if ( !surface ) { return; }
MVKInstance* mvkInst = MVKInstance::getMVKInstance(instance);
mvkInst->destroySurface((MVKSurface*)surface, pAllocator);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL VkResult vkGetPhysicalDeviceSurfaceSupportKHR(
@@ -2006,10 +2310,12 @@
VkSurfaceKHR surface,
VkBool32* pSupported) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKPhysicalDevice* mvkPD = MVKPhysicalDevice::getMVKPhysicalDevice(physicalDevice);
MVKSurface* mvkSrfc = (MVKSurface*)surface;
- return mvkPD->getSurfaceSupport(queueFamilyIndex, mvkSrfc, pSupported);
+ VkResult rslt = mvkPD->getSurfaceSupport(queueFamilyIndex, mvkSrfc, pSupported);
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL VkResult vkGetPhysicalDeviceSurfaceCapabilitiesKHR(
@@ -2017,10 +2323,12 @@
VkSurfaceKHR surface,
VkSurfaceCapabilitiesKHR* pSurfaceCapabilities) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKPhysicalDevice* mvkPD = MVKPhysicalDevice::getMVKPhysicalDevice(physicalDevice);
MVKSurface* mvkSrfc = (MVKSurface*)surface;
- return mvkPD->getSurfaceCapabilities(mvkSrfc, pSurfaceCapabilities);
+ VkResult rslt = mvkPD->getSurfaceCapabilities(mvkSrfc, pSurfaceCapabilities);
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL VkResult vkGetPhysicalDeviceSurfaceFormatsKHR(
@@ -2029,10 +2337,12 @@
uint32_t* pSurfaceFormatCount,
VkSurfaceFormatKHR* pSurfaceFormats) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKPhysicalDevice* mvkPD = MVKPhysicalDevice::getMVKPhysicalDevice(physicalDevice);
MVKSurface* mvkSrfc = (MVKSurface*)surface;
- return mvkPD->getSurfaceFormats(mvkSrfc, pSurfaceFormatCount, pSurfaceFormats);
+ VkResult rslt = mvkPD->getSurfaceFormats(mvkSrfc, pSurfaceFormatCount, pSurfaceFormats);
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL VkResult vkGetPhysicalDeviceSurfacePresentModesKHR(
@@ -2041,10 +2351,12 @@
uint32_t* pPresentModeCount,
VkPresentModeKHR* pPresentModes) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKPhysicalDevice* mvkPD = MVKPhysicalDevice::getMVKPhysicalDevice(physicalDevice);
MVKSurface* mvkSrfc = (MVKSurface*)surface;
- return mvkPD->getSurfacePresentModes(mvkSrfc, pPresentModeCount, pPresentModes);
+ VkResult rslt = mvkPD->getSurfacePresentModes(mvkSrfc, pPresentModeCount, pPresentModes);
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
@@ -2056,10 +2368,12 @@
const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
VkSurfaceCapabilities2KHR* pSurfaceCapabilities) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKPhysicalDevice* mvkPD = MVKPhysicalDevice::getMVKPhysicalDevice(physicalDevice);
MVKSurface* mvkSrfc = (MVKSurface*)pSurfaceInfo->surface;
- return mvkPD->getSurfaceCapabilities(mvkSrfc, &pSurfaceCapabilities->surfaceCapabilities);
+ VkResult rslt = mvkPD->getSurfaceCapabilities(mvkSrfc, &pSurfaceCapabilities->surfaceCapabilities);
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL VkResult vkGetPhysicalDeviceSurfaceFormats2KHR(
@@ -2068,25 +2382,12 @@
uint32_t* pSurfaceFormatCount,
VkSurfaceFormat2KHR* pSurfaceFormats) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKPhysicalDevice* mvkPD = MVKPhysicalDevice::getMVKPhysicalDevice(physicalDevice);
MVKSurface* mvkSrfc = (MVKSurface*)pSurfaceInfo->surface;
- return mvkPD->getSurfaceFormats(mvkSrfc, pSurfaceFormatCount, pSurfaceFormats);
-}
-
-
-#pragma mark -
-#pragma mark VK_EXT_host_query_reset extension
-
-MVK_PUBLIC_SYMBOL void vkResetQueryPoolEXT(
- VkDevice device,
- VkQueryPool queryPool,
- uint32_t firstQuery,
- uint32_t queryCount) {
-
- MVKTraceVulkanCall();
- auto* mvkQueryPool = (MVKQueryPool*)queryPool;
- mvkQueryPool->resetResults(firstQuery, queryCount, nullptr);
+ VkResult rslt = mvkPD->getSurfaceFormats(mvkSrfc, pSurfaceFormatCount, pSurfaceFormats);
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
@@ -2099,11 +2400,13 @@
const VkAllocationCallbacks* pAllocator,
VkDebugReportCallbackEXT* pCallback) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKInstance* mvkInst = MVKInstance::getMVKInstance(instance);
MVKDebugReportCallback* mvkDRCB = mvkInst->createDebugReportCallback(pCreateInfo, pAllocator);
*pCallback = (VkDebugReportCallbackEXT)mvkDRCB;
- return mvkDRCB->getConfigurationResult();
+ VkResult rslt = mvkDRCB->getConfigurationResult();
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL void vkDestroyDebugReportCallbackEXT(
@@ -2111,10 +2414,11 @@
VkDebugReportCallbackEXT callback,
const VkAllocationCallbacks* pAllocator) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
if ( !callback ) { return; }
MVKInstance* mvkInst = MVKInstance::getMVKInstance(instance);
mvkInst->destroyDebugReportCallback((MVKDebugReportCallback*)callback, pAllocator);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkDebugReportMessageEXT(
@@ -2127,9 +2431,10 @@
const char* pLayerPrefix,
const char* pMessage) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKInstance* mvkInst = MVKInstance::getMVKInstance(instance);
mvkInst->debugReportMessage(flags, objectType, object, location, messageCode, pLayerPrefix, pMessage);
+ MVKTraceVulkanCallEnd();
}
@@ -2140,43 +2445,50 @@
VkDevice device,
const VkDebugMarkerObjectTagInfoEXT* pTagInfo) {
- MVKTraceVulkanCall();
- return VK_SUCCESS;
+ MVKTraceVulkanCallStart();
+ VkResult rslt = VK_SUCCESS;
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL VkResult vkDebugMarkerSetObjectNameEXT(
VkDevice device,
const VkDebugMarkerObjectNameInfoEXT* pNameInfo) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKVulkanAPIObject* mvkObj = MVKVulkanAPIObject::getMVKVulkanAPIObject(pNameInfo->objectType, pNameInfo->object);
- return mvkObj ? mvkObj->setDebugName(pNameInfo->pObjectName) : VK_SUCCESS;
+ VkResult rslt = mvkObj ? mvkObj->setDebugName(pNameInfo->pObjectName) : VK_SUCCESS;
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL void vkCmdDebugMarkerBeginEXT(
VkCommandBuffer commandBuffer,
const VkDebugMarkerMarkerInfoEXT* pMarkerInfo) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdDebugMarkerBegin(cmdBuff, pMarkerInfo);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdDebugMarkerEndEXT(
VkCommandBuffer commandBuffer) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdDebugMarkerEnd(cmdBuff);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdDebugMarkerInsertEXT(
VkCommandBuffer commandBuffer,
const VkDebugMarkerMarkerInfoEXT* pMarkerInfo) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdDebugMarkerInsert(cmdBuff, pMarkerInfo);
+ MVKTraceVulkanCallEnd();
}
@@ -2187,63 +2499,73 @@
VkDevice device,
const VkDebugUtilsObjectNameInfoEXT* pNameInfo) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKVulkanAPIObject* mvkObj = MVKVulkanAPIObject::getMVKVulkanAPIObject(pNameInfo->objectType, pNameInfo->objectHandle);
- return mvkObj ? mvkObj->setDebugName(pNameInfo->pObjectName) : VK_SUCCESS;
+ VkResult rslt = mvkObj ? mvkObj->setDebugName(pNameInfo->pObjectName) : VK_SUCCESS;
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL VkResult vkSetDebugUtilsObjectTagEXT(
VkDevice device,
const VkDebugUtilsObjectTagInfoEXT* pTagInfo) {
- MVKTraceVulkanCall();
- return VK_SUCCESS;
+ MVKTraceVulkanCallStart();
+ VkResult rslt = VK_SUCCESS;
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL void vkQueueBeginDebugUtilsLabelEXT(
VkQueue queue,
const VkDebugUtilsLabelEXT* pLabelInfo) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkQueueEndDebugUtilsLabelEXT(
VkQueue queue) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkQueueInsertDebugUtilsLabelEXT(
VkQueue queue,
const VkDebugUtilsLabelEXT* pLabelInfo) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdBeginDebugUtilsLabelEXT(
VkCommandBuffer commandBuffer,
const VkDebugUtilsLabelEXT* pLabelInfo) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdBeginDebugUtilsLabel(cmdBuff, pLabelInfo);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdEndDebugUtilsLabelEXT(
VkCommandBuffer commandBuffer) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdEndDebugUtilsLabel(cmdBuff);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkCmdInsertDebugUtilsLabelEXT(
VkCommandBuffer commandBuffer,
const VkDebugUtilsLabelEXT* pLabelInfo) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKCommandBuffer* cmdBuff = MVKCommandBuffer::getMVKCommandBuffer(commandBuffer);
mvkCmdInsertDebugUtilsLabel(cmdBuff, pLabelInfo);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL VkResult vkCreateDebugUtilsMessengerEXT(
@@ -2252,11 +2574,13 @@
const VkAllocationCallbacks* pAllocator,
VkDebugUtilsMessengerEXT* pMessenger) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKInstance* mvkInst = MVKInstance::getMVKInstance(instance);
MVKDebugUtilsMessenger* mvkDUM = mvkInst->createDebugUtilsMessenger(pCreateInfo, pAllocator);
*pMessenger = (VkDebugUtilsMessengerEXT)mvkDUM;
- return mvkDUM->getConfigurationResult();
+ VkResult rslt = mvkDUM->getConfigurationResult();
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL void vkDestroyDebugUtilsMessengerEXT(
@@ -2264,10 +2588,11 @@
VkDebugUtilsMessengerEXT messenger,
const VkAllocationCallbacks* pAllocator) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
if ( !messenger ) { return; }
MVKInstance* mvkInst = MVKInstance::getMVKInstance(instance);
mvkInst->destroyDebugUtilsMessenger((MVKDebugUtilsMessenger*)messenger, pAllocator);
+ MVKTraceVulkanCallEnd();
}
MVK_PUBLIC_SYMBOL void vkSubmitDebugUtilsMessageEXT(
@@ -2276,13 +2601,48 @@
VkDebugUtilsMessageTypeFlagsEXT messageTypes,
const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKInstance* mvkInst = MVKInstance::getMVKInstance(instance);
mvkInst->debugUtilsMessage(messageSeverity, messageTypes, pCallbackData);
+ MVKTraceVulkanCallEnd();
}
#pragma mark -
+#pragma mark VK_EXT_host_query_reset extension
+
+MVK_PUBLIC_SYMBOL void vkResetQueryPoolEXT(
+ VkDevice device,
+ VkQueryPool queryPool,
+ uint32_t firstQuery,
+ uint32_t queryCount) {
+
+ MVKTraceVulkanCallStart();
+ auto* mvkQueryPool = (MVKQueryPool*)queryPool;
+ mvkQueryPool->resetResults(firstQuery, queryCount, nullptr);
+ MVKTraceVulkanCallEnd();
+}
+
+
+#pragma mark -
+#pragma mark VK_EXT_metal_surface extension
+
+MVK_PUBLIC_SYMBOL VkResult vkCreateMetalSurfaceEXT(
+ VkInstance instance,
+ const VkMetalSurfaceCreateInfoEXT* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkSurfaceKHR* pSurface) {
+
+ MVKTraceVulkanCallStart();
+ MVKInstance* mvkInst = MVKInstance::getMVKInstance(instance);
+ MVKSurface* mvkSrfc = mvkInst->createSurface(pCreateInfo, pAllocator);
+ *pSurface = (VkSurfaceKHR)mvkSrfc;
+ VkResult rslt = mvkSrfc->getConfigurationResult();
+ MVKTraceVulkanCallEnd();
+ return rslt;
+}
+
+#pragma mark -
#pragma mark iOS & macOS surface extensions
MVK_PUBLIC_SYMBOL VkResult vkCreate_PLATFORM_SurfaceMVK(
@@ -2291,11 +2651,13 @@
const VkAllocationCallbacks* pAllocator,
VkSurfaceKHR* pSurface) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
MVKInstance* mvkInst = MVKInstance::getMVKInstance(instance);
MVKSurface* mvkSrfc = mvkInst->createSurface(pCreateInfo, pAllocator);
*pSurface = (VkSurfaceKHR)mvkSrfc;
- return mvkSrfc->getConfigurationResult();
+ VkResult rslt = mvkSrfc->getConfigurationResult();
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
@@ -2318,46 +2680,44 @@
MVK_PUBLIC_SYMBOL VkResult vk_icdNegotiateLoaderICDInterfaceVersion(
uint32_t* pSupportedVersion) {
- MVKTraceVulkanCall();
+ MVKTraceVulkanCallStart();
// This ICD expects to be loaded by a loader of at least version 5.
+ VkResult rslt = VK_SUCCESS;
if (pSupportedVersion && *pSupportedVersion >= 5) {
*pSupportedVersion = 5;
- return VK_SUCCESS;
+ } else {
+ rslt = VK_ERROR_INCOMPATIBLE_DRIVER;
}
-
- return VK_ERROR_INCOMPATIBLE_DRIVER;
+ MVKTraceVulkanCallEnd();
+ return rslt;
}
MVK_PUBLIC_SYMBOL PFN_vkVoidFunction vk_icdGetInstanceProcAddr(
VkInstance instance,
const char* pName) {
- MVKTraceVulkanCall();
- if (strcmp(pName, "vk_icdNegotiateLoaderICDInterfaceVersion") == 0) { return (PFN_vkVoidFunction)vk_icdNegotiateLoaderICDInterfaceVersion; }
- if (strcmp(pName, "vk_icdGetPhysicalDeviceProcAddr") == 0) { return (PFN_vkVoidFunction)vk_icdGetPhysicalDeviceProcAddr; }
+ MVKTraceVulkanCallStart();
- return vkGetInstanceProcAddr(instance, pName);
+ PFN_vkVoidFunction func = nullptr;
+ if (strcmp(pName, "vk_icdNegotiateLoaderICDInterfaceVersion") == 0) {
+ func = (PFN_vkVoidFunction)vk_icdNegotiateLoaderICDInterfaceVersion;
+ } else if (strcmp(pName, "vk_icdGetPhysicalDeviceProcAddr") == 0) {
+ func = (PFN_vkVoidFunction)vk_icdGetPhysicalDeviceProcAddr;
+ } else {
+ func = vkGetInstanceProcAddr(instance, pName);
+ }
+ MVKTraceVulkanCallEnd();
+ return func;
}
MVK_PUBLIC_SYMBOL PFN_vkVoidFunction vk_icdGetPhysicalDeviceProcAddr(
VkInstance instance,
const char* pName) {
- MVKTraceVulkanCall();
- return vk_icdGetInstanceProcAddr(instance, pName);
-}
-
-
-#include "MVKOSExtensions.h"
-#ifndef MVK_CONFIG_TRACE_VULKAN_CALLS
-# define MVK_CONFIG_TRACE_VULKAN_CALLS false
-#endif
-static bool _mvkVulkanCallTracingInitialized = false;
-__attribute__((constructor)) static void MVKInitVulkanCallTracing() {
- if (_mvkVulkanCallTracingInitialized ) { return; }
- _mvkVulkanCallTracingInitialized = true;
-
- MVK_SET_FROM_ENV_OR_BUILD_BOOL(_mvkTraceVulkanCalls, MVK_CONFIG_TRACE_VULKAN_CALLS);
+ MVKTraceVulkanCallStart();
+ PFN_vkVoidFunction func = vk_icdGetInstanceProcAddr(instance, pName);
+ MVKTraceVulkanCallEnd();
+ return func;
}
diff --git a/MoltenVKShaderConverter/MoltenVKSPIRVToMSLConverter/SPIRVConversion.mm b/MoltenVKShaderConverter/MoltenVKSPIRVToMSLConverter/SPIRVConversion.mm
index 1b8af9b..e295c4a 100644
--- a/MoltenVKShaderConverter/MoltenVKSPIRVToMSLConverter/SPIRVConversion.mm
+++ b/MoltenVKShaderConverter/MoltenVKSPIRVToMSLConverter/SPIRVConversion.mm
@@ -31,7 +31,7 @@
char** pResultLog,
bool shouldLogSPIRV,
bool shouldLogMSL) {
- SPIRVToMSLConverterContext spvCtx;
+ SPIRVToMSLConversionConfiguration spvCtx;
SPIRVToMSLConverter spvConverter;
spvConverter.setSPIRV(spvCode, spvLength);
bool wasConverted = spvConverter.convert(spvCtx, shouldLogSPIRV, shouldLogMSL);
diff --git a/MoltenVKShaderConverter/MoltenVKSPIRVToMSLConverter/SPIRVToMSLConverter.cpp b/MoltenVKShaderConverter/MoltenVKSPIRVToMSLConverter/SPIRVToMSLConverter.cpp
index 4cfc542..885bb79 100644
--- a/MoltenVKShaderConverter/MoltenVKSPIRVToMSLConverter/SPIRVToMSLConverter.cpp
+++ b/MoltenVKShaderConverter/MoltenVKSPIRVToMSLConverter/SPIRVToMSLConverter.cpp
@@ -29,26 +29,21 @@
#pragma mark -
-#pragma mark SPIRVToMSLConverterContext
+#pragma mark SPIRVToMSLConversionConfiguration
// Returns whether the vector contains the value (using a matches(T&) comparison member function). */
template<class T>
-bool contains(const vector<T>& vec, const T& val) {
+bool containsMatching(const vector<T>& vec, const T& val) {
for (const T& vecVal : vec) { if (vecVal.matches(val)) { return true; } }
return false;
}
-MVK_PUBLIC_SYMBOL bool SPIRVToMSLConverterOptions::matches(const SPIRVToMSLConverterOptions& other) const {
+MVK_PUBLIC_SYMBOL bool SPIRVToMSLConversionOptions::matches(const SPIRVToMSLConversionOptions& other) const {
if (entryPointStage != other.entryPointStage) { return false; }
if (entryPointName != other.entryPointName) { return false; }
if (tessPatchKind != other.tessPatchKind) { return false; }
if (numTessControlPoints != other.numTessControlPoints) { return false; }
if (!!shouldFlipVertexY != !!other.shouldFlipVertexY) { return false; }
- if (!!needsSwizzleBuffer != !!other.needsSwizzleBuffer) { return false; }
- if (!!needsOutputBuffer != !!other.needsOutputBuffer) { return false; }
- if (!!needsPatchOutputBuffer != !!other.needsPatchOutputBuffer) { return false; }
- if (!!needsBufferSizeBuffer != !!other.needsBufferSizeBuffer) { return false; }
- if (!!needsInputThreadgroupMem != !!other.needsInputThreadgroupMem) { return false; }
if (mslOptions.platform != other.mslOptions.platform) { return false; }
if (mslOptions.msl_version != other.mslOptions.msl_version) { return false; }
@@ -72,7 +67,7 @@
return true;
}
-MVK_PUBLIC_SYMBOL std::string SPIRVToMSLConverterOptions::printMSLVersion(uint32_t mslVersion, bool includePatch) {
+MVK_PUBLIC_SYMBOL std::string SPIRVToMSLConversionOptions::printMSLVersion(uint32_t mslVersion, bool includePatch) {
string verStr;
uint32_t major = mslVersion / 10000;
@@ -91,7 +86,9 @@
return verStr;
}
-MVK_PUBLIC_SYMBOL SPIRVToMSLConverterOptions::SPIRVToMSLConverterOptions() {
+MVK_PUBLIC_SYMBOL SPIRVToMSLConversionOptions::SPIRVToMSLConversionOptions() {
+ mslOptions.pad_fragment_output_components = true;
+
#if MVK_MACOS
mslOptions.platform = CompilerMSL::Options::macOS;
#endif
@@ -143,14 +140,14 @@
return true;
}
-MVK_PUBLIC_SYMBOL bool SPIRVToMSLConverterContext::stageSupportsVertexAttributes() const {
+MVK_PUBLIC_SYMBOL bool SPIRVToMSLConversionConfiguration::stageSupportsVertexAttributes() const {
return (options.entryPointStage == spv::ExecutionModelVertex ||
options.entryPointStage == spv::ExecutionModelTessellationControl ||
options.entryPointStage == spv::ExecutionModelTessellationEvaluation);
}
// Check them all in case inactive VA's duplicate locations used by active VA's.
-MVK_PUBLIC_SYMBOL bool SPIRVToMSLConverterContext::isVertexAttributeLocationUsed(uint32_t location) const {
+MVK_PUBLIC_SYMBOL bool SPIRVToMSLConversionConfiguration::isVertexAttributeLocationUsed(uint32_t location) const {
for (auto& va : vertexAttributes) {
if ((va.vertexAttribute.location == location) && va.isUsedByShader) { return true; }
}
@@ -158,15 +155,14 @@
}
// Check them all in case inactive VA's duplicate buffers used by active VA's.
-MVK_PUBLIC_SYMBOL bool SPIRVToMSLConverterContext::isVertexBufferUsed(uint32_t mslBuffer) const {
+MVK_PUBLIC_SYMBOL bool SPIRVToMSLConversionConfiguration::isVertexBufferUsed(uint32_t mslBuffer) const {
for (auto& va : vertexAttributes) {
if ((va.vertexAttribute.msl_buffer == mslBuffer) && va.isUsedByShader) { return true; }
}
return false;
}
-MVK_PUBLIC_SYMBOL void SPIRVToMSLConverterContext::markAllAttributesAndResourcesUsed() {
-
+MVK_PUBLIC_SYMBOL void SPIRVToMSLConversionConfiguration::markAllAttributesAndResourcesUsed() {
if (stageSupportsVertexAttributes()) {
for (auto& va : vertexAttributes) { va.isUsedByShader = true; }
}
@@ -174,31 +170,25 @@
for (auto& rb : resourceBindings) { rb.isUsedByShader = true; }
}
-MVK_PUBLIC_SYMBOL bool SPIRVToMSLConverterContext::matches(const SPIRVToMSLConverterContext& other) const {
+MVK_PUBLIC_SYMBOL bool SPIRVToMSLConversionConfiguration::matches(const SPIRVToMSLConversionConfiguration& other) const {
if ( !options.matches(other.options) ) { return false; }
if (stageSupportsVertexAttributes()) {
for (const auto& va : vertexAttributes) {
- if (va.isUsedByShader && !contains(other.vertexAttributes, va)) { return false; }
+ if (va.isUsedByShader && !containsMatching(other.vertexAttributes, va)) { return false; }
}
}
for (const auto& rb : resourceBindings) {
- if (rb.isUsedByShader && !contains(other.resourceBindings, rb)) { return false; }
+ if (rb.isUsedByShader && !containsMatching(other.resourceBindings, rb)) { return false; }
}
return true;
}
-MVK_PUBLIC_SYMBOL void SPIRVToMSLConverterContext::alignWith(const SPIRVToMSLConverterContext& srcContext) {
- options.mslOptions.disable_rasterization = srcContext.options.mslOptions.disable_rasterization;
- options.needsSwizzleBuffer = srcContext.options.needsSwizzleBuffer;
- options.needsOutputBuffer = srcContext.options.needsOutputBuffer;
- options.needsPatchOutputBuffer = srcContext.options.needsPatchOutputBuffer;
- options.needsBufferSizeBuffer = srcContext.options.needsBufferSizeBuffer;
- options.needsInputThreadgroupMem = srcContext.options.needsInputThreadgroupMem;
+MVK_PUBLIC_SYMBOL void SPIRVToMSLConversionConfiguration::alignWith(const SPIRVToMSLConversionConfiguration& srcContext) {
if (stageSupportsVertexAttributes()) {
for (auto& va : vertexAttributes) {
@@ -221,9 +211,6 @@
#pragma mark -
#pragma mark SPIRVToMSLConverter
-// Populates the entry point with info extracted from the SPRI-V compiler.
-void populateEntryPoint(SPIRVEntryPoint& entryPoint, SPIRV_CROSS_NAMESPACE::Compiler* pCompiler, SPIRVToMSLConverterOptions& options);
-
MVK_PUBLIC_SYMBOL void SPIRVToMSLConverter::setSPIRV(const uint32_t* spirvCode, size_t length) {
_spirv.clear(); // Clear for reuse
_spirv.reserve(length);
@@ -232,7 +219,7 @@
}
}
-MVK_PUBLIC_SYMBOL bool SPIRVToMSLConverter::convert(SPIRVToMSLConverterContext& context,
+MVK_PUBLIC_SYMBOL bool SPIRVToMSLConverter::convert(SPIRVToMSLConversionConfiguration& context,
bool shouldLogSPIRV,
bool shouldLogMSL,
bool shouldLogGLSL) {
@@ -245,6 +232,7 @@
_wasConverted = true;
_resultLog.clear();
_msl.clear();
+ _shaderConversionResults.reset();
if (shouldLogSPIRV) { logSPIRV("Converting"); }
@@ -272,7 +260,6 @@
// Establish the MSL options for the compiler
// This needs to be done in two steps...for CompilerMSL and its superclass.
- context.options.mslOptions.pad_fragment_output_components = true;
pMSLCompiler->set_msl_options(context.options.mslOptions);
auto scOpts = pMSLCompiler->get_common_options();
@@ -312,15 +299,15 @@
}
#endif
- // Populate the shader context with info from the compilation run, including
- // which vertex attributes and resource bindings are used by the shader
- populateEntryPoint(_entryPoint, pMSLCompiler, context.options);
- context.options.mslOptions.disable_rasterization = pMSLCompiler && pMSLCompiler->get_is_rasterization_disabled();
- context.options.needsSwizzleBuffer = pMSLCompiler && pMSLCompiler->needs_swizzle_buffer();
- context.options.needsOutputBuffer = pMSLCompiler && pMSLCompiler->needs_output_buffer();
- context.options.needsPatchOutputBuffer = pMSLCompiler && pMSLCompiler->needs_patch_output_buffer();
- context.options.needsBufferSizeBuffer = pMSLCompiler && pMSLCompiler->needs_buffer_size_buffer();
- context.options.needsInputThreadgroupMem = pMSLCompiler && pMSLCompiler->needs_input_threadgroup_mem();
+ // Populate the shader conversion results with info from the compilation run,
+ // and mark which vertex attributes and resource bindings are used by the shader
+ populateEntryPoint(pMSLCompiler, context.options);
+ _shaderConversionResults.isRasterizationDisabled = pMSLCompiler && pMSLCompiler->get_is_rasterization_disabled();
+ _shaderConversionResults.needsSwizzleBuffer = pMSLCompiler && pMSLCompiler->needs_swizzle_buffer();
+ _shaderConversionResults.needsOutputBuffer = pMSLCompiler && pMSLCompiler->needs_output_buffer();
+ _shaderConversionResults.needsPatchOutputBuffer = pMSLCompiler && pMSLCompiler->needs_patch_output_buffer();
+ _shaderConversionResults.needsBufferSizeBuffer = pMSLCompiler && pMSLCompiler->needs_buffer_size_buffer();
+ _shaderConversionResults.needsInputThreadgroupMem = pMSLCompiler && pMSLCompiler->needs_input_threadgroup_mem();
if (context.stageSupportsVertexAttributes()) {
for (auto& ctxVA : context.vertexAttributes) {
@@ -433,17 +420,17 @@
_resultLog += "\n\n";
}
-
-#pragma mark Support functions
-
-// Populate a workgroup size dimension.
-void populateWorkgroupDimension(SPIRVWorkgroupSizeDimension& wgDim, uint32_t size, SPIRV_CROSS_NAMESPACE::SpecializationConstant& spvSpecConst) {
+void SPIRVToMSLConverter::populateWorkgroupDimension(SPIRVWorkgroupSizeDimension& wgDim,
+ uint32_t size,
+ SPIRV_CROSS_NAMESPACE::SpecializationConstant& spvSpecConst) {
wgDim.size = max(size, 1u);
wgDim.isSpecialized = (spvSpecConst.id != 0);
wgDim.specializationID = spvSpecConst.constant_id;
}
-void populateEntryPoint(SPIRVEntryPoint& entryPoint, SPIRV_CROSS_NAMESPACE::Compiler* pCompiler, SPIRVToMSLConverterOptions& options) {
+// Populates the entry point with info extracted from the SPRI-V compiler.
+void SPIRVToMSLConverter::populateEntryPoint(SPIRV_CROSS_NAMESPACE::Compiler* pCompiler,
+ SPIRVToMSLConversionOptions& options) {
if ( !pCompiler ) { return; }
@@ -458,11 +445,14 @@
}
}
+ auto& ep = _shaderConversionResults.entryPoint;
+ ep.mtlFunctionName = spvEP.name;
+
SPIRV_CROSS_NAMESPACE::SpecializationConstant widthSC, heightSC, depthSC;
pCompiler->get_work_group_size_specialization_constants(widthSC, heightSC, depthSC);
- entryPoint.mtlFunctionName = spvEP.name;
- populateWorkgroupDimension(entryPoint.workgroupSize.width, spvEP.workgroup_size.x, widthSC);
- populateWorkgroupDimension(entryPoint.workgroupSize.height, spvEP.workgroup_size.y, heightSC);
- populateWorkgroupDimension(entryPoint.workgroupSize.depth, spvEP.workgroup_size.z, depthSC);
+ auto& wgSize = ep.workgroupSize;
+ populateWorkgroupDimension(wgSize.width, spvEP.workgroup_size.x, widthSC);
+ populateWorkgroupDimension(wgSize.height, spvEP.workgroup_size.y, heightSC);
+ populateWorkgroupDimension(wgSize.depth, spvEP.workgroup_size.z, depthSC);
}
diff --git a/MoltenVKShaderConverter/MoltenVKSPIRVToMSLConverter/SPIRVToMSLConverter.h b/MoltenVKShaderConverter/MoltenVKSPIRVToMSLConverter/SPIRVToMSLConverter.h
index ecaa595..82024cd 100644
--- a/MoltenVKShaderConverter/MoltenVKSPIRVToMSLConverter/SPIRVToMSLConverter.h
+++ b/MoltenVKShaderConverter/MoltenVKSPIRVToMSLConverter/SPIRVToMSLConverter.h
@@ -27,9 +27,8 @@
namespace mvk {
-
#pragma mark -
-#pragma mark SPIRVToMSLConverterContext
+#pragma mark SPIRVToMSLConversionConfiguration
/**
* Options for converting SPIR-V to Metal Shading Language
@@ -37,24 +36,19 @@
* THIS STRUCT IS STREAMED OUT AS PART OF THE PIEPLINE CACHE.
* CHANGES TO THIS STRUCT SHOULD BE CAPTURED IN THE STREAMING LOGIC OF THE PIPELINE CACHE.
*/
- typedef struct SPIRVToMSLConverterOptions {
+ typedef struct SPIRVToMSLConversionOptions {
SPIRV_CROSS_NAMESPACE::CompilerMSL::Options mslOptions;
std::string entryPointName;
spv::ExecutionModel entryPointStage = spv::ExecutionModelMax;
spv::ExecutionMode tessPatchKind = spv::ExecutionModeMax;
uint32_t numTessControlPoints = 0;
bool shouldFlipVertexY = true;
- bool needsSwizzleBuffer = false;
- bool needsOutputBuffer = false;
- bool needsPatchOutputBuffer = false;
- bool needsBufferSizeBuffer = false;
- bool needsInputThreadgroupMem = false;
/**
* Returns whether the specified options match this one.
* It does if all corresponding elements are equal.
*/
- bool matches(const SPIRVToMSLConverterOptions& other) const;
+ bool matches(const SPIRVToMSLConversionOptions& other) const;
bool hasEntryPoint() const {
return !entryPointName.empty() && entryPointStage != spv::ExecutionModelMax;
@@ -62,14 +56,17 @@
static std::string printMSLVersion(uint32_t mslVersion, bool includePatch = false);
- SPIRVToMSLConverterOptions();
+ SPIRVToMSLConversionOptions();
- } SPIRVToMSLConverterOptions;
+ } SPIRVToMSLConversionOptions;
/**
* Defines MSL characteristics of a vertex attribute at a particular location.
- * The isUsedByShader flag is set to true during conversion of SPIR-V to MSL
- * if the shader makes use of this vertex attribute.
+ *
+ * The isUsedByShader flag is set to true during conversion of SPIR-V to MSL if the shader
+ * makes use of this vertex attribute. This allows a pipeline to be optimized, and for two
+ * shader conversion configurations to be compared only against the attributes that are
+ * actually used by the shader.
*
* THIS STRUCT IS STREAMED OUT AS PART OF THE PIEPLINE CACHE.
* CHANGES TO THIS STRUCT SHOULD BE CAPTURED IN THE STREAMING LOGIC OF THE PIPELINE CACHE.
@@ -98,6 +95,11 @@
* hardcoded into the MSL as a constexpr type, instead of passed in as a runtime-bound variable.
* The content of that constexpr sampler is defined in the constExprSampler parameter.
*
+ * The isUsedByShader flag is set to true during conversion of SPIR-V to MSL if the shader
+ * makes use of this resource binding. This allows a pipeline to be optimized, and for two
+ * shader conversion configurations to be compared only against the resource bindings that
+ * are actually used by the shader.
+ *
* THIS STRUCT IS STREAMED OUT AS PART OF THE PIEPLINE CACHE.
* CHANGES TO THIS STRUCT SHOULD BE CAPTURED IN THE STREAMING LOGIC OF THE PIPELINE CACHE.
*/
@@ -117,13 +119,13 @@
} MSLResourceBinding;
/**
- * Context passed to the SPIRVToMSLConverter to map SPIR-V descriptors to Metal resource indices.
+ * Configuration passed to the SPIRVToMSLConverter.
*
* THIS STRUCT IS STREAMED OUT AS PART OF THE PIEPLINE CACHE.
* CHANGES TO THIS STRUCT SHOULD BE CAPTURED IN THE STREAMING LOGIC OF THE PIPELINE CACHE.
*/
- typedef struct SPIRVToMSLConverterContext {
- SPIRVToMSLConverterOptions options;
+ typedef struct SPIRVToMSLConversionConfiguration {
+ SPIRVToMSLConversionOptions options;
std::vector<MSLVertexAttribute> vertexAttributes;
std::vector<MSLResourceBinding> resourceBindings;
@@ -140,17 +142,22 @@
void markAllAttributesAndResourcesUsed();
/**
- * Returns whether this context matches the other context. It does if the respective
- * options match and any vertex attributes and resource bindings used by this context
- * can be found in the other context. Vertex attributes and resource bindings that are
- * in the other context but are not used by the shader that created this context, are ignored.
+ * Returns whether this configuration matches the other context. It does if the
+ * respective options match and any vertex attributes and resource bindings used
+ * by this configuration can be found in the other configuration. Vertex attributes
+ * and resource bindings that are in the other configuration but are not used by
+ * the shader that created this configuration, are ignored.
*/
- bool matches(const SPIRVToMSLConverterContext& other) const;
+ bool matches(const SPIRVToMSLConversionConfiguration& other) const;
- /** Aligns certain aspects of this context with the source context. */
- void alignWith(const SPIRVToMSLConverterContext& srcContext);
+ /** Aligns certain aspects of this configuration with the source context. */
+ void alignWith(const SPIRVToMSLConversionConfiguration& srcContext);
- } SPIRVToMSLConverterContext;
+ } SPIRVToMSLConversionConfiguration;
+
+
+#pragma mark -
+#pragma mark SPIRVToMSLConversionResults
/**
* Describes one dimension of the workgroup size of a SPIR-V entry point, including whether
@@ -183,6 +190,25 @@
} workgroupSize;
} SPIRVEntryPoint;
+ /**
+ * Contains the results of the shader conversion that can be used to populate a pipeline.
+ *
+ * THIS STRUCT IS STREAMED OUT AS PART OF THE PIEPLINE CACHE.
+ * CHANGES TO THIS STRUCT SHOULD BE CAPTURED IN THE STREAMING LOGIC OF THE PIPELINE CACHE.
+ */
+ typedef struct SPIRVToMSLConversionResults {
+ SPIRVEntryPoint entryPoint;
+ bool isRasterizationDisabled = false;
+ bool needsSwizzleBuffer = false;
+ bool needsOutputBuffer = false;
+ bool needsPatchOutputBuffer = false;
+ bool needsBufferSizeBuffer = false;
+ bool needsInputThreadgroupMem = false;
+
+ void reset() { *this = SPIRVToMSLConversionResults(); }
+
+ } SPIRVToMSLConversionResults;
+
#pragma mark -
#pragma mark SPIRVToMSLConverter
@@ -214,7 +240,7 @@
* and optionally, the original GLSL (as converted from the SPIR_V), should be logged
* to the result log of this converter. This can be useful during shader debugging.
*/
- bool convert(SPIRVToMSLConverterContext& context,
+ bool convert(SPIRVToMSLConversionConfiguration& context,
bool shouldLogSPIRV = false,
bool shouldLogMSL = false,
bool shouldLogGLSL = false);
@@ -232,14 +258,15 @@
*/
const std::string& getMSL() { return _msl; }
- /** Returns information about the shader entry point. */
- const SPIRVEntryPoint& getEntryPoint() { return _entryPoint; }
+ /** Returns information about the shader conversion. */
+ const SPIRVToMSLConversionResults& getConversionResults() { return _shaderConversionResults; }
/** Sets the number of threads in a single compute kernel workgroup, per dimension. */
void setWorkgroupSize(uint32_t x, uint32_t y, uint32_t z) {
- _entryPoint.workgroupSize.width.size = x;
- _entryPoint.workgroupSize.height.size = y;
- _entryPoint.workgroupSize.depth.size = z;
+ auto& wgSize = _shaderConversionResults.entryPoint.workgroupSize;
+ wgSize.width.size = x;
+ wgSize.height.size = y;
+ wgSize.depth.size = z;
}
/**
@@ -249,10 +276,10 @@
const std::string& getResultLog() { return _resultLog; }
/** Sets MSL source code. This can be used when MSL is supplied directly. */
- void setMSL(const std::string& msl, const SPIRVEntryPoint* pEntryPoint) {
- _msl = msl;
- if (pEntryPoint) { _entryPoint = *pEntryPoint; }
- }
+ void setMSL(const std::string& msl, const SPIRVToMSLConversionResults* pShaderConversionResults) {
+ _msl = msl;
+ if (pShaderConversionResults) { _shaderConversionResults = *pShaderConversionResults; }
+ }
protected:
void logMsg(const char* logMsg);
@@ -261,11 +288,13 @@
bool validateSPIRV();
void writeSPIRVToFile(std::string spvFilepath);
void logSource(std::string& src, const char* srcLang, const char* opDesc);
+ void populateWorkgroupDimension(SPIRVWorkgroupSizeDimension& wgDim, uint32_t size, SPIRV_CROSS_NAMESPACE::SpecializationConstant& spvSpecConst);
+ void populateEntryPoint(SPIRV_CROSS_NAMESPACE::Compiler* pCompiler, SPIRVToMSLConversionOptions& options);
std::vector<uint32_t> _spirv;
std::string _msl;
std::string _resultLog;
- SPIRVEntryPoint _entryPoint;
+ SPIRVToMSLConversionResults _shaderConversionResults;
bool _wasConverted = false;
};
diff --git a/MoltenVKShaderConverter/MoltenVKShaderConverterTool/MoltenVKShaderConverterTool.cpp b/MoltenVKShaderConverter/MoltenVKShaderConverterTool/MoltenVKShaderConverterTool.cpp
index b95ab6b..b7c5552 100644
--- a/MoltenVKShaderConverter/MoltenVKShaderConverterTool/MoltenVKShaderConverterTool.cpp
+++ b/MoltenVKShaderConverter/MoltenVKShaderConverterTool/MoltenVKShaderConverterTool.cpp
@@ -204,7 +204,7 @@
if ( !_shouldWriteMSL ) { return true; }
// Derive the context under which conversion will occur
- SPIRVToMSLConverterContext mslContext;
+ SPIRVToMSLConversionConfiguration mslContext;
mslContext.options.mslOptions.platform = _mslPlatform;
mslContext.options.mslOptions.set_msl_version(_mslVersionMajor, _mslVersionMinor, _mslVersionPatch);
mslContext.options.shouldFlipVertexY = _shouldFlipVertexY;
@@ -387,7 +387,7 @@
_mslVersionMajor = 2;
_mslVersionMinor = 1;
_mslVersionPatch = 0;
- _mslPlatform = SPIRVToMSLConverterOptions().mslOptions.platform;
+ _mslPlatform = SPIRVToMSLConversionOptions().mslOptions.platform;
_isActive = parseArgs(argc, argv);
if ( !_isActive ) { showUsage(); }
diff --git a/README.md b/README.md
index 72d7fd1..ab05ba1 100644
--- a/README.md
+++ b/README.md
@@ -317,6 +317,19 @@
Property claims.
+### Memory Management
+
+*Metal*, and other *Objective-C* objects in *Apple's SDK* frameworks, use reference counting for memory management.
+When instantiating *Objective-C* objects, it is important that you do not rely on implied *autorelease pools* to do
+memory management for you. Because many *Vulkan* games and apps may be ported from other platforms, they will
+typically not include autorelease pools in their threading models.
+
+Avoid the use of the `autorelease` method, or any object creation methods that imply use of `autorelease`,
+(eg- `[NSString stringWithFormat: ]`, etc). Instead, favour object creation methods that return a retained object
+(eg- `[[NSString alloc] initWithFormat: ]`, etc), and manually track and release those objects. If you need to use
+autoreleased objects, wrap code blocks in an `@autoreleasepool {...}` block.
+
+
### Code Formatting
When contributing code, please honour the code formatting style found in existing **MoltenVK** source code.