Skip to content

Instantly share code, notes, and snippets.

@expenses
Created December 5, 2021 16:12
Show Gist options
  • Save expenses/7a8e11b94b252db0607288d823a451fe to your computer and use it in GitHub Desktop.
Save expenses/7a8e11b94b252db0607288d823a451fe to your computer and use it in GitHub Desktop.
warning: /Users/ashley/projects/transmission-renderer/Cargo.toml: version requirement `0.11.0+1.1.5` for dependency `ash-molten` includes semver metadata which will be ignored, removing the metadata is recommended to avoid confusion
warning: field is never read: `lib`
--> /Users/ashley/projects/ash/ash/src/entry.rs:25:5
|
25 | lib: L,
| ^^^^^^
|
= note: `#[warn(dead_code)]` on by default
warning: field is never read: `handle`
--> /Users/ashley/projects/ash/ash/src/extensions/khr/draw_indirect_count.rs:8:5
|
8 | handle: vk::Device,
| ^^^^^^^^^^^^^^^^^^
warning: `ash` (lib) generated 2 warnings
warning: unused import: `std::ffi::CStr`
--> src/main.rs:12:5
|
12 | use std::ffi::CStr;
| ^^^^^^^^^^^^^^
|
= note: `#[warn(unused_imports)]` on by default
warning: unused variable: `xyz`
--> src/main.rs:183:9
|
183 | let xyz: vk::native::PFN_vkGetMoltenVKConfigurationMVK = {
| ^^^ help: if this is intentional, prefix it with an underscore: `_xyz`
|
= note: `#[warn(unused_variables)]` on by default
warning: unused variable: `xyz`
--> src/main.rs:187:13
|
187 | let xyz = Xyz::load(|name| unsafe {
| ^^^ help: if this is intentional, prefix it with an underscore: `_xyz`
warning: unused variable: `toggle`
--> src/main.rs:1398:9
|
1398 | toggle,
| ^^^^^^ help: try ignoring the field: `toggle: _`
warning: unused variable: `hdr_framebuffer`
--> src/main.rs:1411:9
|
1411 | hdr_framebuffer,
| ^^^^^^^^^^^^^^^ help: try ignoring the field: `hdr_framebuffer: _`
warning: unused variable: `transmission_render_pass_info`
--> src/main.rs:1452:9
|
1452 | let transmission_render_pass_info = vk::RenderPassBeginInfo::builder()
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_transmission_render_pass_info`
warning: unused variable: `draw_count_buffer`
--> src/main.rs:2150:9
|
2150 | draw_count_buffer: &ash_abstractions::Buffer,
| ^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_draw_count_buffer`
warning: unused variable: `draw_count_index`
--> src/main.rs:2151:9
|
2151 | draw_count_index: u64,
| ^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_draw_count_index`
warning: field is never read: `get`
--> src/main.rs:162:9
|
162 | get: vk::native::PFN_vkGetMoltenVKConfigurationMVK
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: `#[warn(dead_code)]` on by default
warning: `transmission-renderer` (bin "transmission-renderer") generated 9 warnings
Finished dev [unoptimized + debuginfo] target(s) in 0.13s
Running `target/debug/transmission-renderer DamagedHelmet`
[src/main.rs:126] entry.enumerate_instance_layer_properties()? = [
LayerProperties {
layer_name: "MoltenVK",
spec_version: 4198589,
implementation_version: 10105,
description: "MoltenVK driver layer",
},
]
[mvk-info] MoltenVK version 1.1.5, supporting Vulkan version 1.1.189.
The following 72 Vulkan extensions are supported:
VK_KHR_16bit_storage v1
VK_KHR_8bit_storage v1
VK_KHR_bind_memory2 v1
VK_KHR_create_renderpass2 v1
VK_KHR_dedicated_allocation v3
VK_KHR_depth_stencil_resolve v1
VK_KHR_descriptor_update_template v1
VK_KHR_device_group v4
VK_KHR_device_group_creation v1
VK_KHR_driver_properties v1
VK_KHR_external_fence v1
VK_KHR_external_fence_capabilities v1
VK_KHR_external_memory v1
VK_KHR_external_memory_capabilities v1
VK_KHR_external_semaphore v1
VK_KHR_external_semaphore_capabilities v1
VK_KHR_get_memory_requirements2 v1
VK_KHR_get_physical_device_properties2 v2
VK_KHR_get_surface_capabilities2 v1
VK_KHR_imageless_framebuffer v1
VK_KHR_image_format_list v1
VK_KHR_maintenance1 v2
VK_KHR_maintenance2 v1
VK_KHR_maintenance3 v1
VK_KHR_multiview v1
VK_KHR_portability_subset v1
VK_KHR_push_descriptor v2
VK_KHR_relaxed_block_layout v1
VK_KHR_sampler_mirror_clamp_to_edge v3
VK_KHR_sampler_ycbcr_conversion v14
VK_KHR_shader_draw_parameters v1
VK_KHR_shader_float16_int8 v1
VK_KHR_shader_subgroup_extended_types v1
VK_KHR_storage_buffer_storage_class v1
VK_KHR_surface v25
VK_KHR_swapchain v70
VK_KHR_swapchain_mutable_format v1
VK_KHR_timeline_semaphore v2
VK_KHR_uniform_buffer_standard_layout v1
VK_KHR_variable_pointers v1
VK_EXT_debug_marker v4
VK_EXT_debug_report v10
VK_EXT_debug_utils v2
VK_EXT_descriptor_indexing v2
VK_EXT_fragment_shader_interlock v1
VK_EXT_hdr_metadata v2
VK_EXT_host_query_reset v1
VK_EXT_image_robustness v1
VK_EXT_inline_uniform_block v1
VK_EXT_memory_budget v1
VK_EXT_metal_surface v1
VK_EXT_post_depth_coverage v1
VK_EXT_private_data v1
VK_EXT_robustness2 v1
VK_EXT_scalar_block_layout v1
VK_EXT_shader_stencil_export v1
VK_EXT_shader_viewport_index_layer v1
VK_EXT_subgroup_size_control v2
VK_EXT_swapchain_colorspace v4
VK_EXT_texel_buffer_alignment v1
VK_EXT_texture_compression_astc_hdr v1
VK_EXT_vertex_attribute_divisor v3
VK_AMD_gpu_shader_half_float v2
VK_AMD_negative_viewport_height v1
VK_AMD_shader_image_load_store_lod v1
VK_AMD_shader_trinary_minmax v1
VK_IMG_format_pvrtc v1
VK_INTEL_shader_integer_functions2 v1
VK_GOOGLE_display_timing v1
VK_MVK_macos_surface v3
VK_MVK_moltenvk v32
VK_NV_glsl_shader v1
15:57:26 [INFO] [Debug Msg][general | validation | performance | 1111111111111111111111111111000] "MoltenVK version 1.1.5, supporting Vulkan version 1.1.189.\n\tThe following 72 Vulkan extensions are supported:\n\t\tVK_KHR_16bit_storage v1\n\t\tVK_KHR_8bit_storage v1\n\t\tVK_KHR_bind_memory2 v1\n\t\tVK_KHR_create_renderpass2 v1\n\t\tVK_KHR_dedicated_allocation v3\n\t\tVK_KHR_depth_stencil_resolve v1\n\t\tVK_KHR_descriptor_update_template v1\n\t\tVK_KHR_device_group v4\n\t\tVK_KHR_device_group_creation v1\n\t\tVK_KHR_driver_properties v1\n\t\tVK_KHR_external_fence v1\n\t\tVK_KHR_external_fence_capabilities v1\n\t\tVK_KHR_external_memory v1\n\t\tVK_KHR_external_memory_capabilities v1\n\t\tVK_KHR_external_semaphore v1\n\t\tVK_KHR_external_semaphore_capabilities v1\n\t\tVK_KHR_get_memory_requirements2 v1\n\t\tVK_KHR_get_physical_device_properties2 v2\n\t\tVK_KHR_get_surface_capabilities2 v1\n\t\tVK_KHR_imageless_framebuffer v1\n\t\tVK_KHR_image_format_list v1\n\t\tVK_KHR_maintenance1 v2\n\t\tVK_KHR_maintenance2 v1\n\t\tVK_KHR_maintenance3 v1\n\t\tVK_KHR_multiview v1\n\t\tVK_KHR_portability_subset v1\n\t\tVK_KHR_push_descriptor v2\n\t\tVK_KHR_relaxed_block_layout v1\n\t\tVK_KHR_sampler_mirror_clamp_to_edge v3\n\t\tVK_KHR_sampler_ycbcr_conversion v14\n\t\tVK_KHR_shader_draw_parameters v1\n\t\tVK_KHR_shader_float16_int8 v1\n\t\tVK_KHR_shader_subgroup_extended_types v1\n\t\tVK_KHR_storage_buffer_storage_class v1\n\t\tVK_KHR_surface v25\n\t\tVK_KHR_swapchain v70\n\t\tVK_KHR_swapchain_mutable_format v1\n\t\tVK_KHR_timeline_semaphore v2\n\t\tVK_KHR_uniform_buffer_standard_layout v1\n\t\tVK_KHR_variable_pointers v1\n\t\tVK_EXT_debug_marker v4\n\t\tVK_EXT_debug_report v10\n\t\tVK_EXT_debug_utils v2\n\t\tVK_EXT_descriptor_indexing v2\n\t\tVK_EXT_fragment_shader_interlock v1\n\t\tVK_EXT_hdr_metadata v2\n\t\tVK_EXT_host_query_reset v1\n\t\tVK_EXT_image_robustness v1\n\t\tVK_EXT_inline_uniform_block v1\n\t\tVK_EXT_memory_budget v1\n\t\tVK_EXT_metal_surface v1\n\t\tVK_EXT_post_depth_coverage v1\n\t\tVK_EXT_private_data v1\n\t\tVK_EXT_robustness2 v1\n\t\tVK_EXT_scalar_block_layout v1\n\t\tVK_EXT_shader_stencil_export v1\n\t\tVK_EXT_shader_viewport_index_layer v1\n\t\tVK_EXT_subgroup_size_control v2\n\t\tVK_EXT_swapchain_colorspace v4\n\t\tVK_EXT_texel_buffer_alignment v1\n\t\tVK_EXT_texture_compression_astc_hdr v1\n\t\tVK_EXT_vertex_attribute_divisor v3\n\t\tVK_AMD_gpu_shader_half_float v2\n\t\tVK_AMD_negative_viewport_height v1\n\t\tVK_AMD_shader_image_load_store_lod v1\n\t\tVK_AMD_shader_trinary_minmax v1\n\t\tVK_IMG_format_pvrtc v1\n\t\tVK_INTEL_shader_integer_functions2 v1\n\t\tVK_GOOGLE_display_timing v1\n\t\tVK_MVK_macos_surface v3\n\t\tVK_MVK_moltenvk v32\n\t\tVK_NV_glsl_shader v1"
[mvk-info] GPU device:
model: Intel(R) Iris(TM) Plus Graphics 640
type: Integrated
vendorID: 0x8086
deviceID: 0x5926
pipelineCacheUUID: C1D03328-0400-07D2-0000-000100000000
supports the following Metal Versions, GPU's and Feature Sets:
Metal Shading Language 2.2
GPU Family Mac 2
GPU Family Mac 1
GPU Family Common 3
GPU Family Common 2
GPU Family Common 1
macOS GPU Family 2 v1
macOS GPU Family 1 v4
macOS GPU Family 1 v3
macOS GPU Family 1 v2
macOS GPU Family 1 v1
15:57:26 [INFO] [Debug Msg][general | validation | performance | 1111111111111111111111111111000] "GPU device:\n\t\tmodel: Intel(R) Iris(TM) Plus Graphics 640\n\t\ttype: Integrated\n\t\tvendorID: 0x8086\n\t\tdeviceID: 0x5926\n\t\tpipelineCacheUUID: C1D03328-0400-07D2-0000-000100000000\n\tsupports the following Metal Versions, GPU\'s and Feature Sets:\n\t\tMetal Shading Language 2.2\n\t\tGPU Family Mac 2\n\t\tGPU Family Mac 1\n\t\tGPU Family Common 3\n\t\tGPU Family Common 2\n\t\tGPU Family Common 1\n\t\tmacOS GPU Family 2 v1\n\t\tmacOS GPU Family 1 v4\n\t\tmacOS GPU Family 1 v3\n\t\tmacOS GPU Family 1 v2\n\t\tmacOS GPU Family 1 v1"
[mvk-info] Created VkInstance for Vulkan version 1.1.0, as requested by app, with the following 3 Vulkan extensions enabled:
VK_KHR_surface v25
VK_EXT_debug_utils v2
VK_EXT_metal_surface v1
15:57:26 [INFO] [Debug Msg][general | validation | performance | 1111111111111111111111111111000] "Created VkInstance for Vulkan version 1.1.0, as requested by app, with the following 3 Vulkan extensions enabled:\n\t\tVK_KHR_surface v25\n\t\tVK_EXT_debug_utils v2\n\t\tVK_EXT_metal_surface v1"
[src/main.rs:175] val = 0x0000000000000000
15:57:26 [INFO] Found 1 device
15:57:26 [INFO] 
15:57:26 [INFO] Checking Device: "Intel(R) Iris(TM) Plus Graphics 640"
15:57:26 [INFO]  Checking for a graphics queue family: ✔️
15:57:26 [INFO]  Checking for an appropriate surface format: ✔️
15:57:26 [INFO]  Checking for required extensions:
15:57:26 [INFO]  * "VK_KHR_swapchain": ✔️
15:57:26 [INFO]  * "VK_KHR_portability_subset": ✔️
15:57:26 [INFO]  * "VK_EXT_descriptor_indexing": ✔️
15:57:26 [INFO] 
15:57:26 [INFO] Using device "Intel(R) Iris(TM) Plus Graphics 640"
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Intel(R) Iris(TM) Plus Graphics 640 with the following 3 Vulkan extensions enabled:
VK_KHR_portability_subset v1
VK_KHR_swapchain v70
VK_EXT_descriptor_indexing v2
[mvk-info] Converting SPIR-V:
; SPIR-V
; Version: 1.3
; Generator: Embark Studios Rust GPU Compiler Backend; 0
; Bound: 348
; Schema: 0
OpCapability RuntimeDescriptorArray
OpCapability Shader
OpExtension "SPV_EXT_descriptor_indexing"
OpMemoryModel Logical Simple
OpEntryPoint Vertex %1 "vertex_instanced" %2 %3 %4 %5 %6 %7 %8 %9 %10
OpMemberDecorate %31 0 Offset 0
OpMemberDecorate %31 1 Offset 16
OpMemberDecorate %32 0 Offset 0
OpMemberDecorate %32 1 Offset 32
OpMemberDecorate %32 2 Offset 36
OpDecorate %41 ArrayStride 48
OpMemberDecorate %33 0 Offset 0
OpMemberDecorate %33 1 Offset 16
OpMemberDecorate %33 2 Offset 32
OpMemberDecorate %33 3 Offset 48
OpMemberDecorate %34 0 Offset 0
OpMemberDecorate %36 0 Offset 0
OpMemberDecorate %36 1 Offset 64
OpMemberDecorate %36 2 Offset 80
OpMemberDecorate %36 3 Offset 88
OpDecorate %2 Location 0
OpDecorate %3 Location 1
OpDecorate %4 Location 2
OpDecorate %42 Block
OpMemberDecorate %42 0 Offset 0
OpDecorate %43 Block
OpMemberDecorate %43 0 Offset 0
OpDecorate %38 DescriptorSet 1
OpDecorate %38 Binding 0
OpDecorate %5 BuiltIn InstanceIndex
OpDecorate %10 BuiltIn Position
OpDecorate %6 Location 0
OpDecorate %7 Location 1
OpDecorate %8 Location 2
OpDecorate %9 Location 3
%44 = OpTypeFloat 32
%45 = OpTypeVector %44 4
%46 = OpTypeVector %44 2
%47 = OpTypePointer Input %46
%48 = OpTypePointer Output %46
%49 = OpTypePointer Output %45
%50 = OpTypeInt 32 0
%51 = OpTypePointer Input %50
%52 = OpTypePointer Output %50
%53 = OpTypePointer StorageBuffer %50
%54 = OpConstant %50 0
%55 = OpTypeVector %44 3
%56 = OpTypePointer Input %55
%57 = OpTypePointer Output %55
%58 = OpConstant %50 2
%31 = OpTypeStruct %45 %45
%32 = OpTypeStruct %31 %50 %50
%41 = OpTypeRuntimeArray %32
%62 = OpTypeVoid
%63 = OpTypeVector %50 2
%33 = OpTypeStruct %45 %45 %45 %45
%34 = OpTypeStruct %33
%36 = OpTypeStruct %34 %55 %63 %63
%65 = OpTypeFunction %62
%2 = OpVariable %56 Input
%3 = OpVariable %56 Input
%4 = OpVariable %47 Input
%42 = OpTypeStruct %36
%66 = OpTypePointer PushConstant %42
%37 = OpVariable %66 PushConstant
%43 = OpTypeStruct %41
%67 = OpTypePointer StorageBuffer %43
%38 = OpVariable %67 StorageBuffer
%5 = OpVariable %51 Input
%10 = OpVariable %49 Output
%6 = OpVariable %57 Output
%7 = OpVariable %57 Output
%8 = OpVariable %48 Output
%9 = OpVariable %52 Output
%68 = OpConstant %44 2
%69 = OpTypePointer PushConstant %34
%71 = OpTypePointer StorageBuffer %31
%1 = OpFunction %62 None %65
%73 = OpLabel
%74 = OpLoad %55 %2
%75 = OpLoad %55 %3
%76 = OpLoad %46 %4
%78 = OpLoad %50 %5
%81 = OpAccessChain %71 %38 %54 %78 %54
%82 = OpLoad %31 %81
%275 = OpCompositeExtract %45 %82 0
%276 = OpCompositeExtract %44 %275 0
%277 = OpCompositeExtract %44 %275 1
%278 = OpCompositeExtract %44 %275 2
%279 = OpCompositeConstruct %55 %276 %277 %278
%280 = OpCompositeExtract %44 %82 0 3
%281 = OpCompositeExtract %45 %82 1
%289 = OpCompositeExtract %44 %281 3
%290 = OpCompositeExtract %44 %281 0
%291 = OpCompositeExtract %44 %281 1
%292 = OpCompositeExtract %44 %281 2
%293 = OpFMul %44 %290 %290
%294 = OpFMul %44 %291 %291
%295 = OpFAdd %44 %293 %294
%296 = OpFMul %44 %292 %292
%297 = OpFAdd %44 %295 %296
%298 = OpFMul %44 %289 %289
%299 = OpFSub %44 %298 %297
%300 = OpCompositeExtract %44 %74 0
%301 = OpFMul %44 %300 %299
%302 = OpCompositeExtract %44 %74 1
%303 = OpFMul %44 %302 %299
%304 = OpCompositeExtract %44 %74 2
%305 = OpFMul %44 %304 %299
%307 = OpFMul %44 %300 %290
%309 = OpFMul %44 %302 %291
%310 = OpFAdd %44 %307 %309
%312 = OpFMul %44 %304 %292
%313 = OpFAdd %44 %310 %312
%314 = OpFMul %44 %313 %68
%315 = OpFMul %44 %290 %314
%316 = OpFMul %44 %291 %314
%317 = OpFMul %44 %292 %314
%318 = OpFAdd %44 %301 %315
%319 = OpFAdd %44 %303 %316
%320 = OpFAdd %44 %305 %317
%322 = OpFMul %44 %291 %304
%324 = OpFMul %44 %302 %292
%325 = OpFSub %44 %322 %324
%327 = OpFMul %44 %292 %300
%329 = OpFMul %44 %304 %290
%330 = OpFSub %44 %327 %329
%332 = OpFMul %44 %290 %302
%334 = OpFMul %44 %300 %291
%335 = OpFSub %44 %332 %334
%336 = OpFMul %44 %289 %68
%337 = OpFMul %44 %325 %336
%338 = OpFMul %44 %330 %336
%339 = OpFMul %44 %335 %336
%340 = OpFAdd %44 %318 %337
%341 = OpFAdd %44 %319 %338
%342 = OpFAdd %44 %320 %339
%343 = OpFMul %44 %280 %340
%344 = OpFMul %44 %280 %341
%345 = OpFMul %44 %280 %342
%346 = OpCompositeConstruct %55 %343 %344 %345
%347 = OpFAdd %55 %279 %346
OpStore %6 %347
%97 = OpCompositeExtract %44 %75 0
%98 = OpFMul %44 %97 %299
%99 = OpCompositeExtract %44 %75 1
%100 = OpFMul %44 %99 %299
%101 = OpCompositeExtract %44 %75 2
%102 = OpFMul %44 %101 %299
%104 = OpFMul %44 %97 %290
%106 = OpFMul %44 %99 %291
%107 = OpFAdd %44 %104 %106
%109 = OpFMul %44 %101 %292
%110 = OpFAdd %44 %107 %109
%111 = OpFMul %44 %110 %68
%112 = OpFMul %44 %290 %111
%113 = OpFMul %44 %291 %111
%114 = OpFMul %44 %292 %111
%115 = OpFAdd %44 %98 %112
%116 = OpFAdd %44 %100 %113
%117 = OpFAdd %44 %102 %114
%119 = OpFMul %44 %291 %101
%121 = OpFMul %44 %99 %292
%122 = OpFSub %44 %119 %121
%124 = OpFMul %44 %292 %97
%126 = OpFMul %44 %101 %290
%127 = OpFSub %44 %124 %126
%129 = OpFMul %44 %290 %99
%131 = OpFMul %44 %97 %291
%132 = OpFSub %44 %129 %131
%134 = OpFMul %44 %122 %336
%135 = OpFMul %44 %127 %336
%136 = OpFMul %44 %132 %336
%137 = OpFAdd %44 %115 %134
%138 = OpFAdd %44 %116 %135
%139 = OpFAdd %44 %117 %136
%140 = OpCompositeConstruct %55 %137 %138 %139
OpStore %7 %140
OpStore %8 %76
%141 = OpAccessChain %53 %38 %54 %78 %58
%142 = OpLoad %50 %141
OpStore %9 %142
%143 = OpAccessChain %69 %37 %54 %54
%144 = OpLoad %34 %143
%145 = OpCompositeExtract %44 %347 0
%146 = OpCompositeExtract %44 %347 1
%147 = OpCompositeExtract %44 %347 2
%148 = OpCompositeExtract %45 %144 0 0
%149 = OpCompositeExtract %44 %148 0
%150 = OpFMul %44 %149 %145
%151 = OpCompositeExtract %44 %148 1
%152 = OpFMul %44 %151 %145
%153 = OpCompositeExtract %44 %148 2
%154 = OpFMul %44 %153 %145
%155 = OpCompositeExtract %44 %148 3
%156 = OpFMul %44 %155 %145
%157 = OpCompositeExtract %45 %144 0 1
%158 = OpCompositeExtract %44 %157 0
%159 = OpFMul %44 %158 %146
%160 = OpFAdd %44 %159 %150
%161 = OpCompositeExtract %44 %157 1
%162 = OpFMul %44 %161 %146
%163 = OpFAdd %44 %162 %152
%164 = OpCompositeExtract %44 %157 2
%165 = OpFMul %44 %164 %146
%166 = OpFAdd %44 %165 %154
%167 = OpCompositeExtract %44 %157 3
%168 = OpFMul %44 %167 %146
%169 = OpFAdd %44 %168 %156
%170 = OpCompositeExtract %45 %144 0 2
%171 = OpCompositeExtract %44 %170 0
%172 = OpFMul %44 %171 %147
%173 = OpFAdd %44 %172 %160
%174 = OpCompositeExtract %44 %170 1
%175 = OpFMul %44 %174 %147
%176 = OpFAdd %44 %175 %163
%177 = OpCompositeExtract %44 %170 2
%178 = OpFMul %44 %177 %147
%179 = OpFAdd %44 %178 %166
%180 = OpCompositeExtract %44 %170 3
%181 = OpFMul %44 %180 %147
%182 = OpFAdd %44 %181 %169
%183 = OpCompositeExtract %45 %144 0 3
%184 = OpCompositeExtract %44 %183 0
%186 = OpFAdd %44 %184 %173
%187 = OpCompositeExtract %44 %183 1
%189 = OpFAdd %44 %187 %176
%190 = OpCompositeExtract %44 %183 2
%192 = OpFAdd %44 %190 %179
%193 = OpCompositeExtract %44 %183 3
%195 = OpFAdd %44 %193 %182
%196 = OpCompositeConstruct %45 %186 %189 %192 %195
OpStore %10 %196
OpReturn
OpFunctionEnd
End SPIR-V
Converted MSL:
#include <metal_stdlib>
#include <simd/simd.h>
using namespace metal;
struct _31
{
float4 _m0;
float4 _m1;
};
struct _32
{
_31 _m0;
uint _m1;
uint _m2;
char _m0_final_padding[8];
};
struct _33
{
float4 _m0;
float4 _m1;
float4 _m2;
float4 _m3;
};
struct _34
{
_33 _m0;
};
struct _36
{
_34 _m0;
float3 _m1;
uint2 _m2;
uint2 _m3;
};
struct _42
{
_36 _m0;
};
struct _43
{
_32 _m0[1];
};
struct spvDescriptorSetBuffer1
{
device _43* m_38 [[id(0)]];
};
struct vertex_instanced_out
{
float3 m_6 [[user(locn0)]];
float3 m_7 [[user(locn1)]];
float2 m_8 [[user(locn2)]];
uint m_9 [[user(locn3)]];
float4 gl_Position [[position]];
};
struct vertex_instanced_in
{
float3 m_2 [[attribute(0)]];
float3 m_3 [[attribute(1)]];
float2 m_4 [[attribute(2)]];
};
vertex vertex_instanced_out vertex_instanced(vertex_instanced_in in [[stage_in]], constant spvDescriptorSetBuffer1& spvDescriptorSet1 [[buffer(1)]], constant _42& _37 [[buffer(3)]], uint gl_InstanceIndex [[instance_id]])
{
vertex_instanced_out out = {};
float _299 = ((*spvDescriptorSet1.m_38)._m0[gl_InstanceIndex]._m0._m1.w * (*spvDescriptorSet1.m_38)._m0[gl_InstanceIndex]._m0._m1.w) - ((((*spvDescriptorSet1.m_38)._m0[gl_InstanceIndex]._m0._m1.x * (*spvDescriptorSet1.m_38)._m0[gl_InstanceIndex]._m0._m1.x) + ((*spvDescriptorSet1.m_38)._m0[gl_InstanceIndex]._m0._m1.y * (*spvDescriptorSet1.m_38)._m0[gl_InstanceIndex]._m0._m1.y)) + ((*spvDescriptorSet1.m_38)._m0[gl_InstanceIndex]._m0._m1.z * (*spvDescriptorSet1.m_38)._m0[gl_InstanceIndex]._m0._m1.z));
float _314 = (((in.m_2.x * (*spvDescriptorSet1.m_38)._m0[gl_InstanceIndex]._m0._m1.x) + (in.m_2.y * (*spvDescriptorSet1.m_38)._m0[gl_InstanceIndex]._m0._m1.y)) + (in.m_2.z * (*spvDescriptorSet1.m_38)._m0[gl_InstanceIndex]._m0._m1.z)) * 2.0;
float _336 = (*spvDescriptorSet1.m_38)._m0[gl_InstanceIndex]._m0._m1.w * 2.0;
float3 _347 = float3((*spvDescriptorSet1.m_38)._m0[gl_InstanceIndex]._m0._m0.xyz) + float3((*spvDescriptorSet1.m_38)._m0[gl_InstanceIndex]._m0._m0.w * (((in.m_2.x * _299) + ((*spvDescriptorSet1.m_38)._m0[gl_InstanceIndex]._m0._m1.x * _314)) + ((((*spvDescriptorSet1.m_38)._m0[gl_InstanceIndex]._m0._m1.y * in.m_2.z) - (in.m_2.y * (*spvDescriptorSet1.m_38)._m0[gl_InstanceIndex]._m0._m1.z)) * _336)), (*spvDescriptorSet1.m_38)._m0[gl_InstanceIndex]._m0._m0.w * (((in.m_2.y * _299) + ((*spvDescriptorSet1.m_38)._m0[gl_InstanceIndex]._m0._m1.y * _314)) + ((((*spvDescriptorSet1.m_38)._m0[gl_InstanceIndex]._m0._m1.z * in.m_2.x) - (in.m_2.z * (*spvDescriptorSet1.m_38)._m0[gl_InstanceIndex]._m0._m1.x)) * _336)), (*spvDescriptorSet1.m_38)._m0[gl_InstanceIndex]._m0._m0.w * (((in.m_2.z * _299) + ((*spvDescriptorSet1.m_38)._m0[gl_InstanceIndex]._m0._m1.z * _314)) + ((((*spvDescriptorSet1.m_38)._m0[gl_InstanceIndex]._m0._m1.x * in.m_2.y) - (in.m_2.x * (*spvDescriptorSet1.m_38)._m0[gl_InstanceIndex]._m0._m1.y)) * _336)));
out.m_6 = _347;
float _111 = (((in.m_3.x * (*spvDescriptorSet1.m_38)._m0[gl_InstanceIndex]._m0._m1.x) + (in.m_3.y * (*spvDescriptorSet1.m_38)._m0[gl_InstanceIndex]._m0._m1.y)) + (in.m_3.z * (*spvDescriptorSet1.m_38)._m0[gl_InstanceIndex]._m0._m1.z)) * 2.0;
out.m_7 = float3(((in.m_3.x * _299) + ((*spvDescriptorSet1.m_38)._m0[gl_InstanceIndex]._m0._m1.x * _111)) + ((((*spvDescriptorSet1.m_38)._m0[gl_InstanceIndex]._m0._m1.y * in.m_3.z) - (in.m_3.y * (*spvDescriptorSet1.m_38)._m0[gl_InstanceIndex]._m0._m1.z)) * _336), ((in.m_3.y * _299) + ((*spvDescriptorSet1.m_38)._m0[gl_InstanceIndex]._m0._m1.y * _111)) + ((((*spvDescriptorSet1.m_38)._m0[gl_InstanceIndex]._m0._m1.z * in.m_3.x) - (in.m_3.z * (*spvDescriptorSet1.m_38)._m0[gl_InstanceIndex]._m0._m1.x)) * _336), ((in.m_3.z * _299) + ((*spvDescriptorSet1.m_38)._m0[gl_InstanceIndex]._m0._m1.z * _111)) + ((((*spvDescriptorSet1.m_38)._m0[gl_InstanceIndex]._m0._m1.x * in.m_3.y) - (in.m_3.x * (*spvDescriptorSet1.m_38)._m0[gl_InstanceIndex]._m0._m1.y)) * _336));
out.m_8 = in.m_4;
out.m_9 = (*spvDescriptorSet1.m_38)._m0[gl_InstanceIndex]._m2;
float _145 = _347.x;
float _146 = _347.y;
float _147 = _347.z;
out.gl_Position = float4(_37._m0._m0._m0._m3.x + ((_37._m0._m0._m0._m2.x * _147) + ((_37._m0._m0._m0._m1.x * _146) + (_37._m0._m0._m0._m0.x * _145))), _37._m0._m0._m0._m3.y + ((_37._m0._m0._m0._m2.y * _147) + ((_37._m0._m0._m0._m1.y * _146) + (_37._m0._m0._m0._m0.y * _145))), _37._m0._m0._m0._m3.z + ((_37._m0._m0._m0._m2.z * _147) + ((_37._m0._m0._m0._m1.z * _146) + (_37._m0._m0._m0._m0.z * _145))), _37._m0._m0._m0._m3.w + ((_37._m0._m0._m0._m2.w * _147) + ((_37._m0._m0._m0._m1.w * _146) + (_37._m0._m0._m0._m0.w * _145))));
out.gl_Position.y = -(out.gl_Position.y); // Invert Y-axis for Metal
return out;
}
End MSL
Estimated original GLSL:
#version 450
#extension GL_EXT_nonuniform_qualifier : require
out gl_PerVertex
{
vec4 gl_Position;
};
struct _31
{
vec4 _m0;
vec4 _m1;
};
struct _32
{
_31 _m0;
uint _m1;
uint _m2;
};
struct _33
{
vec4 _m0;
vec4 _m1;
vec4 _m2;
vec4 _m3;
};
struct _34
{
_33 _m0;
};
struct _36
{
_34 _m0;
vec3 _m1;
uvec2 _m2;
uvec2 _m3;
};
layout(set = 1, binding = 0, std430) buffer _43_38
{
_32 _m0[];
} _38;
layout(push_constant, std430) uniform _42_37
{
_36 _m0;
} _37;
layout(location = 0) in vec3 _2;
layout(location = 1) in vec3 _3;
layout(location = 2) in vec2 _4;
layout(location = 0) out vec3 _6;
layout(location = 1) out vec3 _7;
layout(location = 2) out vec2 _8;
layout(location = 3) out uint _9;
void main()
{
float _299 = (_38._m0[uint(gl_InstanceIndex)]._m0._m1.w * _38._m0[uint(gl_InstanceIndex)]._m0._m1.w) - (((_38._m0[uint(gl_InstanceIndex)]._m0._m1.x * _38._m0[uint(gl_InstanceIndex)]._m0._m1.x) + (_38._m0[uint(gl_InstanceIndex)]._m0._m1.y * _38._m0[uint(gl_InstanceIndex)]._m0._m1.y)) + (_38._m0[uint(gl_InstanceIndex)]._m0._m1.z * _38._m0[uint(gl_InstanceIndex)]._m0._m1.z));
float _314 = (((_2.x * _38._m0[uint(gl_InstanceIndex)]._m0._m1.x) + (_2.y * _38._m0[uint(gl_InstanceIndex)]._m0._m1.y)) + (_2.z * _38._m0[uint(gl_InstanceIndex)]._m0._m1.z)) * 2.0;
float _336 = _38._m0[uint(gl_InstanceIndex)]._m0._m1.w * 2.0;
vec3 _347 = vec3(_38._m0[uint(gl_InstanceIndex)]._m0._m0.xyz) + vec3(_38._m0[uint(gl_InstanceIndex)]._m0._m0.w * (((_2.x * _299) + (_38._m0[uint(gl_InstanceIndex)]._m0._m1.x * _314)) + (((_38._m0[uint(gl_InstanceIndex)]._m0._m1.y * _2.z) - (_2.y * _38._m0[uint(gl_InstanceIndex)]._m0._m1.z)) * _336)), _38._m0[uint(gl_InstanceIndex)]._m0._m0.w * (((_2.y * _299) + (_38._m0[uint(gl_InstanceIndex)]._m0._m1.y * _314)) + (((_38._m0[uint(gl_InstanceIndex)]._m0._m1.z * _2.x) - (_2.z * _38._m0[uint(gl_InstanceIndex)]._m0._m1.x)) * _336)), _38._m0[uint(gl_InstanceIndex)]._m0._m0.w * (((_2.z * _299) + (_38._m0[uint(gl_InstanceIndex)]._m0._m1.z * _314)) + (((_38._m0[uint(gl_InstanceIndex)]._m0._m1.x * _2.y) - (_2.x * _38._m0[uint(gl_InstanceIndex)]._m0._m1.y)) * _336)));
_6 = _347;
float _111 = (((_3.x * _38._m0[uint(gl_InstanceIndex)]._m0._m1.x) + (_3.y * _38._m0[uint(gl_InstanceIndex)]._m0._m1.y)) + (_3.z * _38._m0[uint(gl_InstanceIndex)]._m0._m1.z)) * 2.0;
_7 = vec3(((_3.x * _299) + (_38._m0[uint(gl_InstanceIndex)]._m0._m1.x * _111)) + (((_38._m0[uint(gl_InstanceIndex)]._m0._m1.y * _3.z) - (_3.y * _38._m0[uint(gl_InstanceIndex)]._m0._m1.z)) * _336), ((_3.y * _299) + (_38._m0[uint(gl_InstanceIndex)]._m0._m1.y * _111)) + (((_38._m0[uint(gl_InstanceIndex)]._m0._m1.z * _3.x) - (_3.z * _38._m0[uint(gl_InstanceIndex)]._m0._m1.x)) * _336), ((_3.z * _299) + (_38._m0[uint(gl_InstanceIndex)]._m0._m1.z * _111)) + (((_38._m0[uint(gl_InstanceIndex)]._m0._m1.x * _3.y) - (_3.x * _38._m0[uint(gl_InstanceIndex)]._m0._m1.y)) * _336));
_8 = _4;
_9 = _38._m0[uint(gl_InstanceIndex)]._m2;
float _145 = _347.x;
float _146 = _347.y;
float _147 = _347.z;
gl_Position = vec4(_37._m0._m0._m0._m3.x + ((_37._m0._m0._m0._m2.x * _147) + ((_37._m0._m0._m0._m1.x * _146) + (_37._m0._m0._m0._m0.x * _145))), _37._m0._m0._m0._m3.y + ((_37._m0._m0._m0._m2.y * _147) + ((_37._m0._m0._m0._m1.y * _146) + (_37._m0._m0._m0._m0.y * _145))), _37._m0._m0._m0._m3.z + ((_37._m0._m0._m0._m2.z * _147) + ((_37._m0._m0._m0._m1.z * _146) + (_37._m0._m0._m0._m0.z * _145))), _37._m0._m0._m0._m3.w + ((_37._m0._m0._m0._m2.w * _147) + ((_37._m0._m0._m0._m1.w * _146) + (_37._m0._m0._m0._m0.w * _145))));
}
End GLSL
[mvk-info] Converting SPIR-V:
; SPIR-V
; Version: 1.3
; Generator: Embark Studios Rust GPU Compiler Backend; 0
; Bound: 438
; Schema: 0
OpCapability RuntimeDescriptorArray
OpCapability Shader
OpExtension "SPV_EXT_descriptor_indexing"
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical Simple
OpEntryPoint Fragment %2 "fragment_normal" %3 %4 %5 %6 %7 %8
OpExecutionMode %2 OriginUpperLeft
OpMemberDecorate %45 0 Offset 0
OpMemberDecorate %45 1 Offset 4
OpMemberDecorate %45 2 Offset 8
OpMemberDecorate %45 3 Offset 12
OpMemberDecorate %45 4 Offset 16
OpMemberDecorate %45 5 Offset 20
OpMemberDecorate %45 6 Offset 24
OpMemberDecorate %45 7 Offset 28
OpMemberDecorate %45 8 Offset 32
OpMemberDecorate %46 0 Offset 0
OpMemberDecorate %46 1 Offset 36
OpMemberDecorate %46 2 Offset 40
OpMemberDecorate %46 3 Offset 44
OpMemberDecorate %46 4 Offset 48
OpMemberDecorate %46 5 Offset 64
OpMemberDecorate %46 6 Offset 80
OpMemberDecorate %46 7 Offset 84
OpMemberDecorate %46 8 Offset 88
OpMemberDecorate %46 9 Offset 92
OpMemberDecorate %46 10 Offset 96
OpMemberDecorate %46 11 Offset 100
OpMemberDecorate %46 12 Offset 112
OpMemberDecorate %46 13 Offset 128
OpMemberDecorate %46 14 Offset 144
OpDecorate %63 ArrayStride 160
OpDecorate %64 ArrayStride 4
OpDecorate %3 Location 0
OpDecorate %4 Location 1
OpDecorate %5 Location 2
OpDecorate %6 Flat
OpDecorate %6 Location 3
OpDecorate %58 DescriptorSet 0
OpDecorate %58 Binding 0
OpDecorate %59 DescriptorSet 0
OpDecorate %59 Binding 1
OpDecorate %66 Block
OpMemberDecorate %66 0 Offset 0
OpDecorate %60 DescriptorSet 0
OpDecorate %60 Binding 2
OpDecorate %7 Location 0
OpDecorate %8 Location 1
%67 = OpTypeFloat 32
%68 = OpTypeVector %67 4
%69 = OpTypeImage %67 2D 2 0 0 1 Unknown
%70 = OpTypePointer UniformConstant %69
%71 = OpTypeSampler
%72 = OpTypeVector %67 2
%74 = OpTypePointer UniformConstant %71
%75 = OpTypePointer Input %72
%77 = OpTypePointer Output %68
%78 = OpTypePointer StorageBuffer %68
%79 = OpTypeSampledImage %69
%80 = OpTypeInt 32 0
%81 = OpTypePointer Input %80
%82 = OpConstant %80 4
%83 = OpConstant %80 0
%85 = OpTypeVector %67 3
%87 = OpTypePointer Input %85
%94 = OpTypeInt 32 1
%45 = OpTypeStruct %94 %94 %94 %94 %94 %94 %94 %94 %94
%46 = OpTypeStruct %45 %67 %67 %67 %68 %85 %67 %67 %67 %67 %67 %67 %85 %67 %85
%63 = OpTypeRuntimeArray %46
%64 = OpTypeRuntimeArray %69
%97 = OpTypePointer UniformConstant %64
%99 = OpTypeVoid
%102 = OpTypeBool
%104 = OpTypePointer StorageBuffer %94
%105 = OpConstant %94 -1
%115 = OpTypeFunction %99
%3 = OpVariable %87 Input
%4 = OpVariable %87 Input
%5 = OpVariable %75 Input
%6 = OpVariable %81 Input
%58 = OpVariable %97 UniformConstant
%59 = OpVariable %74 UniformConstant
%66 = OpTypeStruct %63
%117 = OpTypePointer StorageBuffer %66
%60 = OpVariable %117 StorageBuffer
%7 = OpVariable %77 Output
%8 = OpVariable %77 Output
%2 = OpFunction %99 None %115
%232 = OpLabel
%235 = OpLoad %72 %5
%236 = OpLoad %80 %6
%240 = OpLoad %71 %59
%241 = OpAccessChain %78 %60 %83 %236 %82
%242 = OpLoad %68 %241
%244 = OpAccessChain %104 %60 %83 %236 %83 %83
%245 = OpLoad %94 %244
%246 = OpIEqual %102 %245 %105
OpSelectionMerge %247 None
OpBranchConditional %246 %248 %249
%248 = OpLabel
OpBranch %247
%249 = OpLabel
%252 = OpLoad %94 %244
%253 = OpBitcast %80 %252
%254 = OpAccessChain %70 %58 %253
%435 = OpLoad %69 %254
%436 = OpSampledImage %79 %435 %240
%437 = OpImageSampleImplicitLod %68 %436 %235
%256 = OpFMul %68 %242 %437
OpBranch %247
%247 = OpLabel
%257 = OpPhi %68 %242 %248 %256 %249
OpStore %7 %257
OpStore %8 %257
OpReturn
OpFunctionEnd
End SPIR-V
Converted MSL:
#include <metal_stdlib>
#include <simd/simd.h>
using namespace metal;
struct _45
{
int _m0;
int _m1;
int _m2;
int _m3;
int _m4;
int _m5;
int _m6;
int _m7;
int _m8;
};
struct _46
{
_45 _m0;
float _m1;
float _m2;
float _m3;
float4 _m4;
float3 _m5;
float _m6;
float _m7;
float _m8;
float _m9;
float _m10;
float _m11;
float3 _m12;
float _m13;
float3 _m14;
};
struct _66
{
_46 _m0[1];
};
struct spvDescriptorSetBuffer0
{
array<texture2d<float>, 127> m_58 [[id(0)]];
sampler m_59 [[id(127)]];
device _66* m_60 [[id(128)]];
};
struct fragment_normal_out
{
float4 m_7 [[color(0)]];
float4 m_8 [[color(1)]];
};
struct fragment_normal_in
{
float2 m_5 [[user(locn2)]];
uint m_6 [[user(locn3)]];
};
fragment fragment_normal_out fragment_normal(fragment_normal_in in [[stage_in]], constant spvDescriptorSetBuffer0& spvDescriptorSet0 [[buffer(0)]])
{
fragment_normal_out out = {};
float4 _257;
if ((*spvDescriptorSet0.m_60)._m0[in.m_6]._m0._m0 == (-1))
{
_257 = (*spvDescriptorSet0.m_60)._m0[in.m_6]._m4;
}
else
{
uint _253 = uint((*spvDescriptorSet0.m_60)._m0[in.m_6]._m0._m0);
_257 = (*spvDescriptorSet0.m_60)._m0[in.m_6]._m4 * spvDescriptorSet0.m_58[_253].sample(spvDescriptorSet0.m_59, in.m_5);
}
out.m_7 = _257;
out.m_8 = _257;
return out;
}
End MSL
Original GLSL extraction error: Buffer block cannot be expressed as any of std430, std140, scalar, even with enhanced layouts. You can try flattening this block to support a more flexible layout.
Partially converted GLSL:
#version 450
#extension GL_EXT_nonuniform_qualifier : require
struct _45
{
int _m0;
int _m1;
int _m2;
int _m3;
int _m4;
int _m5;
int _m6;
int _m7;
int _m8;
};
struct _46
{
_45 _m0;
float _m1;
float _m2;
float _m3;
vec4 _m4;
vec3 _m5;
float _m6;
float _m7;
float _m8;
float _m9;
float _m10;
float _m11;
vec3 _m12;
float _m13;
vec3 _m14;
};
End GLSL
[mvk-info] Converting SPIR-V:
; SPIR-V
; Version: 1.3
; Generator: Embark Studios Rust GPU Compiler Backend; 0
; Bound: 273
; Schema: 0
OpCapability RuntimeDescriptorArray
OpCapability Shader
OpExtension "SPV_EXT_descriptor_indexing"
OpMemoryModel Logical Simple
OpEntryPoint Vertex %1 "depth_pre_pass_instanced" %2 %3 %4
OpMemberDecorate %23 0 Offset 0
OpMemberDecorate %23 1 Offset 16
OpMemberDecorate %24 0 Offset 0
OpMemberDecorate %24 1 Offset 32
OpMemberDecorate %24 2 Offset 36
OpDecorate %33 ArrayStride 48
OpMemberDecorate %25 0 Offset 0
OpMemberDecorate %25 1 Offset 16
OpMemberDecorate %25 2 Offset 32
OpMemberDecorate %25 3 Offset 48
OpMemberDecorate %26 0 Offset 0
OpMemberDecorate %28 0 Offset 0
OpMemberDecorate %28 1 Offset 64
OpMemberDecorate %28 2 Offset 80
OpMemberDecorate %28 3 Offset 88
OpDecorate %2 Location 0
OpDecorate %34 Block
OpMemberDecorate %34 0 Offset 0
OpDecorate %35 Block
OpMemberDecorate %35 0 Offset 0
OpDecorate %30 DescriptorSet 1
OpDecorate %30 Binding 0
OpDecorate %3 BuiltIn InstanceIndex
OpDecorate %4 BuiltIn Position
%36 = OpTypeFloat 32
%37 = OpTypeVector %36 4
%38 = OpTypePointer Output %37
%39 = OpTypeInt 32 0
%40 = OpTypePointer Input %39
%41 = OpConstant %39 0
%42 = OpTypeVector %36 3
%43 = OpTypePointer Input %42
%23 = OpTypeStruct %37 %37
%24 = OpTypeStruct %23 %39 %39
%33 = OpTypeRuntimeArray %24
%47 = OpTypeVoid
%48 = OpTypeVector %39 2
%25 = OpTypeStruct %37 %37 %37 %37
%26 = OpTypeStruct %25
%28 = OpTypeStruct %26 %42 %48 %48
%50 = OpTypeFunction %47
%2 = OpVariable %43 Input
%34 = OpTypeStruct %28
%51 = OpTypePointer PushConstant %34
%29 = OpVariable %51 PushConstant
%35 = OpTypeStruct %33
%52 = OpTypePointer StorageBuffer %35
%30 = OpVariable %52 StorageBuffer
%3 = OpVariable %40 Input
%4 = OpVariable %38 Output
%53 = OpConstant %36 2
%54 = OpTypePointer PushConstant %26
%56 = OpTypePointer StorageBuffer %23
%1 = OpFunction %47 None %50
%58 = OpLabel
%59 = OpLoad %42 %2
%61 = OpLoad %39 %3
%64 = OpAccessChain %56 %30 %41 %61 %41
%65 = OpLoad %23 %64
%200 = OpCompositeExtract %37 %65 0
%201 = OpCompositeExtract %36 %200 0
%202 = OpCompositeExtract %36 %200 1
%203 = OpCompositeExtract %36 %200 2
%204 = OpCompositeConstruct %42 %201 %202 %203
%205 = OpCompositeExtract %36 %65 0 3
%206 = OpCompositeExtract %37 %65 1
%214 = OpCompositeExtract %36 %206 3
%215 = OpCompositeExtract %36 %206 0
%216 = OpCompositeExtract %36 %206 1
%217 = OpCompositeExtract %36 %206 2
%218 = OpFMul %36 %215 %215
%219 = OpFMul %36 %216 %216
%220 = OpFAdd %36 %218 %219
%221 = OpFMul %36 %217 %217
%222 = OpFAdd %36 %220 %221
%223 = OpFMul %36 %214 %214
%224 = OpFSub %36 %223 %222
%225 = OpCompositeExtract %36 %59 0
%226 = OpFMul %36 %225 %224
%227 = OpCompositeExtract %36 %59 1
%228 = OpFMul %36 %227 %224
%229 = OpCompositeExtract %36 %59 2
%230 = OpFMul %36 %229 %224
%232 = OpFMul %36 %225 %215
%234 = OpFMul %36 %227 %216
%235 = OpFAdd %36 %232 %234
%237 = OpFMul %36 %229 %217
%238 = OpFAdd %36 %235 %237
%239 = OpFMul %36 %238 %53
%240 = OpFMul %36 %215 %239
%241 = OpFMul %36 %216 %239
%242 = OpFMul %36 %217 %239
%243 = OpFAdd %36 %226 %240
%244 = OpFAdd %36 %228 %241
%245 = OpFAdd %36 %230 %242
%247 = OpFMul %36 %216 %229
%249 = OpFMul %36 %227 %217
%250 = OpFSub %36 %247 %249
%252 = OpFMul %36 %217 %225
%254 = OpFMul %36 %229 %215
%255 = OpFSub %36 %252 %254
%257 = OpFMul %36 %215 %227
%259 = OpFMul %36 %225 %216
%260 = OpFSub %36 %257 %259
%261 = OpFMul %36 %214 %53
%262 = OpFMul %36 %250 %261
%263 = OpFMul %36 %255 %261
%264 = OpFMul %36 %260 %261
%265 = OpFAdd %36 %243 %262
%266 = OpFAdd %36 %244 %263
%267 = OpFAdd %36 %245 %264
%268 = OpFMul %36 %205 %265
%269 = OpFMul %36 %205 %266
%270 = OpFMul %36 %205 %267
%271 = OpCompositeConstruct %42 %268 %269 %270
%272 = OpFAdd %42 %204 %271
%68 = OpAccessChain %54 %29 %41 %41
%69 = OpLoad %26 %68
%70 = OpCompositeExtract %36 %272 0
%71 = OpCompositeExtract %36 %272 1
%72 = OpCompositeExtract %36 %272 2
%73 = OpCompositeExtract %37 %69 0 0
%74 = OpCompositeExtract %36 %73 0
%75 = OpFMul %36 %74 %70
%76 = OpCompositeExtract %36 %73 1
%77 = OpFMul %36 %76 %70
%78 = OpCompositeExtract %36 %73 2
%79 = OpFMul %36 %78 %70
%80 = OpCompositeExtract %36 %73 3
%81 = OpFMul %36 %80 %70
%82 = OpCompositeExtract %37 %69 0 1
%83 = OpCompositeExtract %36 %82 0
%84 = OpFMul %36 %83 %71
%85 = OpFAdd %36 %84 %75
%86 = OpCompositeExtract %36 %82 1
%87 = OpFMul %36 %86 %71
%88 = OpFAdd %36 %87 %77
%89 = OpCompositeExtract %36 %82 2
%90 = OpFMul %36 %89 %71
%91 = OpFAdd %36 %90 %79
%92 = OpCompositeExtract %36 %82 3
%93 = OpFMul %36 %92 %71
%94 = OpFAdd %36 %93 %81
%95 = OpCompositeExtract %37 %69 0 2
%96 = OpCompositeExtract %36 %95 0
%97 = OpFMul %36 %96 %72
%98 = OpFAdd %36 %97 %85
%99 = OpCompositeExtract %36 %95 1
%100 = OpFMul %36 %99 %72
%101 = OpFAdd %36 %100 %88
%102 = OpCompositeExtract %36 %95 2
%103 = OpFMul %36 %102 %72
%104 = OpFAdd %36 %103 %91
%105 = OpCompositeExtract %36 %95 3
%106 = OpFMul %36 %105 %72
%107 = OpFAdd %36 %106 %94
%108 = OpCompositeExtract %37 %69 0 3
%109 = OpCompositeExtract %36 %108 0
%111 = OpFAdd %36 %109 %98
%112 = OpCompositeExtract %36 %108 1
%114 = OpFAdd %36 %112 %101
%115 = OpCompositeExtract %36 %108 2
%117 = OpFAdd %36 %115 %104
%118 = OpCompositeExtract %36 %108 3
%120 = OpFAdd %36 %118 %107
%121 = OpCompositeConstruct %37 %111 %114 %117 %120
OpStore %4 %121
OpReturn
OpFunctionEnd
End SPIR-V
Converted MSL:
#include <metal_stdlib>
#include <simd/simd.h>
using namespace metal;
struct _23
{
float4 _m0;
float4 _m1;
};
struct _24
{
_23 _m0;
uint _m1;
uint _m2;
char _m0_final_padding[8];
};
struct _25
{
float4 _m0;
float4 _m1;
float4 _m2;
float4 _m3;
};
struct _26
{
_25 _m0;
};
struct _28
{
_26 _m0;
float3 _m1;
uint2 _m2;
uint2 _m3;
};
struct _34
{
_28 _m0;
};
struct _35
{
_24 _m0[1];
};
struct spvDescriptorSetBuffer1
{
device _35* m_30 [[id(0)]];
};
struct depth_pre_pass_instanced_out
{
float4 gl_Position [[position]];
};
struct depth_pre_pass_instanced_in
{
float3 m_2 [[attribute(0)]];
};
vertex depth_pre_pass_instanced_out depth_pre_pass_instanced(depth_pre_pass_instanced_in in [[stage_in]], constant spvDescriptorSetBuffer1& spvDescriptorSet1 [[buffer(1)]], constant _34& _29 [[buffer(3)]], uint gl_InstanceIndex [[instance_id]])
{
depth_pre_pass_instanced_out out = {};
float _224 = ((*spvDescriptorSet1.m_30)._m0[gl_InstanceIndex]._m0._m1.w * (*spvDescriptorSet1.m_30)._m0[gl_InstanceIndex]._m0._m1.w) - ((((*spvDescriptorSet1.m_30)._m0[gl_InstanceIndex]._m0._m1.x * (*spvDescriptorSet1.m_30)._m0[gl_InstanceIndex]._m0._m1.x) + ((*spvDescriptorSet1.m_30)._m0[gl_InstanceIndex]._m0._m1.y * (*spvDescriptorSet1.m_30)._m0[gl_InstanceIndex]._m0._m1.y)) + ((*spvDescriptorSet1.m_30)._m0[gl_InstanceIndex]._m0._m1.z * (*spvDescriptorSet1.m_30)._m0[gl_InstanceIndex]._m0._m1.z));
float _239 = (((in.m_2.x * (*spvDescriptorSet1.m_30)._m0[gl_InstanceIndex]._m0._m1.x) + (in.m_2.y * (*spvDescriptorSet1.m_30)._m0[gl_InstanceIndex]._m0._m1.y)) + (in.m_2.z * (*spvDescriptorSet1.m_30)._m0[gl_InstanceIndex]._m0._m1.z)) * 2.0;
float _261 = (*spvDescriptorSet1.m_30)._m0[gl_InstanceIndex]._m0._m1.w * 2.0;
float3 _272 = float3((*spvDescriptorSet1.m_30)._m0[gl_InstanceIndex]._m0._m0.xyz) + float3((*spvDescriptorSet1.m_30)._m0[gl_InstanceIndex]._m0._m0.w * (((in.m_2.x * _224) + ((*spvDescriptorSet1.m_30)._m0[gl_InstanceIndex]._m0._m1.x * _239)) + ((((*spvDescriptorSet1.m_30)._m0[gl_InstanceIndex]._m0._m1.y * in.m_2.z) - (in.m_2.y * (*spvDescriptorSet1.m_30)._m0[gl_InstanceIndex]._m0._m1.z)) * _261)), (*spvDescriptorSet1.m_30)._m0[gl_InstanceIndex]._m0._m0.w * (((in.m_2.y * _224) + ((*spvDescriptorSet1.m_30)._m0[gl_InstanceIndex]._m0._m1.y * _239)) + ((((*spvDescriptorSet1.m_30)._m0[gl_InstanceIndex]._m0._m1.z * in.m_2.x) - (in.m_2.z * (*spvDescriptorSet1.m_30)._m0[gl_InstanceIndex]._m0._m1.x)) * _261)), (*spvDescriptorSet1.m_30)._m0[gl_InstanceIndex]._m0._m0.w * (((in.m_2.z * _224) + ((*spvDescriptorSet1.m_30)._m0[gl_InstanceIndex]._m0._m1.z * _239)) + ((((*spvDescriptorSet1.m_30)._m0[gl_InstanceIndex]._m0._m1.x * in.m_2.y) - (in.m_2.x * (*spvDescriptorSet1.m_30)._m0[gl_InstanceIndex]._m0._m1.y)) * _261)));
float _70 = _272.x;
float _71 = _272.y;
float _72 = _272.z;
out.gl_Position = float4(_29._m0._m0._m0._m3.x + ((_29._m0._m0._m0._m2.x * _72) + ((_29._m0._m0._m0._m1.x * _71) + (_29._m0._m0._m0._m0.x * _70))), _29._m0._m0._m0._m3.y + ((_29._m0._m0._m0._m2.y * _72) + ((_29._m0._m0._m0._m1.y * _71) + (_29._m0._m0._m0._m0.y * _70))), _29._m0._m0._m0._m3.z + ((_29._m0._m0._m0._m2.z * _72) + ((_29._m0._m0._m0._m1.z * _71) + (_29._m0._m0._m0._m0.z * _70))), _29._m0._m0._m0._m3.w + ((_29._m0._m0._m0._m2.w * _72) + ((_29._m0._m0._m0._m1.w * _71) + (_29._m0._m0._m0._m0.w * _70))));
out.gl_Position.y = -(out.gl_Position.y); // Invert Y-axis for Metal
return out;
}
End MSL
Estimated original GLSL:
#version 450
#extension GL_EXT_nonuniform_qualifier : require
out gl_PerVertex
{
vec4 gl_Position;
};
struct _23
{
vec4 _m0;
vec4 _m1;
};
struct _24
{
_23 _m0;
uint _m1;
uint _m2;
};
struct _25
{
vec4 _m0;
vec4 _m1;
vec4 _m2;
vec4 _m3;
};
struct _26
{
_25 _m0;
};
struct _28
{
_26 _m0;
vec3 _m1;
uvec2 _m2;
uvec2 _m3;
};
layout(set = 1, binding = 0, std430) buffer _35_30
{
_24 _m0[];
} _30;
layout(push_constant, std430) uniform _34_29
{
_28 _m0;
} _29;
layout(location = 0) in vec3 _2;
void main()
{
float _224 = (_30._m0[uint(gl_InstanceIndex)]._m0._m1.w * _30._m0[uint(gl_InstanceIndex)]._m0._m1.w) - (((_30._m0[uint(gl_InstanceIndex)]._m0._m1.x * _30._m0[uint(gl_InstanceIndex)]._m0._m1.x) + (_30._m0[uint(gl_InstanceIndex)]._m0._m1.y * _30._m0[uint(gl_InstanceIndex)]._m0._m1.y)) + (_30._m0[uint(gl_InstanceIndex)]._m0._m1.z * _30._m0[uint(gl_InstanceIndex)]._m0._m1.z));
float _239 = (((_2.x * _30._m0[uint(gl_InstanceIndex)]._m0._m1.x) + (_2.y * _30._m0[uint(gl_InstanceIndex)]._m0._m1.y)) + (_2.z * _30._m0[uint(gl_InstanceIndex)]._m0._m1.z)) * 2.0;
float _261 = _30._m0[uint(gl_InstanceIndex)]._m0._m1.w * 2.0;
vec3 _272 = vec3(_30._m0[uint(gl_InstanceIndex)]._m0._m0.xyz) + vec3(_30._m0[uint(gl_InstanceIndex)]._m0._m0.w * (((_2.x * _224) + (_30._m0[uint(gl_InstanceIndex)]._m0._m1.x * _239)) + (((_30._m0[uint(gl_InstanceIndex)]._m0._m1.y * _2.z) - (_2.y * _30._m0[uint(gl_InstanceIndex)]._m0._m1.z)) * _261)), _30._m0[uint(gl_InstanceIndex)]._m0._m0.w * (((_2.y * _224) + (_30._m0[uint(gl_InstanceIndex)]._m0._m1.y * _239)) + (((_30._m0[uint(gl_InstanceIndex)]._m0._m1.z * _2.x) - (_2.z * _30._m0[uint(gl_InstanceIndex)]._m0._m1.x)) * _261)), _30._m0[uint(gl_InstanceIndex)]._m0._m0.w * (((_2.z * _224) + (_30._m0[uint(gl_InstanceIndex)]._m0._m1.z * _239)) + (((_30._m0[uint(gl_InstanceIndex)]._m0._m1.x * _2.y) - (_2.x * _30._m0[uint(gl_InstanceIndex)]._m0._m1.y)) * _261)));
float _70 = _272.x;
float _71 = _272.y;
float _72 = _272.z;
gl_Position = vec4(_29._m0._m0._m0._m3.x + ((_29._m0._m0._m0._m2.x * _72) + ((_29._m0._m0._m0._m1.x * _71) + (_29._m0._m0._m0._m0.x * _70))), _29._m0._m0._m0._m3.y + ((_29._m0._m0._m0._m2.y * _72) + ((_29._m0._m0._m0._m1.y * _71) + (_29._m0._m0._m0._m0.y * _70))), _29._m0._m0._m0._m3.z + ((_29._m0._m0._m0._m2.z * _72) + ((_29._m0._m0._m0._m1.z * _71) + (_29._m0._m0._m0._m0.z * _70))), _29._m0._m0._m0._m3.w + ((_29._m0._m0._m0._m2.w * _72) + ((_29._m0._m0._m0._m1.w * _71) + (_29._m0._m0._m0._m0.w * _70))));
}
End GLSL
[mvk-info] Converting SPIR-V:
; SPIR-V
; Version: 1.3
; Generator: Embark Studios Rust GPU Compiler Backend; 0
; Bound: 285
; Schema: 0
OpCapability RuntimeDescriptorArray
OpCapability Shader
OpExtension "SPV_EXT_descriptor_indexing"
OpMemoryModel Logical Simple
OpEntryPoint Vertex %1 "depth_pre_pass_vertex_alpha_clip" %2 %3 %4 %5 %6 %7
OpMemberDecorate %26 0 Offset 0
OpMemberDecorate %26 1 Offset 16
OpMemberDecorate %27 0 Offset 0
OpMemberDecorate %27 1 Offset 32
OpMemberDecorate %27 2 Offset 36
OpDecorate %36 ArrayStride 48
OpMemberDecorate %28 0 Offset 0
OpMemberDecorate %28 1 Offset 16
OpMemberDecorate %28 2 Offset 32
OpMemberDecorate %28 3 Offset 48
OpMemberDecorate %29 0 Offset 0
OpMemberDecorate %31 0 Offset 0
OpMemberDecorate %31 1 Offset 64
OpMemberDecorate %31 2 Offset 80
OpMemberDecorate %31 3 Offset 88
OpDecorate %2 Location 0
OpDecorate %37 Block
OpMemberDecorate %37 0 Offset 0
OpDecorate %3 Location 1
OpDecorate %38 Block
OpMemberDecorate %38 0 Offset 0
OpDecorate %33 DescriptorSet 1
OpDecorate %33 Binding 0
OpDecorate %4 BuiltIn InstanceIndex
OpDecorate %5 BuiltIn Position
OpDecorate %6 Location 0
OpDecorate %7 Location 1
%39 = OpTypeFloat 32
%40 = OpTypeVector %39 4
%41 = OpTypeVector %39 2
%42 = OpTypePointer Input %41
%43 = OpTypePointer Output %41
%44 = OpTypePointer Output %40
%45 = OpTypeInt 32 0
%46 = OpTypePointer Input %45
%47 = OpTypePointer Output %45
%48 = OpTypePointer StorageBuffer %45
%49 = OpConstant %45 0
%50 = OpTypeVector %39 3
%51 = OpTypePointer Input %50
%52 = OpConstant %45 2
%26 = OpTypeStruct %40 %40
%27 = OpTypeStruct %26 %45 %45
%36 = OpTypeRuntimeArray %27
%56 = OpTypeVoid
%57 = OpTypeVector %45 2
%28 = OpTypeStruct %40 %40 %40 %40
%29 = OpTypeStruct %28
%31 = OpTypeStruct %29 %50 %57 %57
%59 = OpTypeFunction %56
%2 = OpVariable %51 Input
%37 = OpTypeStruct %31
%60 = OpTypePointer PushConstant %37
%32 = OpVariable %60 PushConstant
%3 = OpVariable %42 Input
%38 = OpTypeStruct %36
%61 = OpTypePointer StorageBuffer %38
%33 = OpVariable %61 StorageBuffer
%4 = OpVariable %46 Input
%5 = OpVariable %44 Output
%6 = OpVariable %43 Output
%7 = OpVariable %47 Output
%62 = OpConstant %39 2
%63 = OpTypePointer PushConstant %29
%65 = OpTypePointer StorageBuffer %26
%1 = OpFunction %56 None %59
%67 = OpLabel
%68 = OpLoad %50 %2
%69 = OpLoad %41 %3
%71 = OpLoad %45 %4
%74 = OpAccessChain %65 %33 %49 %71 %49
%75 = OpLoad %26 %74
%212 = OpCompositeExtract %40 %75 0
%213 = OpCompositeExtract %39 %212 0
%214 = OpCompositeExtract %39 %212 1
%215 = OpCompositeExtract %39 %212 2
%216 = OpCompositeConstruct %50 %213 %214 %215
%217 = OpCompositeExtract %39 %75 0 3
%218 = OpCompositeExtract %40 %75 1
%226 = OpCompositeExtract %39 %218 3
%227 = OpCompositeExtract %39 %218 0
%228 = OpCompositeExtract %39 %218 1
%229 = OpCompositeExtract %39 %218 2
%230 = OpFMul %39 %227 %227
%231 = OpFMul %39 %228 %228
%232 = OpFAdd %39 %230 %231
%233 = OpFMul %39 %229 %229
%234 = OpFAdd %39 %232 %233
%235 = OpFMul %39 %226 %226
%236 = OpFSub %39 %235 %234
%237 = OpCompositeExtract %39 %68 0
%238 = OpFMul %39 %237 %236
%239 = OpCompositeExtract %39 %68 1
%240 = OpFMul %39 %239 %236
%241 = OpCompositeExtract %39 %68 2
%242 = OpFMul %39 %241 %236
%244 = OpFMul %39 %237 %227
%246 = OpFMul %39 %239 %228
%247 = OpFAdd %39 %244 %246
%249 = OpFMul %39 %241 %229
%250 = OpFAdd %39 %247 %249
%251 = OpFMul %39 %250 %62
%252 = OpFMul %39 %227 %251
%253 = OpFMul %39 %228 %251
%254 = OpFMul %39 %229 %251
%255 = OpFAdd %39 %238 %252
%256 = OpFAdd %39 %240 %253
%257 = OpFAdd %39 %242 %254
%259 = OpFMul %39 %228 %241
%261 = OpFMul %39 %239 %229
%262 = OpFSub %39 %259 %261
%264 = OpFMul %39 %229 %237
%266 = OpFMul %39 %241 %227
%267 = OpFSub %39 %264 %266
%269 = OpFMul %39 %227 %239
%271 = OpFMul %39 %237 %228
%272 = OpFSub %39 %269 %271
%273 = OpFMul %39 %226 %62
%274 = OpFMul %39 %262 %273
%275 = OpFMul %39 %267 %273
%276 = OpFMul %39 %272 %273
%277 = OpFAdd %39 %255 %274
%278 = OpFAdd %39 %256 %275
%279 = OpFAdd %39 %257 %276
%280 = OpFMul %39 %217 %277
%281 = OpFMul %39 %217 %278
%282 = OpFMul %39 %217 %279
%283 = OpCompositeConstruct %50 %280 %281 %282
%284 = OpFAdd %50 %216 %283
OpStore %6 %69
%78 = OpAccessChain %48 %33 %49 %71 %52
%79 = OpLoad %45 %78
OpStore %7 %79
%80 = OpAccessChain %63 %32 %49 %49
%81 = OpLoad %29 %80
%82 = OpCompositeExtract %39 %284 0
%83 = OpCompositeExtract %39 %284 1
%84 = OpCompositeExtract %39 %284 2
%85 = OpCompositeExtract %40 %81 0 0
%86 = OpCompositeExtract %39 %85 0
%87 = OpFMul %39 %86 %82
%88 = OpCompositeExtract %39 %85 1
%89 = OpFMul %39 %88 %82
%90 = OpCompositeExtract %39 %85 2
%91 = OpFMul %39 %90 %82
%92 = OpCompositeExtract %39 %85 3
%93 = OpFMul %39 %92 %82
%94 = OpCompositeExtract %40 %81 0 1
%95 = OpCompositeExtract %39 %94 0
%96 = OpFMul %39 %95 %83
%97 = OpFAdd %39 %96 %87
%98 = OpCompositeExtract %39 %94 1
%99 = OpFMul %39 %98 %83
%100 = OpFAdd %39 %99 %89
%101 = OpCompositeExtract %39 %94 2
%102 = OpFMul %39 %101 %83
%103 = OpFAdd %39 %102 %91
%104 = OpCompositeExtract %39 %94 3
%105 = OpFMul %39 %104 %83
%106 = OpFAdd %39 %105 %93
%107 = OpCompositeExtract %40 %81 0 2
%108 = OpCompositeExtract %39 %107 0
%109 = OpFMul %39 %108 %84
%110 = OpFAdd %39 %109 %97
%111 = OpCompositeExtract %39 %107 1
%112 = OpFMul %39 %111 %84
%113 = OpFAdd %39 %112 %100
%114 = OpCompositeExtract %39 %107 2
%115 = OpFMul %39 %114 %84
%116 = OpFAdd %39 %115 %103
%117 = OpCompositeExtract %39 %107 3
%118 = OpFMul %39 %117 %84
%119 = OpFAdd %39 %118 %106
%120 = OpCompositeExtract %40 %81 0 3
%121 = OpCompositeExtract %39 %120 0
%123 = OpFAdd %39 %121 %110
%124 = OpCompositeExtract %39 %120 1
%126 = OpFAdd %39 %124 %113
%127 = OpCompositeExtract %39 %120 2
%129 = OpFAdd %39 %127 %116
%130 = OpCompositeExtract %39 %120 3
%132 = OpFAdd %39 %130 %119
%133 = OpCompositeConstruct %40 %123 %126 %129 %132
OpStore %5 %133
OpReturn
OpFunctionEnd
End SPIR-V
Converted MSL:
#include <metal_stdlib>
#include <simd/simd.h>
using namespace metal;
struct _26
{
float4 _m0;
float4 _m1;
};
struct _27
{
_26 _m0;
uint _m1;
uint _m2;
char _m0_final_padding[8];
};
struct _28
{
float4 _m0;
float4 _m1;
float4 _m2;
float4 _m3;
};
struct _29
{
_28 _m0;
};
struct _31
{
_29 _m0;
float3 _m1;
uint2 _m2;
uint2 _m3;
};
struct _37
{
_31 _m0;
};
struct _38
{
_27 _m0[1];
};
struct spvDescriptorSetBuffer1
{
device _38* m_33 [[id(0)]];
};
struct depth_pre_pass_vertex_alpha_clip_out
{
float2 m_6 [[user(locn0)]];
uint m_7 [[user(locn1)]];
float4 gl_Position [[position]];
};
struct depth_pre_pass_vertex_alpha_clip_in
{
float3 m_2 [[attribute(0)]];
float2 m_3 [[attribute(1)]];
};
vertex depth_pre_pass_vertex_alpha_clip_out depth_pre_pass_vertex_alpha_clip(depth_pre_pass_vertex_alpha_clip_in in [[stage_in]], constant spvDescriptorSetBuffer1& spvDescriptorSet1 [[buffer(1)]], constant _37& _32 [[buffer(3)]], uint gl_InstanceIndex [[instance_id]])
{
depth_pre_pass_vertex_alpha_clip_out out = {};
float _236 = ((*spvDescriptorSet1.m_33)._m0[gl_InstanceIndex]._m0._m1.w * (*spvDescriptorSet1.m_33)._m0[gl_InstanceIndex]._m0._m1.w) - ((((*spvDescriptorSet1.m_33)._m0[gl_InstanceIndex]._m0._m1.x * (*spvDescriptorSet1.m_33)._m0[gl_InstanceIndex]._m0._m1.x) + ((*spvDescriptorSet1.m_33)._m0[gl_InstanceIndex]._m0._m1.y * (*spvDescriptorSet1.m_33)._m0[gl_InstanceIndex]._m0._m1.y)) + ((*spvDescriptorSet1.m_33)._m0[gl_InstanceIndex]._m0._m1.z * (*spvDescriptorSet1.m_33)._m0[gl_InstanceIndex]._m0._m1.z));
float _251 = (((in.m_2.x * (*spvDescriptorSet1.m_33)._m0[gl_InstanceIndex]._m0._m1.x) + (in.m_2.y * (*spvDescriptorSet1.m_33)._m0[gl_InstanceIndex]._m0._m1.y)) + (in.m_2.z * (*spvDescriptorSet1.m_33)._m0[gl_InstanceIndex]._m0._m1.z)) * 2.0;
float _273 = (*spvDescriptorSet1.m_33)._m0[gl_InstanceIndex]._m0._m1.w * 2.0;
float3 _284 = float3((*spvDescriptorSet1.m_33)._m0[gl_InstanceIndex]._m0._m0.xyz) + float3((*spvDescriptorSet1.m_33)._m0[gl_InstanceIndex]._m0._m0.w * (((in.m_2.x * _236) + ((*spvDescriptorSet1.m_33)._m0[gl_InstanceIndex]._m0._m1.x * _251)) + ((((*spvDescriptorSet1.m_33)._m0[gl_InstanceIndex]._m0._m1.y * in.m_2.z) - (in.m_2.y * (*spvDescriptorSet1.m_33)._m0[gl_InstanceIndex]._m0._m1.z)) * _273)), (*spvDescriptorSet1.m_33)._m0[gl_InstanceIndex]._m0._m0.w * (((in.m_2.y * _236) + ((*spvDescriptorSet1.m_33)._m0[gl_InstanceIndex]._m0._m1.y * _251)) + ((((*spvDescriptorSet1.m_33)._m0[gl_InstanceIndex]._m0._m1.z * in.m_2.x) - (in.m_2.z * (*spvDescriptorSet1.m_33)._m0[gl_InstanceIndex]._m0._m1.x)) * _273)), (*spvDescriptorSet1.m_33)._m0[gl_InstanceIndex]._m0._m0.w * (((in.m_2.z * _236) + ((*spvDescriptorSet1.m_33)._m0[gl_InstanceIndex]._m0._m1.z * _251)) + ((((*spvDescriptorSet1.m_33)._m0[gl_InstanceIndex]._m0._m1.x * in.m_2.y) - (in.m_2.x * (*spvDescriptorSet1.m_33)._m0[gl_InstanceIndex]._m0._m1.y)) * _273)));
out.m_6 = in.m_3;
out.m_7 = (*spvDescriptorSet1.m_33)._m0[gl_InstanceIndex]._m2;
float _82 = _284.x;
float _83 = _284.y;
float _84 = _284.z;
out.gl_Position = float4(_32._m0._m0._m0._m3.x + ((_32._m0._m0._m0._m2.x * _84) + ((_32._m0._m0._m0._m1.x * _83) + (_32._m0._m0._m0._m0.x * _82))), _32._m0._m0._m0._m3.y + ((_32._m0._m0._m0._m2.y * _84) + ((_32._m0._m0._m0._m1.y * _83) + (_32._m0._m0._m0._m0.y * _82))), _32._m0._m0._m0._m3.z + ((_32._m0._m0._m0._m2.z * _84) + ((_32._m0._m0._m0._m1.z * _83) + (_32._m0._m0._m0._m0.z * _82))), _32._m0._m0._m0._m3.w + ((_32._m0._m0._m0._m2.w * _84) + ((_32._m0._m0._m0._m1.w * _83) + (_32._m0._m0._m0._m0.w * _82))));
out.gl_Position.y = -(out.gl_Position.y); // Invert Y-axis for Metal
return out;
}
End MSL
Estimated original GLSL:
#version 450
#extension GL_EXT_nonuniform_qualifier : require
out gl_PerVertex
{
vec4 gl_Position;
};
struct _26
{
vec4 _m0;
vec4 _m1;
};
struct _27
{
_26 _m0;
uint _m1;
uint _m2;
};
struct _28
{
vec4 _m0;
vec4 _m1;
vec4 _m2;
vec4 _m3;
};
struct _29
{
_28 _m0;
};
struct _31
{
_29 _m0;
vec3 _m1;
uvec2 _m2;
uvec2 _m3;
};
layout(set = 1, binding = 0, std430) buffer _38_33
{
_27 _m0[];
} _33;
layout(push_constant, std430) uniform _37_32
{
_31 _m0;
} _32;
layout(location = 0) in vec3 _2;
layout(location = 1) in vec2 _3;
layout(location = 0) out vec2 _6;
layout(location = 1) out uint _7;
void main()
{
float _236 = (_33._m0[uint(gl_InstanceIndex)]._m0._m1.w * _33._m0[uint(gl_InstanceIndex)]._m0._m1.w) - (((_33._m0[uint(gl_InstanceIndex)]._m0._m1.x * _33._m0[uint(gl_InstanceIndex)]._m0._m1.x) + (_33._m0[uint(gl_InstanceIndex)]._m0._m1.y * _33._m0[uint(gl_InstanceIndex)]._m0._m1.y)) + (_33._m0[uint(gl_InstanceIndex)]._m0._m1.z * _33._m0[uint(gl_InstanceIndex)]._m0._m1.z));
float _251 = (((_2.x * _33._m0[uint(gl_InstanceIndex)]._m0._m1.x) + (_2.y * _33._m0[uint(gl_InstanceIndex)]._m0._m1.y)) + (_2.z * _33._m0[uint(gl_InstanceIndex)]._m0._m1.z)) * 2.0;
float _273 = _33._m0[uint(gl_InstanceIndex)]._m0._m1.w * 2.0;
vec3 _284 = vec3(_33._m0[uint(gl_InstanceIndex)]._m0._m0.xyz) + vec3(_33._m0[uint(gl_InstanceIndex)]._m0._m0.w * (((_2.x * _236) + (_33._m0[uint(gl_InstanceIndex)]._m0._m1.x * _251)) + (((_33._m0[uint(gl_InstanceIndex)]._m0._m1.y * _2.z) - (_2.y * _33._m0[uint(gl_InstanceIndex)]._m0._m1.z)) * _273)), _33._m0[uint(gl_InstanceIndex)]._m0._m0.w * (((_2.y * _236) + (_33._m0[uint(gl_InstanceIndex)]._m0._m1.y * _251)) + (((_33._m0[uint(gl_InstanceIndex)]._m0._m1.z * _2.x) - (_2.z * _33._m0[uint(gl_InstanceIndex)]._m0._m1.x)) * _273)), _33._m0[uint(gl_InstanceIndex)]._m0._m0.w * (((_2.z * _236) + (_33._m0[uint(gl_InstanceIndex)]._m0._m1.z * _251)) + (((_33._m0[uint(gl_InstanceIndex)]._m0._m1.x * _2.y) - (_2.x * _33._m0[uint(gl_InstanceIndex)]._m0._m1.y)) * _273)));
_6 = _3;
_7 = _33._m0[uint(gl_InstanceIndex)]._m2;
float _82 = _284.x;
float _83 = _284.y;
float _84 = _284.z;
gl_Position = vec4(_32._m0._m0._m0._m3.x + ((_32._m0._m0._m0._m2.x * _84) + ((_32._m0._m0._m0._m1.x * _83) + (_32._m0._m0._m0._m0.x * _82))), _32._m0._m0._m0._m3.y + ((_32._m0._m0._m0._m2.y * _84) + ((_32._m0._m0._m0._m1.y * _83) + (_32._m0._m0._m0._m0.y * _82))), _32._m0._m0._m0._m3.z + ((_32._m0._m0._m0._m2.z * _84) + ((_32._m0._m0._m0._m1.z * _83) + (_32._m0._m0._m0._m0.z * _82))), _32._m0._m0._m0._m3.w + ((_32._m0._m0._m0._m2.w * _84) + ((_32._m0._m0._m0._m1.w * _83) + (_32._m0._m0._m0._m0.w * _82))));
}
End GLSL
[mvk-info] Converting SPIR-V:
; SPIR-V
; Version: 1.3
; Generator: Embark Studios Rust GPU Compiler Backend; 0
; Bound: 104
; Schema: 0
OpCapability RuntimeDescriptorArray
OpCapability Shader
OpExtension "SPV_EXT_descriptor_indexing"
OpMemoryModel Logical Simple
OpEntryPoint Fragment %1 "depth_pre_pass_alpha_clip" %2 %3
OpExecutionMode %1 OriginUpperLeft
OpMemberDecorate %15 0 Offset 0
OpMemberDecorate %15 1 Offset 4
OpMemberDecorate %15 2 Offset 8
OpMemberDecorate %15 3 Offset 12
OpMemberDecorate %15 4 Offset 16
OpMemberDecorate %15 5 Offset 20
OpMemberDecorate %15 6 Offset 24
OpMemberDecorate %15 7 Offset 28
OpMemberDecorate %15 8 Offset 32
OpMemberDecorate %16 0 Offset 0
OpMemberDecorate %16 1 Offset 36
OpMemberDecorate %16 2 Offset 40
OpMemberDecorate %16 3 Offset 44
OpMemberDecorate %16 4 Offset 48
OpMemberDecorate %16 5 Offset 64
OpMemberDecorate %16 6 Offset 80
OpMemberDecorate %16 7 Offset 84
OpMemberDecorate %16 8 Offset 88
OpMemberDecorate %16 9 Offset 92
OpMemberDecorate %16 10 Offset 96
OpMemberDecorate %16 11 Offset 100
OpMemberDecorate %16 12 Offset 112
OpMemberDecorate %16 13 Offset 128
OpMemberDecorate %16 14 Offset 144
OpDecorate %21 ArrayStride 160
OpDecorate %22 ArrayStride 4
OpDecorate %17 DescriptorSet 0
OpDecorate %17 Binding 0
OpDecorate %18 DescriptorSet 0
OpDecorate %18 Binding 1
OpDecorate %23 Block
OpMemberDecorate %23 0 Offset 0
OpDecorate %19 DescriptorSet 0
OpDecorate %19 Binding 2
OpDecorate %2 Location 0
OpDecorate %3 Flat
OpDecorate %3 Location 1
%24 = OpTypeFloat 32
%25 = OpTypeVector %24 4
%26 = OpTypeImage %24 2D 2 0 0 1 Unknown
%27 = OpTypePointer UniformConstant %26
%28 = OpTypeSampler
%29 = OpTypeVector %24 2
%31 = OpTypePointer UniformConstant %28
%32 = OpTypePointer Input %29
%33 = OpTypePointer StorageBuffer %24
%34 = OpTypePointer StorageBuffer %25
%35 = OpTypeSampledImage %26
%36 = OpTypeInt 32 0
%37 = OpTypePointer Input %36
%38 = OpConstant %36 4
%39 = OpConstant %36 0
%40 = OpTypeVector %24 3
%41 = OpConstant %36 3
%42 = OpTypeInt 32 1
%15 = OpTypeStruct %42 %42 %42 %42 %42 %42 %42 %42 %42
%16 = OpTypeStruct %15 %24 %24 %24 %25 %40 %24 %24 %24 %24 %24 %24 %40 %24 %40
%21 = OpTypeRuntimeArray %16
%22 = OpTypeRuntimeArray %26
%45 = OpTypePointer UniformConstant %22
%46 = OpTypeVoid
%47 = OpTypeBool
%49 = OpTypePointer StorageBuffer %42
%50 = OpConstant %42 -1
%51 = OpTypeFunction %46
%17 = OpVariable %45 UniformConstant
%18 = OpVariable %31 UniformConstant
%23 = OpTypeStruct %21
%52 = OpTypePointer StorageBuffer %23
%19 = OpVariable %52 StorageBuffer
%2 = OpVariable %32 Input
%3 = OpVariable %37 Input
%1 = OpFunction %46 None %51
%60 = OpLabel
OpSelectionMerge %89 None
OpSwitch %39 %93
%93 = OpLabel
%61 = OpLoad %29 %2
%62 = OpLoad %36 %3
%65 = OpLoad %28 %18
%66 = OpAccessChain %34 %19 %39 %62 %38
%67 = OpLoad %25 %66
%69 = OpAccessChain %49 %19 %39 %62 %39 %39
%70 = OpLoad %42 %69
%71 = OpIEqual %47 %70 %50
OpSelectionMerge %72 None
OpBranchConditional %71 %73 %74
%74 = OpLabel
%77 = OpLoad %42 %69
%78 = OpBitcast %36 %77
%79 = OpAccessChain %27 %17 %78
%101 = OpLoad %26 %79
%102 = OpSampledImage %35 %101 %65
%103 = OpImageSampleImplicitLod %25 %102 %61
%81 = OpFMul %25 %67 %103
OpBranch %72
%73 = OpLabel
OpBranch %72
%72 = OpLabel
%82 = OpPhi %25 %67 %73 %81 %74
%83 = OpCompositeExtract %24 %82 3
%84 = OpAccessChain %33 %19 %39 %62 %41
%85 = OpLoad %24 %84
%86 = OpFOrdLessThan %47 %83 %85
OpSelectionMerge %87 None
OpBranchConditional %86 %88 %89
%89 = OpLabel
OpReturn
%88 = OpLabel
OpKill
%87 = OpLabel
OpUnreachable
OpFunctionEnd
End SPIR-V
Converted MSL:
#include <metal_stdlib>
#include <simd/simd.h>
using namespace metal;
struct _15
{
int _m0;
int _m1;
int _m2;
int _m3;
int _m4;
int _m5;
int _m6;
int _m7;
int _m8;
};
struct _16
{
_15 _m0;
float _m1;
float _m2;
float _m3;
float4 _m4;
float3 _m5;
float _m6;
float _m7;
float _m8;
float _m9;
float _m10;
float _m11;
float3 _m12;
float _m13;
float3 _m14;
};
struct _23
{
_16 _m0[1];
};
struct spvDescriptorSetBuffer0
{
array<texture2d<float>, 127> m_17 [[id(0)]];
sampler m_18 [[id(127)]];
device _23* m_19 [[id(128)]];
};
struct depth_pre_pass_alpha_clip_in
{
float2 m_2 [[user(locn0)]];
uint m_3 [[user(locn1)]];
};
fragment void depth_pre_pass_alpha_clip(depth_pre_pass_alpha_clip_in in [[stage_in]], constant spvDescriptorSetBuffer0& spvDescriptorSet0 [[buffer(0)]])
{
do
{
float4 _82;
if ((*spvDescriptorSet0.m_19)._m0[in.m_3]._m0._m0 == (-1))
{
_82 = (*spvDescriptorSet0.m_19)._m0[in.m_3]._m4;
}
else
{
uint _78 = uint((*spvDescriptorSet0.m_19)._m0[in.m_3]._m0._m0);
_82 = (*spvDescriptorSet0.m_19)._m0[in.m_3]._m4 * spvDescriptorSet0.m_17[_78].sample(spvDescriptorSet0.m_18, in.m_2);
}
if (_82.w < (*spvDescriptorSet0.m_19)._m0[in.m_3]._m3)
{
discard_fragment();
}
else
{
break;
}
} while(false);
}
End MSL
Original GLSL extraction error: Buffer block cannot be expressed as any of std430, std140, scalar, even with enhanced layouts. You can try flattening this block to support a more flexible layout.
Partially converted GLSL:
#version 450
#extension GL_EXT_nonuniform_qualifier : require
struct _15
{
int _m0;
int _m1;
int _m2;
int _m3;
int _m4;
int _m5;
int _m6;
int _m7;
int _m8;
};
struct _16
{
_15 _m0;
float _m1;
float _m2;
float _m3;
vec4 _m4;
vec3 _m5;
float _m6;
float _m7;
float _m8;
float _m9;
float _m10;
float _m11;
vec3 _m12;
float _m13;
vec3 _m14;
};
End GLSL
[mvk-info] Converting SPIR-V:
; SPIR-V
; Version: 1.3
; Generator: Embark Studios Rust GPU Compiler Backend; 0
; Bound: 351
; Schema: 0
OpCapability RuntimeDescriptorArray
OpCapability Shader
OpExtension "SPV_EXT_descriptor_indexing"
OpMemoryModel Logical Simple
OpEntryPoint Vertex %1 "vertex_instanced_with_scale" %2 %3 %4 %5 %6 %7 %8 %9 %10 %11
OpMemberDecorate %32 0 Offset 0
OpMemberDecorate %32 1 Offset 16
OpMemberDecorate %33 0 Offset 0
OpMemberDecorate %33 1 Offset 32
OpMemberDecorate %33 2 Offset 36
OpDecorate %42 ArrayStride 48
OpMemberDecorate %34 0 Offset 0
OpMemberDecorate %34 1 Offset 16
OpMemberDecorate %34 2 Offset 32
OpMemberDecorate %34 3 Offset 48
OpMemberDecorate %35 0 Offset 0
OpMemberDecorate %37 0 Offset 0
OpMemberDecorate %37 1 Offset 64
OpMemberDecorate %37 2 Offset 80
OpMemberDecorate %37 3 Offset 88
OpDecorate %2 Location 0
OpDecorate %3 Location 1
OpDecorate %4 Location 2
OpDecorate %43 Block
OpMemberDecorate %43 0 Offset 0
OpDecorate %44 Block
OpMemberDecorate %44 0 Offset 0
OpDecorate %39 DescriptorSet 1
OpDecorate %39 Binding 0
OpDecorate %5 BuiltIn InstanceIndex
OpDecorate %11 BuiltIn Position
OpDecorate %6 Location 0
OpDecorate %7 Location 1
OpDecorate %8 Location 2
OpDecorate %9 Location 3
OpDecorate %10 Location 4
%45 = OpTypeFloat 32
%46 = OpTypeVector %45 4
%47 = OpTypeVector %45 2
%48 = OpTypePointer Input %47
%49 = OpTypePointer Output %47
%50 = OpTypePointer Output %45
%51 = OpTypePointer Output %46
%52 = OpTypeInt 32 0
%53 = OpTypePointer Input %52
%54 = OpTypePointer Output %52
%55 = OpTypePointer StorageBuffer %52
%56 = OpConstant %52 0
%57 = OpTypeVector %45 3
%58 = OpTypePointer Input %57
%59 = OpTypePointer Output %57
%60 = OpConstant %52 2
%32 = OpTypeStruct %46 %46
%33 = OpTypeStruct %32 %52 %52
%42 = OpTypeRuntimeArray %33
%64 = OpTypeVoid
%65 = OpTypeVector %52 2
%34 = OpTypeStruct %46 %46 %46 %46
%35 = OpTypeStruct %34
%37 = OpTypeStruct %35 %57 %65 %65
%67 = OpTypeFunction %64
%2 = OpVariable %58 Input
%3 = OpVariable %58 Input
%4 = OpVariable %48 Input
%43 = OpTypeStruct %37
%68 = OpTypePointer PushConstant %43
%38 = OpVariable %68 PushConstant
%44 = OpTypeStruct %42
%69 = OpTypePointer StorageBuffer %44
%39 = OpVariable %69 StorageBuffer
%5 = OpVariable %53 Input
%11 = OpVariable %51 Output
%6 = OpVariable %59 Output
%7 = OpVariable %59 Output
%8 = OpVariable %49 Output
%9 = OpVariable %54 Output
%10 = OpVariable %50 Output
%70 = OpConstant %45 2
%71 = OpTypePointer PushConstant %35
%73 = OpTypePointer StorageBuffer %32
%1 = OpFunction %64 None %67
%75 = OpLabel
%76 = OpLoad %57 %2
%77 = OpLoad %57 %3
%78 = OpLoad %47 %4
%80 = OpLoad %52 %5
%83 = OpAccessChain %73 %39 %56 %80 %56
%84 = OpLoad %32 %83
%278 = OpCompositeExtract %46 %84 0
%279 = OpCompositeExtract %45 %278 0
%280 = OpCompositeExtract %45 %278 1
%281 = OpCompositeExtract %45 %278 2
%282 = OpCompositeConstruct %57 %279 %280 %281
%283 = OpCompositeExtract %45 %84 0 3
%284 = OpCompositeExtract %46 %84 1
%292 = OpCompositeExtract %45 %284 3
%293 = OpCompositeExtract %45 %284 0
%294 = OpCompositeExtract %45 %284 1
%295 = OpCompositeExtract %45 %284 2
%296 = OpFMul %45 %293 %293
%297 = OpFMul %45 %294 %294
%298 = OpFAdd %45 %296 %297
%299 = OpFMul %45 %295 %295
%300 = OpFAdd %45 %298 %299
%301 = OpFMul %45 %292 %292
%302 = OpFSub %45 %301 %300
%303 = OpCompositeExtract %45 %76 0
%304 = OpFMul %45 %303 %302
%305 = OpCompositeExtract %45 %76 1
%306 = OpFMul %45 %305 %302
%307 = OpCompositeExtract %45 %76 2
%308 = OpFMul %45 %307 %302
%310 = OpFMul %45 %303 %293
%312 = OpFMul %45 %305 %294
%313 = OpFAdd %45 %310 %312
%315 = OpFMul %45 %307 %295
%316 = OpFAdd %45 %313 %315
%317 = OpFMul %45 %316 %70
%318 = OpFMul %45 %293 %317
%319 = OpFMul %45 %294 %317
%320 = OpFMul %45 %295 %317
%321 = OpFAdd %45 %304 %318
%322 = OpFAdd %45 %306 %319
%323 = OpFAdd %45 %308 %320
%325 = OpFMul %45 %294 %307
%327 = OpFMul %45 %305 %295
%328 = OpFSub %45 %325 %327
%330 = OpFMul %45 %295 %303
%332 = OpFMul %45 %307 %293
%333 = OpFSub %45 %330 %332
%335 = OpFMul %45 %293 %305
%337 = OpFMul %45 %303 %294
%338 = OpFSub %45 %335 %337
%339 = OpFMul %45 %292 %70
%340 = OpFMul %45 %328 %339
%341 = OpFMul %45 %333 %339
%342 = OpFMul %45 %338 %339
%343 = OpFAdd %45 %321 %340
%344 = OpFAdd %45 %322 %341
%345 = OpFAdd %45 %323 %342
%346 = OpFMul %45 %283 %343
%347 = OpFMul %45 %283 %344
%348 = OpFMul %45 %283 %345
%349 = OpCompositeConstruct %57 %346 %347 %348
%350 = OpFAdd %57 %282 %349
OpStore %6 %350
%99 = OpCompositeExtract %45 %77 0
%100 = OpFMul %45 %99 %302
%101 = OpCompositeExtract %45 %77 1
%102 = OpFMul %45 %101 %302
%103 = OpCompositeExtract %45 %77 2
%104 = OpFMul %45 %103 %302
%106 = OpFMul %45 %99 %293
%108 = OpFMul %45 %101 %294
%109 = OpFAdd %45 %106 %108
%111 = OpFMul %45 %103 %295
%112 = OpFAdd %45 %109 %111
%113 = OpFMul %45 %112 %70
%114 = OpFMul %45 %293 %113
%115 = OpFMul %45 %294 %113
%116 = OpFMul %45 %295 %113
%117 = OpFAdd %45 %100 %114
%118 = OpFAdd %45 %102 %115
%119 = OpFAdd %45 %104 %116
%121 = OpFMul %45 %294 %103
%123 = OpFMul %45 %101 %295
%124 = OpFSub %45 %121 %123
%126 = OpFMul %45 %295 %99
%128 = OpFMul %45 %103 %293
%129 = OpFSub %45 %126 %128
%131 = OpFMul %45 %293 %101
%133 = OpFMul %45 %99 %294
%134 = OpFSub %45 %131 %133
%136 = OpFMul %45 %124 %339
%137 = OpFMul %45 %129 %339
%138 = OpFMul %45 %134 %339
%139 = OpFAdd %45 %117 %136
%140 = OpFAdd %45 %118 %137
%141 = OpFAdd %45 %119 %138
%142 = OpCompositeConstruct %57 %139 %140 %141
OpStore %7 %142
OpStore %8 %78
%143 = OpAccessChain %55 %39 %56 %80 %60
%144 = OpLoad %52 %143
OpStore %9 %144
OpStore %10 %283
%146 = OpAccessChain %71 %38 %56 %56
%147 = OpLoad %35 %146
%148 = OpCompositeExtract %45 %350 0
%149 = OpCompositeExtract %45 %350 1
%150 = OpCompositeExtract %45 %350 2
%151 = OpCompositeExtract %46 %147 0 0
%152 = OpCompositeExtract %45 %151 0
%153 = OpFMul %45 %152 %148
%154 = OpCompositeExtract %45 %151 1
%155 = OpFMul %45 %154 %148
%156 = OpCompositeExtract %45 %151 2
%157 = OpFMul %45 %156 %148
%158 = OpCompositeExtract %45 %151 3
%159 = OpFMul %45 %158 %148
%160 = OpCompositeExtract %46 %147 0 1
%161 = OpCompositeExtract %45 %160 0
%162 = OpFMul %45 %161 %149
%163 = OpFAdd %45 %162 %153
%164 = OpCompositeExtract %45 %160 1
%165 = OpFMul %45 %164 %149
%166 = OpFAdd %45 %165 %155
%167 = OpCompositeExtract %45 %160 2
%168 = OpFMul %45 %167 %149
%169 = OpFAdd %45 %168 %157
%170 = OpCompositeExtract %45 %160 3
%171 = OpFMul %45 %170 %149
%172 = OpFAdd %45 %171 %159
%173 = OpCompositeExtract %46 %147 0 2
%174 = OpCompositeExtract %45 %173 0
%175 = OpFMul %45 %174 %150
%176 = OpFAdd %45 %175 %163
%177 = OpCompositeExtract %45 %173 1
%178 = OpFMul %45 %177 %150
%179 = OpFAdd %45 %178 %166
%180 = OpCompositeExtract %45 %173 2
%181 = OpFMul %45 %180 %150
%182 = OpFAdd %45 %181 %169
%183 = OpCompositeExtract %45 %173 3
%184 = OpFMul %45 %183 %150
%185 = OpFAdd %45 %184 %172
%186 = OpCompositeExtract %46 %147 0 3
%187 = OpCompositeExtract %45 %186 0
%189 = OpFAdd %45 %187 %176
%190 = OpCompositeExtract %45 %186 1
%192 = OpFAdd %45 %190 %179
%193 = OpCompositeExtract %45 %186 2
%195 = OpFAdd %45 %193 %182
%196 = OpCompositeExtract %45 %186 3
%198 = OpFAdd %45 %196 %185
%199 = OpCompositeConstruct %46 %189 %192 %195 %198
OpStore %11 %199
OpReturn
OpFunctionEnd
End SPIR-V
Converted MSL:
#include <metal_stdlib>
#include <simd/simd.h>
using namespace metal;
struct _32
{
float4 _m0;
float4 _m1;
};
struct _33
{
_32 _m0;
uint _m1;
uint _m2;
char _m0_final_padding[8];
};
struct _34
{
float4 _m0;
float4 _m1;
float4 _m2;
float4 _m3;
};
struct _35
{
_34 _m0;
};
struct _37
{
_35 _m0;
float3 _m1;
uint2 _m2;
uint2 _m3;
};
struct _43
{
_37 _m0;
};
struct _44
{
_33 _m0[1];
};
struct spvDescriptorSetBuffer1
{
device _44* m_39 [[id(0)]];
};
struct vertex_instanced_with_scale_out
{
float3 m_6 [[user(locn0)]];
float3 m_7 [[user(locn1)]];
float2 m_8 [[user(locn2)]];
uint m_9 [[user(locn3)]];
float m_10 [[user(locn4)]];
float4 gl_Position [[position]];
};
struct vertex_instanced_with_scale_in
{
float3 m_2 [[attribute(0)]];
float3 m_3 [[attribute(1)]];
float2 m_4 [[attribute(2)]];
};
vertex vertex_instanced_with_scale_out vertex_instanced_with_scale(vertex_instanced_with_scale_in in [[stage_in]], constant spvDescriptorSetBuffer1& spvDescriptorSet1 [[buffer(1)]], constant _43& _38 [[buffer(4)]], uint gl_InstanceIndex [[instance_id]])
{
vertex_instanced_with_scale_out out = {};
float _302 = ((*spvDescriptorSet1.m_39)._m0[gl_InstanceIndex]._m0._m1.w * (*spvDescriptorSet1.m_39)._m0[gl_InstanceIndex]._m0._m1.w) - ((((*spvDescriptorSet1.m_39)._m0[gl_InstanceIndex]._m0._m1.x * (*spvDescriptorSet1.m_39)._m0[gl_InstanceIndex]._m0._m1.x) + ((*spvDescriptorSet1.m_39)._m0[gl_InstanceIndex]._m0._m1.y * (*spvDescriptorSet1.m_39)._m0[gl_InstanceIndex]._m0._m1.y)) + ((*spvDescriptorSet1.m_39)._m0[gl_InstanceIndex]._m0._m1.z * (*spvDescriptorSet1.m_39)._m0[gl_InstanceIndex]._m0._m1.z));
float _317 = (((in.m_2.x * (*spvDescriptorSet1.m_39)._m0[gl_InstanceIndex]._m0._m1.x) + (in.m_2.y * (*spvDescriptorSet1.m_39)._m0[gl_InstanceIndex]._m0._m1.y)) + (in.m_2.z * (*spvDescriptorSet1.m_39)._m0[gl_InstanceIndex]._m0._m1.z)) * 2.0;
float _339 = (*spvDescriptorSet1.m_39)._m0[gl_InstanceIndex]._m0._m1.w * 2.0;
float3 _350 = float3((*spvDescriptorSet1.m_39)._m0[gl_InstanceIndex]._m0._m0.xyz) + float3((*spvDescriptorSet1.m_39)._m0[gl_InstanceIndex]._m0._m0.w * (((in.m_2.x * _302) + ((*spvDescriptorSet1.m_39)._m0[gl_InstanceIndex]._m0._m1.x * _317)) + ((((*spvDescriptorSet1.m_39)._m0[gl_InstanceIndex]._m0._m1.y * in.m_2.z) - (in.m_2.y * (*spvDescriptorSet1.m_39)._m0[gl_InstanceIndex]._m0._m1.z)) * _339)), (*spvDescriptorSet1.m_39)._m0[gl_InstanceIndex]._m0._m0.w * (((in.m_2.y * _302) + ((*spvDescriptorSet1.m_39)._m0[gl_InstanceIndex]._m0._m1.y * _317)) + ((((*spvDescriptorSet1.m_39)._m0[gl_InstanceIndex]._m0._m1.z * in.m_2.x) - (in.m_2.z * (*spvDescriptorSet1.m_39)._m0[gl_InstanceIndex]._m0._m1.x)) * _339)), (*spvDescriptorSet1.m_39)._m0[gl_InstanceIndex]._m0._m0.w * (((in.m_2.z * _302) + ((*spvDescriptorSet1.m_39)._m0[gl_InstanceIndex]._m0._m1.z * _317)) + ((((*spvDescriptorSet1.m_39)._m0[gl_InstanceIndex]._m0._m1.x * in.m_2.y) - (in.m_2.x * (*spvDescriptorSet1.m_39)._m0[gl_InstanceIndex]._m0._m1.y)) * _339)));
out.m_6 = _350;
float _113 = (((in.m_3.x * (*spvDescriptorSet1.m_39)._m0[gl_InstanceIndex]._m0._m1.x) + (in.m_3.y * (*spvDescriptorSet1.m_39)._m0[gl_InstanceIndex]._m0._m1.y)) + (in.m_3.z * (*spvDescriptorSet1.m_39)._m0[gl_InstanceIndex]._m0._m1.z)) * 2.0;
out.m_7 = float3(((in.m_3.x * _302) + ((*spvDescriptorSet1.m_39)._m0[gl_InstanceIndex]._m0._m1.x * _113)) + ((((*spvDescriptorSet1.m_39)._m0[gl_InstanceIndex]._m0._m1.y * in.m_3.z) - (in.m_3.y * (*spvDescriptorSet1.m_39)._m0[gl_InstanceIndex]._m0._m1.z)) * _339), ((in.m_3.y * _302) + ((*spvDescriptorSet1.m_39)._m0[gl_InstanceIndex]._m0._m1.y * _113)) + ((((*spvDescriptorSet1.m_39)._m0[gl_InstanceIndex]._m0._m1.z * in.m_3.x) - (in.m_3.z * (*spvDescriptorSet1.m_39)._m0[gl_InstanceIndex]._m0._m1.x)) * _339), ((in.m_3.z * _302) + ((*spvDescriptorSet1.m_39)._m0[gl_InstanceIndex]._m0._m1.z * _113)) + ((((*spvDescriptorSet1.m_39)._m0[gl_InstanceIndex]._m0._m1.x * in.m_3.y) - (in.m_3.x * (*spvDescriptorSet1.m_39)._m0[gl_InstanceIndex]._m0._m1.y)) * _339));
out.m_8 = in.m_4;
out.m_9 = (*spvDescriptorSet1.m_39)._m0[gl_InstanceIndex]._m2;
out.m_10 = (*spvDescriptorSet1.m_39)._m0[gl_InstanceIndex]._m0._m0.w;
float _148 = _350.x;
float _149 = _350.y;
float _150 = _350.z;
out.gl_Position = float4(_38._m0._m0._m0._m3.x + ((_38._m0._m0._m0._m2.x * _150) + ((_38._m0._m0._m0._m1.x * _149) + (_38._m0._m0._m0._m0.x * _148))), _38._m0._m0._m0._m3.y + ((_38._m0._m0._m0._m2.y * _150) + ((_38._m0._m0._m0._m1.y * _149) + (_38._m0._m0._m0._m0.y * _148))), _38._m0._m0._m0._m3.z + ((_38._m0._m0._m0._m2.z * _150) + ((_38._m0._m0._m0._m1.z * _149) + (_38._m0._m0._m0._m0.z * _148))), _38._m0._m0._m0._m3.w + ((_38._m0._m0._m0._m2.w * _150) + ((_38._m0._m0._m0._m1.w * _149) + (_38._m0._m0._m0._m0.w * _148))));
out.gl_Position.y = -(out.gl_Position.y); // Invert Y-axis for Metal
return out;
}
End MSL
Estimated original GLSL:
#version 450
#extension GL_EXT_nonuniform_qualifier : require
out gl_PerVertex
{
vec4 gl_Position;
};
struct _32
{
vec4 _m0;
vec4 _m1;
};
struct _33
{
_32 _m0;
uint _m1;
uint _m2;
};
struct _34
{
vec4 _m0;
vec4 _m1;
vec4 _m2;
vec4 _m3;
};
struct _35
{
_34 _m0;
};
struct _37
{
_35 _m0;
vec3 _m1;
uvec2 _m2;
uvec2 _m3;
};
layout(set = 1, binding = 0, std430) buffer _44_39
{
_33 _m0[];
} _39;
layout(push_constant, std430) uniform _43_38
{
_37 _m0;
} _38;
layout(location = 0) in vec3 _2;
layout(location = 1) in vec3 _3;
layout(location = 2) in vec2 _4;
layout(location = 0) out vec3 _6;
layout(location = 1) out vec3 _7;
layout(location = 2) out vec2 _8;
layout(location = 3) out uint _9;
layout(location = 4) out float _10;
void main()
{
float _302 = (_39._m0[uint(gl_InstanceIndex)]._m0._m1.w * _39._m0[uint(gl_InstanceIndex)]._m0._m1.w) - (((_39._m0[uint(gl_InstanceIndex)]._m0._m1.x * _39._m0[uint(gl_InstanceIndex)]._m0._m1.x) + (_39._m0[uint(gl_InstanceIndex)]._m0._m1.y * _39._m0[uint(gl_InstanceIndex)]._m0._m1.y)) + (_39._m0[uint(gl_InstanceIndex)]._m0._m1.z * _39._m0[uint(gl_InstanceIndex)]._m0._m1.z));
float _317 = (((_2.x * _39._m0[uint(gl_InstanceIndex)]._m0._m1.x) + (_2.y * _39._m0[uint(gl_InstanceIndex)]._m0._m1.y)) + (_2.z * _39._m0[uint(gl_InstanceIndex)]._m0._m1.z)) * 2.0;
float _339 = _39._m0[uint(gl_InstanceIndex)]._m0._m1.w * 2.0;
vec3 _350 = vec3(_39._m0[uint(gl_InstanceIndex)]._m0._m0.xyz) + vec3(_39._m0[uint(gl_InstanceIndex)]._m0._m0.w * (((_2.x * _302) + (_39._m0[uint(gl_InstanceIndex)]._m0._m1.x * _317)) + (((_39._m0[uint(gl_InstanceIndex)]._m0._m1.y * _2.z) - (_2.y * _39._m0[uint(gl_InstanceIndex)]._m0._m1.z)) * _339)), _39._m0[uint(gl_InstanceIndex)]._m0._m0.w * (((_2.y * _302) + (_39._m0[uint(gl_InstanceIndex)]._m0._m1.y * _317)) + (((_39._m0[uint(gl_InstanceIndex)]._m0._m1.z * _2.x) - (_2.z * _39._m0[uint(gl_InstanceIndex)]._m0._m1.x)) * _339)), _39._m0[uint(gl_InstanceIndex)]._m0._m0.w * (((_2.z * _302) + (_39._m0[uint(gl_InstanceIndex)]._m0._m1.z * _317)) + (((_39._m0[uint(gl_InstanceIndex)]._m0._m1.x * _2.y) - (_2.x * _39._m0[uint(gl_InstanceIndex)]._m0._m1.y)) * _339)));
_6 = _350;
float _113 = (((_3.x * _39._m0[uint(gl_InstanceIndex)]._m0._m1.x) + (_3.y * _39._m0[uint(gl_InstanceIndex)]._m0._m1.y)) + (_3.z * _39._m0[uint(gl_InstanceIndex)]._m0._m1.z)) * 2.0;
_7 = vec3(((_3.x * _302) + (_39._m0[uint(gl_InstanceIndex)]._m0._m1.x * _113)) + (((_39._m0[uint(gl_InstanceIndex)]._m0._m1.y * _3.z) - (_3.y * _39._m0[uint(gl_InstanceIndex)]._m0._m1.z)) * _339), ((_3.y * _302) + (_39._m0[uint(gl_InstanceIndex)]._m0._m1.y * _113)) + (((_39._m0[uint(gl_InstanceIndex)]._m0._m1.z * _3.x) - (_3.z * _39._m0[uint(gl_InstanceIndex)]._m0._m1.x)) * _339), ((_3.z * _302) + (_39._m0[uint(gl_InstanceIndex)]._m0._m1.z * _113)) + (((_39._m0[uint(gl_InstanceIndex)]._m0._m1.x * _3.y) - (_3.x * _39._m0[uint(gl_InstanceIndex)]._m0._m1.y)) * _339));
_8 = _4;
_9 = _39._m0[uint(gl_InstanceIndex)]._m2;
_10 = _39._m0[uint(gl_InstanceIndex)]._m0._m0.w;
float _148 = _350.x;
float _149 = _350.y;
float _150 = _350.z;
gl_Position = vec4(_38._m0._m0._m0._m3.x + ((_38._m0._m0._m0._m2.x * _150) + ((_38._m0._m0._m0._m1.x * _149) + (_38._m0._m0._m0._m0.x * _148))), _38._m0._m0._m0._m3.y + ((_38._m0._m0._m0._m2.y * _150) + ((_38._m0._m0._m0._m1.y * _149) + (_38._m0._m0._m0._m0.y * _148))), _38._m0._m0._m0._m3.z + ((_38._m0._m0._m0._m2.z * _150) + ((_38._m0._m0._m0._m1.z * _149) + (_38._m0._m0._m0._m0.z * _148))), _38._m0._m0._m0._m3.w + ((_38._m0._m0._m0._m2.w * _150) + ((_38._m0._m0._m0._m1.w * _149) + (_38._m0._m0._m0._m0.w * _148))));
}
End GLSL
[mvk-info] Converting SPIR-V:
; SPIR-V
; Version: 1.3
; Generator: Embark Studios Rust GPU Compiler Backend; 0
; Bound: 3028
; Schema: 0
OpCapability RuntimeDescriptorArray
OpCapability Shader
OpExtension "SPV_EXT_descriptor_indexing"
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical Simple
OpEntryPoint Fragment %2 "fragment_transmission" %3 %4 %5 %6 %7 %8
OpExecutionMode %2 OriginUpperLeft
OpMemberDecorate %75 0 Offset 0
OpMemberDecorate %75 1 Offset 16
OpDecorate %134 ArrayStride 32
OpMemberDecorate %76 0 Offset 0
OpMemberDecorate %76 1 Offset 4
OpMemberDecorate %76 2 Offset 8
OpMemberDecorate %76 3 Offset 12
OpMemberDecorate %76 4 Offset 16
OpMemberDecorate %76 5 Offset 20
OpMemberDecorate %76 6 Offset 24
OpMemberDecorate %76 7 Offset 28
OpMemberDecorate %76 8 Offset 32
OpMemberDecorate %77 0 Offset 0
OpMemberDecorate %77 1 Offset 36
OpMemberDecorate %77 2 Offset 40
OpMemberDecorate %77 3 Offset 44
OpMemberDecorate %77 4 Offset 48
OpMemberDecorate %77 5 Offset 64
OpMemberDecorate %77 6 Offset 80
OpMemberDecorate %77 7 Offset 84
OpMemberDecorate %77 8 Offset 88
OpMemberDecorate %77 9 Offset 92
OpMemberDecorate %77 10 Offset 96
OpMemberDecorate %77 11 Offset 100
OpMemberDecorate %77 12 Offset 112
OpMemberDecorate %77 13 Offset 128
OpMemberDecorate %77 14 Offset 144
OpDecorate %135 ArrayStride 160
OpDecorate %136 ArrayStride 4
OpMemberDecorate %82 0 Offset 0
OpMemberDecorate %82 1 Offset 16
OpMemberDecorate %82 2 Offset 32
OpMemberDecorate %82 3 Offset 40
OpMemberDecorate %82 4 Offset 48
OpMemberDecorate %82 5 Offset 52
OpMemberDecorate %91 0 Offset 0
OpMemberDecorate %91 1 Offset 16
OpMemberDecorate %91 2 Offset 32
OpMemberDecorate %91 3 Offset 48
OpMemberDecorate %92 0 Offset 0
OpMemberDecorate %93 0 Offset 0
OpMemberDecorate %93 1 Offset 64
OpMemberDecorate %93 2 Offset 80
OpMemberDecorate %93 3 Offset 88
OpDecorate %3 Location 0
OpDecorate %4 Location 1
OpDecorate %5 Location 2
OpDecorate %6 Flat
OpDecorate %6 Location 3
OpDecorate %7 Flat
OpDecorate %7 Location 4
OpDecorate %137 Block
OpMemberDecorate %137 0 Offset 0
OpDecorate %95 DescriptorSet 0
OpDecorate %95 Binding 0
OpDecorate %96 DescriptorSet 0
OpDecorate %96 Binding 1
OpDecorate %138 Block
OpMemberDecorate %138 0 Offset 0
OpDecorate %97 DescriptorSet 0
OpDecorate %97 Binding 2
OpDecorate %139 Block
OpMemberDecorate %139 0 Offset 0
OpDecorate %98 DescriptorSet 0
OpDecorate %98 Binding 3
OpDecorate %99 DescriptorSet 0
OpDecorate %99 Binding 4
OpDecorate %140 Block
OpMemberDecorate %140 0 Offset 0
OpDecorate %100 DescriptorSet 2
OpDecorate %100 Binding 0
OpDecorate %101 DescriptorSet 3
OpDecorate %101 Binding 0
OpDecorate %8 Location 0
%141 = OpTypeFloat 32
%142 = OpTypeVector %141 4
%143 = OpTypeImage %141 2D 2 0 0 1 Unknown
%144 = OpTypePointer UniformConstant %143
%145 = OpTypeSampler
%146 = OpTypeVector %141 2
%149 = OpTypePointer UniformConstant %145
%150 = OpTypePointer Input %146
%151 = OpTypePointer Input %141
%153 = OpTypePointer StorageBuffer %141
%154 = OpTypePointer Output %142
%155 = OpTypePointer StorageBuffer %142
%156 = OpTypeSampledImage %143
%157 = OpConstant %141 0
%158 = OpTypeInt 32 0
%159 = OpTypePointer Input %158
%160 = OpTypePointer Uniform %158
%161 = OpTypePointer PushConstant %158
%162 = OpConstant %158 4
%163 = OpConstant %158 0
%164 = OpConstant %158 1
%166 = OpTypeVector %141 3
%170 = OpTypePointer Input %166
%173 = OpTypePointer PushConstant %166
%174 = OpTypePointer StorageBuffer %166
%175 = OpConstant %158 2
%176 = OpConstant %158 3
%177 = OpConstant %158 5
%178 = OpConstant %158 6
%179 = OpConstant %141 1
%75 = OpTypeStruct %166 %142
%134 = OpTypeRuntimeArray %75
%184 = OpTypeInt 32 1
%76 = OpTypeStruct %184 %184 %184 %184 %184 %184 %184 %184 %184
%77 = OpTypeStruct %76 %141 %141 %141 %142 %166 %141 %141 %141 %141 %141 %141 %166 %141 %166
%135 = OpTypeRuntimeArray %77
%136 = OpTypeRuntimeArray %143
%187 = OpTypePointer UniformConstant %136
%189 = OpTypeVoid
%190 = OpTypeVector %158 2
%82 = OpTypeStruct %166 %166 %146 %190 %158 %158
%195 = OpTypeBool
%199 = OpTypePointer StorageBuffer %184
%200 = OpConstant %184 -1
%203 = OpConstant %141 1.00787401
%205 = OpConstant %158 14
%206 = OpConstant %158 8
%207 = OpConstant %158 13
%208 = OpConstant %158 7
%91 = OpTypeStruct %142 %142 %142 %142
%92 = OpTypeStruct %91
%93 = OpTypeStruct %92 %166 %190 %190
%211 = OpTypeFunction %189
%3 = OpVariable %170 Input
%4 = OpVariable %170 Input
%5 = OpVariable %150 Input
%6 = OpVariable %159 Input
%7 = OpVariable %151 Input
%137 = OpTypeStruct %93
%212 = OpTypePointer PushConstant %137
%94 = OpVariable %212 PushConstant
%95 = OpVariable %187 UniformConstant
%96 = OpVariable %149 UniformConstant
%138 = OpTypeStruct %135
%213 = OpTypePointer StorageBuffer %138
%97 = OpVariable %213 StorageBuffer
%139 = OpTypeStruct %82
%214 = OpTypePointer Uniform %139
%98 = OpVariable %214 Uniform
%99 = OpVariable %149 UniformConstant
%140 = OpTypeStruct %134
%215 = OpTypePointer StorageBuffer %140
%100 = OpVariable %215 StorageBuffer
%101 = OpVariable %144 UniformConstant
%8 = OpVariable %154 Output
%216 = OpConstant %141 2
%217 = OpTypePointer PushConstant %92
%218 = OpConstant %158 9
%219 = OpConstant %158 10
%220 = OpConstant %158 11
%221 = OpConstant %158 12
%236 = OpConstant %141 0x1p+128
%3024 = OpConstantComposite %166 %203 %203 %203
%3026 = OpConstant %141 2.00787401
%3027 = OpConstant %141 0.5
%2 = OpFunction %189 None %211
%364 = OpLabel
%365 = OpLoad %166 %3
%366 = OpLoad %166 %4
%367 = OpLoad %146 %5
%368 = OpLoad %158 %6
%369 = OpLoad %141 %7
%374 = OpArrayLength %158 %100 0
%376 = OpLoad %145 %96
%377 = OpAccessChain %155 %97 %163 %368 %162
%378 = OpLoad %142 %377
%380 = OpAccessChain %199 %97 %163 %368 %163 %163
%381 = OpLoad %184 %380
%382 = OpIEqual %195 %381 %200
OpSelectionMerge %383 None
OpBranchConditional %382 %384 %385
%385 = OpLabel
%388 = OpLoad %184 %380
%389 = OpBitcast %158 %388
%390 = OpAccessChain %144 %95 %389
%1412 = OpLoad %143 %390
%1413 = OpSampledImage %156 %1412 %376
%1414 = OpImageSampleImplicitLod %142 %1413 %367
%392 = OpFMul %142 %378 %1414
OpBranch %383
%384 = OpLabel
OpBranch %383
%383 = OpLabel
%393 = OpPhi %142 %378 %384 %392 %385
%394 = OpAccessChain %153 %97 %163 %368 %218
%395 = OpLoad %141 %394
%397 = OpAccessChain %199 %97 %163 %368 %163 %177
%398 = OpLoad %184 %397
%399 = OpIEqual %195 %398 %200
OpSelectionMerge %400 None
OpBranchConditional %399 %401 %402
%402 = OpLabel
%405 = OpLoad %184 %397
%406 = OpBitcast %158 %405
%407 = OpAccessChain %144 %95 %406
%1417 = OpLoad %143 %407
%1418 = OpSampledImage %156 %1417 %376
%1419 = OpImageSampleImplicitLod %142 %1418 %367
%409 = OpCompositeExtract %141 %1419 0
%410 = OpFMul %141 %395 %409
OpBranch %400
%401 = OpLabel
OpBranch %400
%400 = OpLabel
%411 = OpPhi %141 %395 %401 %410 %402
%412 = OpAccessChain %173 %94 %163 %164
%413 = OpLoad %166 %412
%415 = OpCompositeExtract %141 %413 0
%416 = OpCompositeExtract %141 %365 0
%417 = OpFSub %141 %415 %416
%418 = OpCompositeExtract %141 %413 1
%419 = OpCompositeExtract %141 %365 1
%420 = OpFSub %141 %418 %419
%421 = OpCompositeExtract %141 %413 2
%422 = OpCompositeExtract %141 %365 2
%423 = OpFSub %141 %421 %422
%424 = OpFMul %141 %417 %417
%425 = OpFMul %141 %420 %420
%426 = OpFAdd %141 %424 %425
%427 = OpFMul %141 %423 %423
%428 = OpFAdd %141 %426 %427
%429 = OpExtInst %141 %1 Sqrt %428
%430 = OpFDiv %141 %179 %429
%431 = OpFMul %141 %417 %430
%432 = OpFMul %141 %420 %430
%433 = OpFMul %141 %423 %430
%434 = OpCompositeConstruct %166 %431 %432 %433
%435 = OpCompositeExtract %141 %366 0
%437 = OpFMul %141 %435 %435
%438 = OpCompositeExtract %141 %366 1
%440 = OpFMul %141 %438 %438
%441 = OpFAdd %141 %437 %440
%442 = OpCompositeExtract %141 %366 2
%444 = OpFMul %141 %442 %442
%445 = OpFAdd %141 %441 %444
%446 = OpExtInst %141 %1 Sqrt %445
%447 = OpFDiv %141 %179 %446
%448 = OpVectorTimesScalar %166 %366 %447
%450 = OpAccessChain %199 %97 %163 %368 %163 %175
%451 = OpLoad %184 %450
%452 = OpIEqual %195 %451 %200
OpSelectionMerge %453 None
OpBranchConditional %452 %454 %455
%455 = OpLabel
%458 = OpLoad %184 %450
%459 = OpBitcast %158 %458
%460 = OpAccessChain %144 %95 %459
%1428 = OpLoad %143 %460
%1429 = OpSampledImage %156 %1428 %376
%1430 = OpImageSampleImplicitLod %142 %1429 %367
%462 = OpCompositeExtract %141 %1430 0
%463 = OpCompositeExtract %141 %1430 1
%464 = OpCompositeExtract %141 %1430 2
%468 = OpFMul %141 %462 %3026
%469 = OpFMul %141 %463 %3026
%470 = OpFMul %141 %464 %3026
%471 = OpCompositeConstruct %166 %468 %469 %470
%1434 = OpFSub %166 %471 %3024
%473 = OpFNegate %141 %417
%474 = OpFNegate %141 %420
%475 = OpFNegate %141 %423
%476 = OpCompositeConstruct %166 %473 %474 %475
%1531 = OpDPdx %166 %476
%1534 = OpDPdy %166 %476
%1538 = OpDPdx %146 %367
%1541 = OpDPdy %146 %367
%1442 = OpCompositeExtract %141 %1534 1
%1443 = OpCompositeExtract %141 %448 2
%1444 = OpFMul %141 %1442 %1443
%1445 = OpCompositeExtract %141 %448 1
%1446 = OpCompositeExtract %141 %1534 2
%1447 = OpFMul %141 %1445 %1446
%1448 = OpFSub %141 %1444 %1447
%1450 = OpCompositeExtract %141 %448 0
%1451 = OpFMul %141 %1446 %1450
%1453 = OpCompositeExtract %141 %1534 0
%1454 = OpFMul %141 %1443 %1453
%1455 = OpFSub %141 %1451 %1454
%1458 = OpFMul %141 %1453 %1445
%1461 = OpFMul %141 %1450 %1442
%1462 = OpFSub %141 %1458 %1461
%1464 = OpCompositeExtract %141 %1531 2
%1465 = OpFMul %141 %1445 %1464
%1466 = OpCompositeExtract %141 %1531 1
%1468 = OpFMul %141 %1466 %1443
%1469 = OpFSub %141 %1465 %1468
%1471 = OpCompositeExtract %141 %1531 0
%1472 = OpFMul %141 %1443 %1471
%1475 = OpFMul %141 %1464 %1450
%1476 = OpFSub %141 %1472 %1475
%1479 = OpFMul %141 %1450 %1466
%1482 = OpFMul %141 %1471 %1445
%1483 = OpFSub %141 %1479 %1482
%1484 = OpCompositeExtract %141 %1538 0
%1485 = OpFMul %141 %1448 %1484
%1486 = OpFMul %141 %1455 %1484
%1487 = OpFMul %141 %1462 %1484
%1488 = OpCompositeExtract %141 %1541 0
%1489 = OpFMul %141 %1469 %1488
%1490 = OpFMul %141 %1476 %1488
%1491 = OpFMul %141 %1483 %1488
%1492 = OpFAdd %141 %1485 %1489
%1493 = OpFAdd %141 %1486 %1490
%1494 = OpFAdd %141 %1487 %1491
%1495 = OpCompositeExtract %141 %1538 1
%1496 = OpFMul %141 %1448 %1495
%1497 = OpFMul %141 %1455 %1495
%1498 = OpFMul %141 %1462 %1495
%1499 = OpCompositeExtract %141 %1541 1
%1500 = OpFMul %141 %1469 %1499
%1501 = OpFMul %141 %1476 %1499
%1502 = OpFMul %141 %1483 %1499
%1503 = OpFAdd %141 %1496 %1500
%1504 = OpFAdd %141 %1497 %1501
%1505 = OpFAdd %141 %1498 %1502
%1506 = OpFMul %141 %1492 %1492
%1507 = OpFMul %141 %1493 %1493
%1508 = OpFAdd %141 %1506 %1507
%1509 = OpFMul %141 %1494 %1494
%1510 = OpFAdd %141 %1508 %1509
%1511 = OpFMul %141 %1503 %1503
%1512 = OpFMul %141 %1504 %1504
%1513 = OpFAdd %141 %1511 %1512
%1514 = OpFMul %141 %1505 %1505
%1515 = OpFAdd %141 %1513 %1514
%1516 = OpExtInst %141 %1 FMax %1510 %1515
%1517 = OpExtInst %141 %1 Sqrt %1516
%1518 = OpFDiv %141 %179 %1517
%1519 = OpFMul %141 %1492 %1518
%1520 = OpFMul %141 %1493 %1518
%1521 = OpFMul %141 %1494 %1518
%1523 = OpFMul %141 %1503 %1518
%1524 = OpFMul %141 %1504 %1518
%1525 = OpFMul %141 %1505 %1518
%479 = OpCompositeExtract %141 %1434 0
%481 = OpFMul %141 %1519 %479
%483 = OpFMul %141 %1520 %479
%485 = OpFMul %141 %1521 %479
%487 = OpCompositeExtract %141 %1434 1
%489 = OpFMul %141 %1523 %487
%491 = OpFMul %141 %1524 %487
%493 = OpFMul %141 %1525 %487
%494 = OpFAdd %141 %489 %481
%495 = OpFAdd %141 %491 %483
%496 = OpFAdd %141 %493 %485
%498 = OpCompositeExtract %141 %1434 2
%500 = OpFMul %141 %1450 %498
%502 = OpFMul %141 %1445 %498
%504 = OpFMul %141 %1443 %498
%505 = OpFAdd %141 %500 %494
%506 = OpFAdd %141 %502 %495
%507 = OpFAdd %141 %504 %496
%508 = OpFMul %141 %505 %505
%509 = OpFMul %141 %506 %506
%510 = OpFAdd %141 %508 %509
%511 = OpFMul %141 %507 %507
%512 = OpFAdd %141 %510 %511
%513 = OpExtInst %141 %1 Sqrt %512
%514 = OpFDiv %141 %179 %513
%515 = OpFMul %141 %505 %514
%516 = OpFMul %141 %506 %514
%517 = OpFMul %141 %507 %514
%518 = OpCompositeConstruct %166 %515 %516 %517
OpBranch %453
%454 = OpLabel
OpBranch %453
%453 = OpLabel
%519 = OpPhi %166 %448 %454 %518 %455
%520 = OpAccessChain %153 %97 %163 %368 %164
%521 = OpLoad %141 %520
%522 = OpAccessChain %153 %97 %163 %368 %175
%523 = OpLoad %141 %522
%525 = OpAccessChain %199 %97 %163 %368 %163 %164
%526 = OpLoad %184 %525
%527 = OpIEqual %195 %526 %200
OpSelectionMerge %528 None
OpBranchConditional %527 %529 %530
%530 = OpLabel
%533 = OpLoad %184 %525
%534 = OpBitcast %158 %533
%535 = OpAccessChain %144 %95 %534
%1544 = OpLoad %143 %535
%1545 = OpSampledImage %156 %1544 %376
%1546 = OpImageSampleImplicitLod %142 %1545 %367
%537 = OpCompositeExtract %141 %1546 2
%538 = OpCompositeExtract %141 %1546 1
%539 = OpFMul %141 %521 %537
%540 = OpFMul %141 %523 %538
OpBranch %528
%529 = OpLabel
OpBranch %528
%528 = OpLabel
%541 = OpPhi %141 %523 %529 %540 %530
%542 = OpPhi %141 %521 %529 %539 %530
%543 = OpAccessChain %174 %97 %163 %368 %205
%544 = OpLoad %166 %543
%547 = OpAccessChain %199 %97 %163 %368 %163 %206
%548 = OpLoad %184 %547
%549 = OpIEqual %195 %548 %200
OpSelectionMerge %550 None
OpBranchConditional %549 %551 %552
%552 = OpLabel
%555 = OpLoad %184 %547
%556 = OpBitcast %158 %555
%557 = OpAccessChain %144 %95 %556
%1555 = OpLoad %143 %557
%1556 = OpSampledImage %156 %1555 %376
%1557 = OpImageSampleImplicitLod %142 %1556 %367
%559 = OpCompositeExtract %141 %1557 0
%560 = OpCompositeExtract %141 %1557 1
%561 = OpCompositeExtract %141 %1557 2
%562 = OpCompositeConstruct %166 %559 %560 %561
%563 = OpFMul %166 %544 %562
OpBranch %550
%551 = OpLabel
OpBranch %550
%550 = OpLabel
%564 = OpPhi %166 %544 %551 %563 %552
%565 = OpAccessChain %153 %97 %163 %368 %207
%566 = OpLoad %141 %565
%568 = OpAccessChain %199 %97 %163 %368 %163 %208
%569 = OpLoad %184 %568
%570 = OpIEqual %195 %569 %200
OpSelectionMerge %571 None
OpBranchConditional %570 %572 %573
%573 = OpLabel
%576 = OpLoad %184 %568
%577 = OpBitcast %158 %576
%578 = OpAccessChain %144 %95 %577
%1560 = OpLoad %143 %578
%1561 = OpSampledImage %156 %1560 %376
%1562 = OpImageSampleImplicitLod %142 %1561 %367
%580 = OpCompositeExtract %141 %1562 3
%581 = OpFMul %141 %566 %580
OpBranch %571
%572 = OpLabel
OpBranch %571
%571 = OpLabel
%582 = OpPhi %141 %566 %572 %581 %573
%583 = OpCompositeExtract %141 %393 0
%584 = OpCompositeExtract %141 %393 1
%585 = OpCompositeExtract %141 %393 2
%587 = OpAccessChain %153 %97 %163 %368 %206
%588 = OpLoad %141 %587
%590 = OpAccessChain %174 %97 %163 %368 %177
%591 = OpLoad %166 %590
%594 = OpAccessChain %199 %97 %163 %368 %163 %176
%595 = OpLoad %184 %594
%596 = OpIEqual %195 %595 %200
OpSelectionMerge %597 None
OpBranchConditional %596 %598 %599
%599 = OpLabel
%602 = OpLoad %184 %594
%603 = OpBitcast %158 %602
%604 = OpAccessChain %144 %95 %603
%1571 = OpLoad %143 %604
%1572 = OpSampledImage %156 %1571 %376
%1573 = OpImageSampleImplicitLod %142 %1572 %367
%606 = OpCompositeExtract %141 %1573 0
%607 = OpCompositeExtract %141 %1573 1
%608 = OpCompositeExtract %141 %1573 2
%609 = OpCompositeConstruct %166 %606 %607 %608
%610 = OpFMul %166 %591 %609
OpBranch %597
%598 = OpLabel
OpBranch %597
%597 = OpLabel
%611 = OpPhi %166 %591 %598 %610 %599
OpBranch %626
%626 = OpLabel
%627 = OpPhi %158 %163 %597 %628 %629
OpLoopMerge %634 %629 None
OpBranch %635
%635 = OpLabel
%636 = OpULessThan %195 %627 %374
OpSelectionMerge %638 None
OpBranchConditional %636 %638 %639
%639 = OpLabel
%662 = OpAccessChain %153 %97 %163 %368 %219
%663 = OpLoad %141 %662
%665 = OpAccessChain %199 %97 %163 %368 %163 %178
%666 = OpLoad %184 %665
%667 = OpIEqual %195 %666 %200
OpSelectionMerge %668 None
OpBranchConditional %667 %669 %670
%670 = OpLabel
%673 = OpLoad %184 %665
%674 = OpBitcast %158 %673
%675 = OpAccessChain %144 %95 %674
%2827 = OpLoad %143 %675
%2828 = OpSampledImage %156 %2827 %376
%2829 = OpImageSampleImplicitLod %142 %2828 %367
%677 = OpCompositeExtract %141 %2829 1
%678 = OpFMul %141 %663 %677
OpBranch %668
%669 = OpLabel
OpBranch %668
%668 = OpLabel
%679 = OpPhi %141 %663 %669 %678 %670
%680 = OpAccessChain %217 %94 %163 %163
%681 = OpLoad %92 %680
%683 = OpAccessChain %161 %94 %163 %175 %163
%684 = OpLoad %158 %683
%685 = OpAccessChain %153 %97 %163 %368 %220
%686 = OpLoad %141 %685
%687 = OpAccessChain %174 %97 %163 %368 %221
%688 = OpLoad %166 %687
%2842 = OpFNegate %166 %434
%2871 = OpFDiv %141 %179 %588
%2872 = OpCompositeExtract %141 %519 0
%2873 = OpCompositeExtract %141 %2842 0
%2874 = OpFMul %141 %2872 %2873
%2875 = OpCompositeExtract %141 %519 1
%2876 = OpCompositeExtract %141 %2842 1
%2877 = OpFMul %141 %2875 %2876
%2878 = OpFAdd %141 %2874 %2877
%2879 = OpCompositeExtract %141 %519 2
%2880 = OpCompositeExtract %141 %2842 2
%2881 = OpFMul %141 %2879 %2880
%2882 = OpFAdd %141 %2878 %2881
%2883 = OpFMul %141 %2871 %2871
%2884 = OpFMul %141 %2882 %2882
%2885 = OpFSub %141 %179 %2884
%2886 = OpFMul %141 %2883 %2885
%2887 = OpFSub %141 %179 %2886
%2889 = OpFMul %141 %2871 %2873
%2891 = OpFMul %141 %2871 %2876
%2893 = OpFMul %141 %2871 %2880
%2894 = OpFMul %141 %2871 %2882
%2895 = OpExtInst %141 %1 Sqrt %2887
%2896 = OpFAdd %141 %2894 %2895
%2898 = OpFMul %141 %2896 %2872
%2900 = OpFMul %141 %2896 %2875
%2902 = OpFMul %141 %2896 %2879
%2903 = OpFSub %141 %2889 %2898
%2904 = OpFSub %141 %2891 %2900
%2905 = OpFSub %141 %2893 %2902
%2844 = OpFMul %141 %679 %369
%2847 = OpFMul %141 %2903 %2903
%2850 = OpFMul %141 %2904 %2904
%2851 = OpFAdd %141 %2847 %2850
%2854 = OpFMul %141 %2905 %2905
%2855 = OpFAdd %141 %2851 %2854
%2856 = OpExtInst %141 %1 Sqrt %2855
%2857 = OpFDiv %141 %179 %2856
%2859 = OpFMul %141 %2903 %2857
%2861 = OpFMul %141 %2904 %2857
%2863 = OpFMul %141 %2905 %2857
%2864 = OpFMul %141 %2859 %2844
%2865 = OpFMul %141 %2861 %2844
%2866 = OpFMul %141 %2863 %2844
%699 = OpFAdd %141 %416 %2864
%702 = OpFAdd %141 %419 %2865
%705 = OpFAdd %141 %422 %2866
%706 = OpCompositeExtract %142 %681 0 0
%707 = OpCompositeExtract %141 %706 0
%708 = OpFMul %141 %707 %699
%709 = OpCompositeExtract %141 %706 1
%710 = OpFMul %141 %709 %699
%711 = OpCompositeExtract %141 %706 3
%712 = OpFMul %141 %711 %699
%713 = OpCompositeExtract %142 %681 0 1
%714 = OpCompositeExtract %141 %713 0
%715 = OpFMul %141 %714 %702
%716 = OpFAdd %141 %715 %708
%717 = OpCompositeExtract %141 %713 1
%718 = OpFMul %141 %717 %702
%719 = OpFAdd %141 %718 %710
%720 = OpCompositeExtract %141 %713 3
%721 = OpFMul %141 %720 %702
%722 = OpFAdd %141 %721 %712
%723 = OpCompositeExtract %142 %681 0 2
%724 = OpCompositeExtract %141 %723 0
%725 = OpFMul %141 %724 %705
%726 = OpFAdd %141 %725 %716
%727 = OpCompositeExtract %141 %723 1
%728 = OpFMul %141 %727 %705
%729 = OpFAdd %141 %728 %719
%730 = OpCompositeExtract %141 %723 3
%731 = OpFMul %141 %730 %705
%732 = OpFAdd %141 %731 %722
%733 = OpCompositeExtract %142 %681 0 3
%734 = OpCompositeExtract %141 %733 0
%736 = OpFAdd %141 %734 %726
%737 = OpCompositeExtract %141 %733 1
%739 = OpFAdd %141 %737 %729
%740 = OpCompositeExtract %141 %733 3
%742 = OpFAdd %141 %740 %732
%743 = OpFDiv %141 %736 %742
%744 = OpFDiv %141 %739 %742
%745 = OpFAdd %141 %743 %179
%746 = OpFAdd %141 %744 %179
%747 = OpFMul %141 %745 %3027
%748 = OpFMul %141 %746 %3027
%749 = OpCompositeConstruct %146 %747 %748
%750 = OpConvertUToF %141 %684
%751 = OpExtInst %141 %1 Log2 %750
%2909 = OpFMul %141 %588 %216
%2910 = OpFSub %141 %2909 %216
%2915 = OpExtInst %141 %1 FMax %2910 %157
%2916 = OpExtInst %141 %1 FMin %2915 %179
%2912 = OpFMul %141 %541 %2916
%753 = OpFMul %141 %751 %2912
%754 = OpLoad %145 %99
%2919 = OpLoad %143 %101
%2920 = OpSampledImage %156 %2919 %754
%2921 = OpImageSampleExplicitLod %142 %2920 %749 Lod %753
%756 = OpCompositeExtract %141 %2921 0
%757 = OpCompositeExtract %141 %2921 1
%758 = OpCompositeExtract %141 %2921 2
%759 = OpCompositeConstruct %166 %756 %757 %758
%2924 = OpFOrdEqual %195 %686 %236
OpSelectionMerge %2948 None
OpBranchConditional %2924 %2925 %2926
%2926 = OpLabel
%2958 = OpExtInst %166 %1 Log %688
%2928 = OpCompositeExtract %141 %2958 0
%2929 = OpFNegate %141 %2928
%2930 = OpCompositeExtract %141 %2958 1
%2931 = OpFNegate %141 %2930
%2932 = OpCompositeExtract %141 %2958 2
%2933 = OpFNegate %141 %2932
%2934 = OpFDiv %141 %2929 %686
%2935 = OpFDiv %141 %2931 %686
%2936 = OpFDiv %141 %2933 %686
%2937 = OpFNegate %141 %2934
%2938 = OpFNegate %141 %2935
%2939 = OpFNegate %141 %2936
%2940 = OpFMul %141 %2937 %2844
%2941 = OpFMul %141 %2938 %2844
%2942 = OpFMul %141 %2939 %2844
%2943 = OpExtInst %141 %1 Exp %2940
%2944 = OpExtInst %141 %1 Exp %2941
%2945 = OpExtInst %141 %1 Exp %2942
%2946 = OpCompositeConstruct %166 %2943 %2944 %2945
%2947 = OpFMul %166 %2946 %759
OpBranch %2948
%2925 = OpLabel
OpBranch %2948
%2948 = OpLabel
%2949 = OpPhi %166 %759 %2925 %2947 %2926
%763 = OpFMul %141 %2872 %431
%766 = OpFMul %141 %2875 %432
%767 = OpFAdd %141 %763 %766
%770 = OpFMul %141 %2879 %433
%771 = OpFAdd %141 %767 %770
%772 = OpCompositeConstruct %146 %771 %541
%773 = OpAccessChain %160 %98 %163 %177
%774 = OpLoad %158 %773
%775 = OpAccessChain %144 %95 %774
%2961 = OpLoad %143 %775
%2962 = OpSampledImage %156 %2961 %754
%2963 = OpImageSampleImplicitLod %142 %2962 %772
%778 = OpCompositeExtract %141 %2963 0
%779 = OpCompositeExtract %141 %2963 1
%2967 = OpFSub %141 %588 %179
%2969 = OpFAdd %141 %588 %179
%2970 = OpFDiv %141 %2967 %2969
%2971 = OpFMul %141 %2970 %2970
%2973 = OpCompositeExtract %141 %564 0
%2974 = OpFMul %141 %2971 %2973
%2975 = OpCompositeExtract %141 %564 1
%2976 = OpFMul %141 %2971 %2975
%2977 = OpCompositeExtract %141 %564 2
%2978 = OpFMul %141 %2971 %2977
%2980 = OpFMul %141 %2974 %582
%2981 = OpFMul %141 %2976 %582
%2982 = OpFMul %141 %2978 %582
%2986 = OpFSub %141 %583 %2980
%2988 = OpFSub %141 %584 %2981
%2990 = OpFSub %141 %585 %2982
%2991 = OpFMul %141 %2986 %542
%2992 = OpFMul %141 %2988 %542
%2993 = OpFMul %141 %2990 %542
%2994 = OpFAdd %141 %2980 %2991
%2995 = OpFAdd %141 %2981 %2992
%2996 = OpFAdd %141 %2982 %2993
%3003 = OpFSub %141 %179 %582
%3008 = OpFMul %141 %3003 %542
%3011 = OpFAdd %141 %582 %3008
%783 = OpFMul %141 %2994 %778
%785 = OpFMul %141 %2995 %778
%787 = OpFMul %141 %2996 %778
%789 = OpFMul %141 %3011 %779
%794 = OpFAdd %141 %783 %789
%795 = OpFAdd %141 %785 %789
%796 = OpFAdd %141 %787 %789
%797 = OpFSub %141 %179 %794
%798 = OpFSub %141 %179 %795
%799 = OpFSub %141 %179 %796
%800 = OpCompositeExtract %141 %2949 0
%801 = OpFMul %141 %797 %800
%802 = OpCompositeExtract %141 %2949 1
%803 = OpFMul %141 %798 %802
%804 = OpCompositeExtract %141 %2949 2
%805 = OpFMul %141 %799 %804
%807 = OpFMul %141 %801 %583
%809 = OpFMul %141 %803 %584
%811 = OpFMul %141 %805 %585
%818 = OpFMul %141 %411 %807
%819 = OpFMul %141 %411 %809
%820 = OpFMul %141 %411 %811
%827 = OpFMul %141 %818 %411
%828 = OpFMul %141 %819 %411
%829 = OpFMul %141 %820 %411
%842 = OpCompositeExtract %141 %611 0
%843 = OpFAdd %141 %827 %842
%844 = OpCompositeExtract %141 %611 1
%845 = OpFAdd %141 %828 %844
%846 = OpCompositeExtract %141 %611 2
%847 = OpFAdd %141 %829 %846
%848 = OpCompositeConstruct %142 %843 %845 %847 %179
OpStore %8 %848
OpBranch %634
%638 = OpLabel
%628 = OpIAdd %158 %627 %164
OpBranch %629
%629 = OpLabel
OpBranch %626
%634 = OpLabel
OpReturn
OpFunctionEnd
End SPIR-V
Converted MSL:
#include <metal_stdlib>
#include <simd/simd.h>
using namespace metal;
struct _75
{
float3 _m0;
float4 _m1;
};
struct _76
{
int _m0;
int _m1;
int _m2;
int _m3;
int _m4;
int _m5;
int _m6;
int _m7;
int _m8;
};
struct _77
{
_76 _m0;
float _m1;
float _m2;
float _m3;
float4 _m4;
float3 _m5;
float _m6;
float _m7;
float _m8;
float _m9;
float _m10;
float _m11;
float3 _m12;
float _m13;
float3 _m14;
};
struct _82
{
float3 _m0;
float3 _m1;
float2 _m2;
uint2 _m3;
uint _m4;
uint _m5;
};
struct _91
{
float4 _m0;
float4 _m1;
float4 _m2;
float4 _m3;
};
struct _92
{
_91 _m0;
};
struct _93
{
_92 _m0;
float3 _m1;
uint2 _m2;
uint2 _m3;
};
struct _137
{
_93 _m0;
};
struct _138
{
_77 _m0[1];
};
struct _139
{
_82 _m0;
};
struct _140
{
_75 _m0[1];
};
struct spvDescriptorSetBuffer0
{
array<texture2d<float>, 127> m_95 [[id(0)]];
sampler m_96 [[id(127)]];
device _138* m_97 [[id(128)]];
constant _139* m_98 [[id(129)]];
sampler m_99 [[id(130)]];
};
struct spvDescriptorSetBuffer2
{
constant uint* spvBufferSizeConstants [[id(0)]];
device _140* m_100 [[id(0)]];
};
struct spvDescriptorSetBuffer3
{
texture2d<float> m_101 [[id(0)]];
};
struct fragment_transmission_out
{
float4 m_8 [[color(0)]];
};
struct fragment_transmission_in
{
float3 m_3 [[user(locn0)]];
float3 m_4 [[user(locn1)]];
float2 m_5 [[user(locn2)]];
uint m_6 [[user(locn3)]];
float m_7 [[user(locn4), flat]];
};
fragment fragment_transmission_out fragment_transmission(fragment_transmission_in in [[stage_in]], constant spvDescriptorSetBuffer0& spvDescriptorSet0 [[buffer(0)]], constant spvDescriptorSetBuffer2& spvDescriptorSet2 [[buffer(2)]], constant spvDescriptorSetBuffer3& spvDescriptorSet3 [[buffer(3)]], constant uint* spvBufferSizeConstants [[buffer(6)]], constant _137& _94 [[buffer(4)]])
{
fragment_transmission_out out = {};
constant uint& spvDescriptorSet2_m_100BufferSize = spvDescriptorSet2.spvBufferSizeConstants[0];
uint _374 = (spvDescriptorSet2_m_100BufferSize - 0) / 32;
float4 _393;
if ((*spvDescriptorSet0.m_97)._m0[in.m_6]._m0._m0 == (-1))
{
_393 = (*spvDescriptorSet0.m_97)._m0[in.m_6]._m4;
}
else
{
uint _389 = uint((*spvDescriptorSet0.m_97)._m0[in.m_6]._m0._m0);
_393 = (*spvDescriptorSet0.m_97)._m0[in.m_6]._m4 * spvDescriptorSet0.m_95[_389].sample(spvDescriptorSet0.m_96, in.m_5);
}
float _411;
if ((*spvDescriptorSet0.m_97)._m0[in.m_6]._m0._m5 == (-1))
{
_411 = (*spvDescriptorSet0.m_97)._m0[in.m_6]._m9;
}
else
{
uint _406 = uint((*spvDescriptorSet0.m_97)._m0[in.m_6]._m0._m5);
_411 = (*spvDescriptorSet0.m_97)._m0[in.m_6]._m9 * spvDescriptorSet0.m_95[_406].sample(spvDescriptorSet0.m_96, in.m_5).x;
}
float _417 = _94._m0._m1.x - in.m_3.x;
float _420 = _94._m0._m1.y - in.m_3.y;
float _423 = _94._m0._m1.z - in.m_3.z;
float _430 = 1.0 / sqrt(((_417 * _417) + (_420 * _420)) + (_423 * _423));
float _431 = _417 * _430;
float _432 = _420 * _430;
float _433 = _423 * _430;
float3 _434 = float3(_431, _432, _433);
float3 _448 = in.m_4 * (1.0 / sqrt(((in.m_4.x * in.m_4.x) + (in.m_4.y * in.m_4.y)) + (in.m_4.z * in.m_4.z)));
float3 _519;
if ((*spvDescriptorSet0.m_97)._m0[in.m_6]._m0._m2 == (-1))
{
_519 = _448;
}
else
{
uint _459 = uint((*spvDescriptorSet0.m_97)._m0[in.m_6]._m0._m2);
float4 _1430 = spvDescriptorSet0.m_95[_459].sample(spvDescriptorSet0.m_96, in.m_5);
float3 _1434 = float3(_1430.x * 2.007874011993408203125, _1430.y * 2.007874011993408203125, _1430.z * 2.007874011993408203125) - float3(1.007874011993408203125);
float3 _476 = float3(-_417, -_420, -_423);
float3 _1531 = dfdx(_476);
float3 _1534 = dfdy(_476);
float2 _1538 = dfdx(in.m_5);
float2 _1541 = dfdy(in.m_5);
float _1442 = _1534.y;
float _1443 = _448.z;
float _1445 = _448.y;
float _1446 = _1534.z;
float _1448 = (_1442 * _1443) - (_1445 * _1446);
float _1450 = _448.x;
float _1453 = _1534.x;
float _1455 = (_1446 * _1450) - (_1443 * _1453);
float _1462 = (_1453 * _1445) - (_1450 * _1442);
float _1464 = _1531.z;
float _1466 = _1531.y;
float _1469 = (_1445 * _1464) - (_1466 * _1443);
float _1471 = _1531.x;
float _1476 = (_1443 * _1471) - (_1464 * _1450);
float _1483 = (_1450 * _1466) - (_1471 * _1445);
float _1484 = _1538.x;
float _1488 = _1541.x;
float _1492 = (_1448 * _1484) + (_1469 * _1488);
float _1493 = (_1455 * _1484) + (_1476 * _1488);
float _1494 = (_1462 * _1484) + (_1483 * _1488);
float _1495 = _1538.y;
float _1499 = _1541.y;
float _1503 = (_1448 * _1495) + (_1469 * _1499);
float _1504 = (_1455 * _1495) + (_1476 * _1499);
float _1505 = (_1462 * _1495) + (_1483 * _1499);
float _1518 = 1.0 / sqrt(fast::max(((_1492 * _1492) + (_1493 * _1493)) + (_1494 * _1494), ((_1503 * _1503) + (_1504 * _1504)) + (_1505 * _1505)));
float _479 = _1434.x;
float _487 = _1434.y;
float _498 = _1434.z;
float _505 = (_1450 * _498) + (((_1503 * _1518) * _487) + ((_1492 * _1518) * _479));
float _506 = (_1445 * _498) + (((_1504 * _1518) * _487) + ((_1493 * _1518) * _479));
float _507 = (_1443 * _498) + (((_1505 * _1518) * _487) + ((_1494 * _1518) * _479));
float _514 = 1.0 / sqrt(((_505 * _505) + (_506 * _506)) + (_507 * _507));
_519 = float3(_505 * _514, _506 * _514, _507 * _514);
}
float _541;
float _542;
if ((*spvDescriptorSet0.m_97)._m0[in.m_6]._m0._m1 == (-1))
{
_541 = (*spvDescriptorSet0.m_97)._m0[in.m_6]._m2;
_542 = (*spvDescriptorSet0.m_97)._m0[in.m_6]._m1;
}
else
{
uint _534 = uint((*spvDescriptorSet0.m_97)._m0[in.m_6]._m0._m1);
float4 _1546 = spvDescriptorSet0.m_95[_534].sample(spvDescriptorSet0.m_96, in.m_5);
_541 = (*spvDescriptorSet0.m_97)._m0[in.m_6]._m2 * _1546.y;
_542 = (*spvDescriptorSet0.m_97)._m0[in.m_6]._m1 * _1546.z;
}
float3 _564;
if ((*spvDescriptorSet0.m_97)._m0[in.m_6]._m0._m8 == (-1))
{
_564 = (*spvDescriptorSet0.m_97)._m0[in.m_6]._m14;
}
else
{
uint _556 = uint((*spvDescriptorSet0.m_97)._m0[in.m_6]._m0._m8);
_564 = (*spvDescriptorSet0.m_97)._m0[in.m_6]._m14 * float3(spvDescriptorSet0.m_95[_556].sample(spvDescriptorSet0.m_96, in.m_5).xyz);
}
float _582;
if ((*spvDescriptorSet0.m_97)._m0[in.m_6]._m0._m7 == (-1))
{
_582 = (*spvDescriptorSet0.m_97)._m0[in.m_6]._m13;
}
else
{
uint _577 = uint((*spvDescriptorSet0.m_97)._m0[in.m_6]._m0._m7);
_582 = (*spvDescriptorSet0.m_97)._m0[in.m_6]._m13 * spvDescriptorSet0.m_95[_577].sample(spvDescriptorSet0.m_96, in.m_5).w;
}
float3 _611;
if ((*spvDescriptorSet0.m_97)._m0[in.m_6]._m0._m3 == (-1))
{
_611 = (*spvDescriptorSet0.m_97)._m0[in.m_6]._m5;
}
else
{
uint _603 = uint((*spvDescriptorSet0.m_97)._m0[in.m_6]._m0._m3);
_611 = (*spvDescriptorSet0.m_97)._m0[in.m_6]._m5 * float3(spvDescriptorSet0.m_95[_603].sample(spvDescriptorSet0.m_96, in.m_5).xyz);
}
uint _628;
uint _627 = 0u;
for (;;)
{
if (!(_627 < _374))
{
float _679;
if ((*spvDescriptorSet0.m_97)._m0[in.m_6]._m0._m6 == (-1))
{
_679 = (*spvDescriptorSet0.m_97)._m0[in.m_6]._m10;
}
else
{
uint _674 = uint((*spvDescriptorSet0.m_97)._m0[in.m_6]._m0._m6);
_679 = (*spvDescriptorSet0.m_97)._m0[in.m_6]._m10 * spvDescriptorSet0.m_95[_674].sample(spvDescriptorSet0.m_96, in.m_5).y;
}
float3 _2842 = -_434;
float _2871 = 1.0 / (*spvDescriptorSet0.m_97)._m0[in.m_6]._m8;
float _2873 = _2842.x;
float _2876 = _2842.y;
float _2880 = _2842.z;
float _2882 = ((_519.x * _2873) + (_519.y * _2876)) + (_519.z * _2880);
float _2896 = (_2871 * _2882) + sqrt(1.0 - ((_2871 * _2871) * (1.0 - (_2882 * _2882))));
float _2903 = (_2871 * _2873) - (_2896 * _519.x);
float _2904 = (_2871 * _2876) - (_2896 * _519.y);
float _2905 = (_2871 * _2880) - (_2896 * _519.z);
float _2844 = _679 * in.m_7;
float _2857 = 1.0 / sqrt(((_2903 * _2903) + (_2904 * _2904)) + (_2905 * _2905));
float _699 = in.m_3.x + ((_2903 * _2857) * _2844);
float _702 = in.m_3.y + ((_2904 * _2857) * _2844);
float _705 = in.m_3.z + ((_2905 * _2857) * _2844);
float _742 = _94._m0._m0._m0._m3.w + ((_94._m0._m0._m0._m2.w * _705) + ((_94._m0._m0._m0._m1.w * _702) + (_94._m0._m0._m0._m0.w * _699)));
float3 _759 = float3(spvDescriptorSet3.m_101.sample(spvDescriptorSet0.m_99, float2((((_94._m0._m0._m0._m3.x + ((_94._m0._m0._m0._m2.x * _705) + ((_94._m0._m0._m0._m1.x * _702) + (_94._m0._m0._m0._m0.x * _699)))) / _742) + 1.0) * 0.5, (((_94._m0._m0._m0._m3.y + ((_94._m0._m0._m0._m2.y * _705) + ((_94._m0._m0._m0._m1.y * _702) + (_94._m0._m0._m0._m0.y * _699)))) / _742) + 1.0) * 0.5), level(log2(float(_94._m0._m2.x)) * (_541 * fast::min(fast::max(((*spvDescriptorSet0.m_97)._m0[in.m_6]._m8 * 2.0) - 2.0, 0.0), 1.0)))).xyz);
float3 _2949;
if ((*spvDescriptorSet0.m_97)._m0[in.m_6]._m11 == as_type<float>(0x7f800000u /* inf */))
{
_2949 = _759;
}
else
{
float3 _2958 = log((*spvDescriptorSet0.m_97)._m0[in.m_6]._m12);
_2949 = float3(exp((-((-_2958.x) / (*spvDescriptorSet0.m_97)._m0[in.m_6]._m11)) * _2844), exp((-((-_2958.y) / (*spvDescriptorSet0.m_97)._m0[in.m_6]._m11)) * _2844), exp((-((-_2958.z) / (*spvDescriptorSet0.m_97)._m0[in.m_6]._m11)) * _2844)) * _759;
}
float4 _2963 = spvDescriptorSet0.m_95[(*spvDescriptorSet0.m_98)._m0._m5].sample(spvDescriptorSet0.m_99, float2(((_519.x * _431) + (_519.y * _432)) + (_519.z * _433), _541));
float _778 = _2963.x;
float _2970 = ((*spvDescriptorSet0.m_97)._m0[in.m_6]._m8 - 1.0) / ((*spvDescriptorSet0.m_97)._m0[in.m_6]._m8 + 1.0);
float _2971 = _2970 * _2970;
float _2980 = (_2971 * _564.x) * _582;
float _2981 = (_2971 * _564.y) * _582;
float _2982 = (_2971 * _564.z) * _582;
float _789 = (_582 + ((1.0 - _582) * _542)) * _2963.y;
out.m_8 = float4(((_411 * (((1.0 - (((_2980 + ((_393.x - _2980) * _542)) * _778) + _789)) * _2949.x) * _393.x)) * _411) + _611.x, ((_411 * (((1.0 - (((_2981 + ((_393.y - _2981) * _542)) * _778) + _789)) * _2949.y) * _393.y)) * _411) + _611.y, ((_411 * (((1.0 - (((_2982 + ((_393.z - _2982) * _542)) * _778) + _789)) * _2949.z) * _393.z)) * _411) + _611.z, 1.0);
break;
}
_628 = _627 + 1u;
_627 = _628;
continue;
}
return out;
}
End MSL
Original GLSL extraction error: Buffer block cannot be expressed as any of std430, std140, scalar, even with enhanced layouts. You can try flattening this block to support a more flexible layout.
Partially converted GLSL:
#version 450
#extension GL_EXT_nonuniform_qualifier : require
struct _75
{
vec3 _m0;
vec4 _m1;
};
struct _76
{
int _m0;
int _m1;
int _m2;
int _m3;
int _m4;
int _m5;
int _m6;
int _m7;
int _m8;
};
struct _77
{
_76 _m0;
float _m1;
float _m2;
float _m3;
vec4 _m4;
vec3 _m5;
float _m6;
float _m7;
float _m8;
float _m9;
float _m10;
float _m11;
vec3 _m12;
float _m13;
vec3 _m14;
};
struct _82
{
vec3 _m0;
vec3 _m1;
vec2 _m2;
uvec2 _m3;
uint _m4;
uint _m5;
};
struct _91
{
vec4 _m0;
vec4 _m1;
vec4 _m2;
vec4 _m3;
};
struct _92
{
_91 _m0;
};
struct _93
{
_92 _m0;
vec3 _m1;
uvec2 _m2;
uvec2 _m3;
};
End GLSL
[mvk-error] VK_ERROR_INITIALIZATION_FAILED: Shader library compile failed (Error code 3):
program_source:129:201: error: cannot assign resource locations to 'spvDescriptorSet2'
fragment fragment_transmission_out fragment_transmission(fragment_transmission_in in [[stage_in]], constant spvDescriptorSetBuffer0& spvDescriptorSet0 [[buffer(0)]], constant spvDescriptorSetBuffer2& spvDescriptorSet2 [[buffer(2)]], constant spvDescriptorSetBuffer3& spvDescriptorSet3 [[buffer(3)]], constant uint* spvBufferSizeConstants [[buffer(6)]], constant _137& _94 [[buffer(4)]])
^
program_source:107:18: note: attribute 'id' set location to 0, but minimum is 1
device _140* m_100 [[id(0)]];
^ ~~~~~
.
[mvk-error] VK_ERROR_INVALID_SHADER_NV: Fragment shader function could not be compiled into pipeline. See previous logged error.
[mvk-info] Converting SPIR-V:
; SPIR-V
; Version: 1.3
; Generator: Embark Studios Rust GPU Compiler Backend; 0
; Bound: 46
; Schema: 0
OpCapability RuntimeDescriptorArray
OpCapability Shader
OpExtension "SPV_EXT_descriptor_indexing"
OpMemoryModel Logical Simple
OpEntryPoint Vertex %1 "fullscreen_tri" %2 %3 %4
OpDecorate %4 BuiltIn Position
OpDecorate %2 BuiltIn VertexIndex
OpDecorate %3 Location 0
%11 = OpTypeFloat 32
%12 = OpTypeVector %11 4
%13 = OpTypeVector %11 2
%14 = OpTypePointer Output %13
%15 = OpTypePointer Output %12
%16 = OpConstant %11 0
%17 = OpConstant %11 1
%18 = OpTypeInt 32 1
%19 = OpTypeVoid
%20 = OpTypePointer Input %18
%21 = OpTypeFunction %19
%4 = OpVariable %15 Output
%2 = OpVariable %20 Input
%3 = OpVariable %14 Output
%22 = OpConstant %11 2
%23 = OpConstant %18 1
%25 = OpConstant %18 2
%1 = OpFunction %19 None %21
%27 = OpLabel
%28 = OpLoad %18 %2
%30 = OpShiftLeftLogical %18 %28 %23
%31 = OpBitwiseAnd %18 %30 %25
%32 = OpConvertSToF %11 %31
%33 = OpBitwiseAnd %18 %28 %25
%34 = OpConvertSToF %11 %33
%35 = OpCompositeConstruct %13 %32 %34
OpStore %3 %35
%36 = OpLoad %13 %3
%37 = OpCompositeExtract %11 %36 0
%38 = OpFMul %11 %22 %37
%39 = OpCompositeExtract %11 %36 1
%40 = OpFMul %11 %22 %39
%42 = OpFSub %11 %38 %17
%44 = OpFSub %11 %40 %17
%45 = OpCompositeConstruct %12 %42 %44 %16 %17
OpStore %4 %45
OpReturn
OpFunctionEnd
End SPIR-V
Converted MSL:
#include <metal_stdlib>
#include <simd/simd.h>
using namespace metal;
struct fullscreen_tri_out
{
float2 m_3 [[user(locn0)]];
float4 gl_Position [[position]];
};
vertex fullscreen_tri_out fullscreen_tri(uint gl_VertexIndex [[vertex_id]])
{
fullscreen_tri_out out = {};
out.m_3 = float2(float((int(gl_VertexIndex) << 1) & 2), float(int(gl_VertexIndex) & 2));
out.gl_Position = float4((2.0 * out.m_3.x) - 1.0, (2.0 * out.m_3.y) - 1.0, 0.0, 1.0);
out.gl_Position.y = -(out.gl_Position.y); // Invert Y-axis for Metal
return out;
}
End MSL
Estimated original GLSL:
#version 450
#extension GL_EXT_nonuniform_qualifier : require
out gl_PerVertex
{
vec4 gl_Position;
};
layout(location = 0) out vec2 _3;
void main()
{
_3 = vec2(float((gl_VertexIndex << 1) & 2), float(gl_VertexIndex & 2));
gl_Position = vec4((2.0 * _3.x) - 1.0, (2.0 * _3.y) - 1.0, 0.0, 1.0);
}
End GLSL
[mvk-info] Converting SPIR-V:
; SPIR-V
; Version: 1.3
; Generator: Embark Studios Rust GPU Compiler Backend; 0
; Bound: 219
; Schema: 0
OpCapability RuntimeDescriptorArray
OpCapability Shader
OpExtension "SPV_EXT_descriptor_indexing"
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical Simple
OpEntryPoint Fragment %2 "fragment_tonemap" %3 %4
OpExecutionMode %2 OriginUpperLeft
OpMemberDecorate %20 0 Offset 0
OpMemberDecorate %20 1 Offset 4
OpMemberDecorate %20 2 Offset 8
OpMemberDecorate %20 3 Offset 12
OpMemberDecorate %20 4 Offset 16
OpMemberDecorate %20 5 Offset 20
OpMemberDecorate %20 6 Offset 24
OpDecorate %23 DescriptorSet 0
OpDecorate %23 Binding 1
OpDecorate %4 Location 0
OpDecorate %3 Location 0
OpDecorate %24 DescriptorSet 1
OpDecorate %24 Binding 0
OpDecorate %26 Block
OpMemberDecorate %26 0 Offset 0
%27 = OpTypeFloat 32
%28 = OpTypeVector %27 4
%29 = OpTypeImage %27 2D 2 0 0 1 Unknown
%30 = OpTypePointer UniformConstant %29
%31 = OpTypeSampler
%32 = OpTypeVector %27 2
%34 = OpTypePointer UniformConstant %31
%35 = OpTypePointer Input %32
%36 = OpTypePointer Output %28
%37 = OpTypeSampledImage %29
%38 = OpConstant %27 0
%39 = OpTypeInt 32 0
%40 = OpConstant %39 0
%41 = OpTypeVector %27 3
%20 = OpTypeStruct %27 %27 %27 %27 %27 %27 %27
%43 = OpTypePointer PushConstant %20
%44 = OpConstant %27 1
%46 = OpConstantComposite %41 %38 %38 %38
%47 = OpTypeVoid
%48 = OpTypeFunction %47
%23 = OpVariable %34 UniformConstant
%4 = OpVariable %36 Output
%3 = OpVariable %35 Input
%24 = OpVariable %30 UniformConstant
%26 = OpTypeStruct %20
%49 = OpTypePointer PushConstant %26
%25 = OpVariable %49 PushConstant
%2 = OpFunction %47 None %48
%128 = OpLabel
%129 = OpLoad %32 %3
%130 = OpAccessChain %43 %25 %40
%131 = OpLoad %31 %23
%146 = OpLoad %29 %24
%147 = OpSampledImage %37 %146 %131
%148 = OpImageSampleImplicitLod %28 %147 %129
%133 = OpCompositeExtract %27 %148 0
%134 = OpCompositeExtract %27 %148 1
%135 = OpCompositeExtract %27 %148 2
%137 = OpLoad %20 %130
%155 = OpExtInst %27 %1 FMax %134 %135
%156 = OpExtInst %27 %1 FMax %133 %155
%158 = OpFDiv %27 %133 %156
%160 = OpFDiv %27 %134 %156
%162 = OpFDiv %27 %135 %156
%210 = OpCompositeExtract %27 %137 0
%211 = OpExtInst %27 %1 Pow %156 %210
%212 = OpCompositeExtract %27 %137 3
%213 = OpExtInst %27 %1 Pow %211 %212
%214 = OpCompositeExtract %27 %137 1
%215 = OpFMul %27 %213 %214
%216 = OpCompositeExtract %27 %137 2
%217 = OpFAdd %27 %215 %216
%218 = OpFDiv %27 %211 %217
%164 = OpCompositeExtract %27 %137 5
%165 = OpCompositeExtract %27 %137 6
%166 = OpFDiv %27 %164 %165
%167 = OpExtInst %27 %1 Pow %158 %166
%168 = OpExtInst %27 %1 Pow %160 %166
%169 = OpExtInst %27 %1 Pow %162 %166
%170 = OpCompositeExtract %27 %137 4
%171 = OpExtInst %27 %1 Pow %218 %170
%173 = OpFSub %27 %44 %167
%175 = OpFSub %27 %44 %168
%177 = OpFSub %27 %44 %169
%178 = OpFMul %27 %173 %171
%179 = OpFMul %27 %175 %171
%180 = OpFMul %27 %177 %171
%181 = OpFAdd %27 %167 %178
%182 = OpFAdd %27 %168 %179
%183 = OpFAdd %27 %169 %180
%185 = OpExtInst %27 %1 Pow %181 %165
%186 = OpExtInst %27 %1 Pow %182 %165
%187 = OpExtInst %27 %1 Pow %183 %165
%188 = OpFMul %27 %185 %218
%189 = OpFMul %27 %186 %218
%190 = OpFMul %27 %187 %218
%192 = OpExtInst %27 %1 FMin %188 %44
%194 = OpExtInst %27 %1 FMin %189 %44
%196 = OpExtInst %27 %1 FMin %190 %44
%205 = OpCompositeConstruct %41 %192 %194 %196
%206 = OpExtInst %41 %1 FMax %205 %46
%139 = OpCompositeExtract %27 %206 0
%140 = OpCompositeExtract %27 %206 1
%141 = OpCompositeExtract %27 %206 2
%142 = OpCompositeConstruct %28 %139 %140 %141 %44
OpStore %4 %142
OpReturn
OpFunctionEnd
End SPIR-V
Converted MSL:
#include <metal_stdlib>
#include <simd/simd.h>
using namespace metal;
struct _20
{
float _m0;
float _m1;
float _m2;
float _m3;
float _m4;
float _m5;
float _m6;
};
struct _26
{
_20 _m0;
};
struct spvDescriptorSetBuffer0
{
array<texture2d<float>, 127> _m0_pad [[id(0)]];
sampler m_23 [[id(127)]];
};
struct spvDescriptorSetBuffer1
{
texture2d<float> m_24 [[id(0)]];
};
struct fragment_tonemap_out
{
float4 m_4 [[color(0)]];
};
struct fragment_tonemap_in
{
float2 m_3 [[user(locn0)]];
};
fragment fragment_tonemap_out fragment_tonemap(fragment_tonemap_in in [[stage_in]], constant spvDescriptorSetBuffer0& spvDescriptorSet0 [[buffer(0)]], constant spvDescriptorSetBuffer1& spvDescriptorSet1 [[buffer(1)]], constant _26& _25 [[buffer(2)]])
{
fragment_tonemap_out out = {};
float4 _148 = spvDescriptorSet1.m_24.sample(spvDescriptorSet0.m_23, in.m_3);
float _133 = _148.x;
float _134 = _148.y;
float _135 = _148.z;
float _156 = fast::max(_133, fast::max(_134, _135));
float _211 = pow(_156, _25._m0._m0);
float _218 = _211 / ((pow(_211, _25._m0._m3) * _25._m0._m1) + _25._m0._m2);
float _166 = _25._m0._m5 / _25._m0._m6;
float _167 = pow(_133 / _156, _166);
float _168 = pow(_134 / _156, _166);
float _169 = pow(_135 / _156, _166);
float _171 = pow(_218, _25._m0._m4);
out.m_4 = float4(fast::max(float3(fast::min(pow(_167 + ((1.0 - _167) * _171), _25._m0._m6) * _218, 1.0), fast::min(pow(_168 + ((1.0 - _168) * _171), _25._m0._m6) * _218, 1.0), fast::min(pow(_169 + ((1.0 - _169) * _171), _25._m0._m6) * _218, 1.0)), float3(0.0)), 1.0);
return out;
}
End MSL
Estimated original GLSL:
#version 450
#extension GL_EXT_nonuniform_qualifier : require
struct _20
{
float _m0;
float _m1;
float _m2;
float _m3;
float _m4;
float _m5;
float _m6;
};
layout(push_constant, std430) uniform _26_25
{
_20 _m0;
} _25;
layout(set = 0, binding = 1) uniform sampler _23;
layout(set = 1, binding = 0) uniform texture2D _24;
layout(location = 0) out vec4 _4;
layout(location = 0) in vec2 _3;
void main()
{
vec4 _148 = texture(sampler2D(_24, _23), _3);
float _133 = _148.x;
float _134 = _148.y;
float _135 = _148.z;
float _156 = max(_133, max(_134, _135));
float _211 = pow(_156, _25._m0._m0);
float _218 = _211 / ((pow(_211, _25._m0._m3) * _25._m0._m1) + _25._m0._m2);
float _166 = _25._m0._m5 / _25._m0._m6;
float _167 = pow(_133 / _156, _166);
float _168 = pow(_134 / _156, _166);
float _169 = pow(_135 / _156, _166);
float _171 = pow(_218, _25._m0._m4);
_4 = vec4(max(vec3(min(pow(_167 + ((1.0 - _167) * _171), _25._m0._m6) * _218, 1.0), min(pow(_168 + ((1.0 - _168) * _171), _25._m0._m6) * _218, 1.0), min(pow(_169 + ((1.0 - _169) * _171), _25._m0._m6) * _218, 1.0)), vec3(0.0)), 1.0);
}
End GLSL
Error: ERROR_INVALID_SHADER_NV
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment