.travis.yml | 2 BUILD.md | 1 CMakeLists.txt | 8 debian/changelog | 13 debian/patches/demos-mir.diff | 22 debian/patches/loader-mir.diff | 14 demos/cube.c | 8 demos/cube.cpp | 261 external/glslang/CMakeLists.txt | 5 external/glslang/OGLCompilersDLL/CMakeLists.txt | 9 external/glslang/SPIRV/CMakeLists.txt | 14 external/glslang/SPIRV/GLSL.ext.AMD.h | 2 external/glslang/SPIRV/GLSL.ext.KHR.h | 3 external/glslang/SPIRV/GlslangToSpv.cpp | 46 external/glslang/SPIRV/doc.cpp | 2 external/glslang/SPIRV/spirv.hpp | 6 external/glslang/StandAlone/CMakeLists.txt | 13 external/glslang/StandAlone/StandAlone.cpp | 628 external/glslang/Test/300.vert | 17 external/glslang/Test/450.frag | 2 external/glslang/Test/450.geom | 2 external/glslang/Test/450.tese | 7 external/glslang/Test/baseResults/300.vert.out | 21 external/glslang/Test/baseResults/450.frag.out | 5 external/glslang/Test/baseResults/450.geom.out | 5 external/glslang/Test/baseResults/450.tese.out | 25 external/glslang/Test/baseResults/glsl.-D-U.frag.out | 55 external/glslang/Test/baseResults/hlsl.-D-U.frag.out | 65 external/glslang/Test/baseResults/hlsl.array.frag.out | 9 external/glslang/Test/baseResults/hlsl.buffer.frag.out | 406 external/glslang/Test/baseResults/hlsl.clipdistance-1.vert.out | 194 external/glslang/Test/baseResults/hlsl.clipdistance-2.vert.out | 561 external/glslang/Test/baseResults/hlsl.clipdistance-3.vert.out | 229 external/glslang/Test/baseResults/hlsl.clipdistance-4.vert.out | 386 external/glslang/Test/baseResults/hlsl.clipdistance-5.vert.out | 435 external/glslang/Test/baseResults/hlsl.constructArray.vert.out | 381 external/glslang/Test/baseResults/hlsl.entry-in.frag.out | 17 external/glslang/Test/baseResults/hlsl.getsampleposition.dx10.frag.out | 9 external/glslang/Test/baseResults/hlsl.hull.3.tesc.out | 382 external/glslang/Test/baseResults/hlsl.hull.void.tesc.out | 3 external/glslang/Test/baseResults/hlsl.inoutquals.frag.out | 483 external/glslang/Test/baseResults/hlsl.intrinsics.comp.out | 576 external/glslang/Test/baseResults/hlsl.intrinsics.double.frag.out | 72 external/glslang/Test/baseResults/hlsl.intrinsics.evalfns.frag.out | 9 external/glslang/Test/baseResults/hlsl.intrinsics.frag.out | 4980 +-- external/glslang/Test/baseResults/hlsl.intrinsics.negative.frag.out | 32 external/glslang/Test/baseResults/hlsl.intrinsics.vert.out | 2152 - external/glslang/Test/baseResults/hlsl.precedence2.frag.out | 36 external/glslang/Test/baseResults/hlsl.reflection.vert.out | 32 external/glslang/Test/baseResults/hlsl.scalar2matrix.frag.out | 506 external/glslang/Test/baseResults/hlsl.semantic.geom.out | 179 external/glslang/Test/baseResults/hlsl.semantic.vert.out | 278 external/glslang/Test/baseResults/hlsl.struct.frag.out | 51 external/glslang/Test/baseResults/hlsl.struct.split.assign.frag.out | 9 external/glslang/Test/baseResults/hlsl.structbuffer.append.fn.frag.out | 9 external/glslang/Test/baseResults/hlsl.structbuffer.append.frag.out | 9 external/glslang/Test/baseResults/hlsl.structbuffer.atomics.frag.out | 9 external/glslang/Test/baseResults/hlsl.structbuffer.byte.frag.out | 9 external/glslang/Test/baseResults/hlsl.structbuffer.coherent.frag.out | 9 external/glslang/Test/baseResults/hlsl.structbuffer.fn.frag.out | 9 external/glslang/Test/baseResults/hlsl.structbuffer.frag.out | 9 external/glslang/Test/baseResults/hlsl.structbuffer.incdec.frag.out | 9 external/glslang/Test/baseResults/hlsl.structbuffer.rw.frag.out | 9 external/glslang/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out | 9 external/glslang/Test/baseResults/hlsl.switch.frag.out | 18 external/glslang/Test/baseResults/hlsl.synthesizeInput.frag.out | 151 external/glslang/Test/baseResults/hlsl.target.frag.out | 188 external/glslang/Test/baseResults/hlsl.targetStruct1.frag.out | 277 external/glslang/Test/baseResults/hlsl.targetStruct2.frag.out | 277 external/glslang/Test/baseResults/hlsl.type.half.frag.out | 67 external/glslang/Test/baseResults/hlsl.type.identifier.frag.out | 111 external/glslang/Test/baseResults/spv.450.tesc.out | 3 external/glslang/Test/baseResults/spv.OVR_multiview.vert.out | 57 external/glslang/Test/baseResults/spv.arbPostDepthCoverage.frag.out | 43 external/glslang/Test/baseResults/spv.arbPostDepthCoverage_Error.frag.out | 7 external/glslang/Test/baseResults/spv.extPostDepthCoverage.frag.out | 23 external/glslang/Test/baseResults/spv.extPostDepthCoverage_Error.frag.out | 4 external/glslang/Test/baseResults/spv.shaderStencilExport.frag.out | 26 external/glslang/Test/baseResults/spv.specConstant.vert.out | 6 external/glslang/Test/baseResults/spv.texture.sampler.transform.frag.out | 29 external/glslang/Test/glsl.-D-U.frag | 32 external/glslang/Test/hlsl.-D-U.frag | 31 external/glslang/Test/hlsl.buffer.frag | 39 external/glslang/Test/hlsl.clipdistance-1.vert | 8 external/glslang/Test/hlsl.clipdistance-2.vert | 15 external/glslang/Test/hlsl.clipdistance-3.vert | 13 external/glslang/Test/hlsl.clipdistance-4.vert | 21 external/glslang/Test/hlsl.clipdistance-5.vert | 21 external/glslang/Test/hlsl.constructArray.vert | 10 external/glslang/Test/hlsl.hull.3.tesc | 39 external/glslang/Test/hlsl.hull.void.tesc | 2 external/glslang/Test/hlsl.inoutquals.frag | 5 external/glslang/Test/hlsl.reflection.vert | 45 external/glslang/Test/hlsl.scalar2matrix.frag | 28 external/glslang/Test/hlsl.synthesizeInput.frag | 9 external/glslang/Test/hlsl.target.frag | 10 external/glslang/Test/hlsl.targetStruct1.frag | 19 external/glslang/Test/hlsl.targetStruct2.frag | 19 external/glslang/Test/hlsl.type.identifier.frag | 1 external/glslang/Test/runtests | 18 external/glslang/Test/spv.OVR_multiview.vert | 9 external/glslang/Test/spv.arbPostDepthCoverage.frag | 13 external/glslang/Test/spv.arbPostDepthCoverage_Error.frag | 12 external/glslang/Test/spv.extPostDepthCoverage.frag | 9 external/glslang/Test/spv.extPostDepthCoverage_Error.frag | 9 external/glslang/Test/spv.shaderStencilExport.frag | 8 external/glslang/Test/spv.targetOpenGL.vert | 9 external/glslang/Test/spv.targetVulkan.vert | 9 external/glslang/glslang/CMakeLists.txt | 19 external/glslang/glslang/Include/BaseTypes.h | 3 external/glslang/glslang/Include/Types.h | 31 external/glslang/glslang/Include/intermediate.h | 13 external/glslang/glslang/MachineIndependent/Initialize.cpp | 47 external/glslang/glslang/MachineIndependent/Intermediate.cpp | 45 external/glslang/glslang/MachineIndependent/ParseHelper.cpp | 50 external/glslang/glslang/MachineIndependent/ParseHelper.h | 2 external/glslang/glslang/MachineIndependent/Scan.cpp | 6 external/glslang/glslang/MachineIndependent/ShaderLang.cpp | 132 external/glslang/glslang/MachineIndependent/Versions.cpp | 28 external/glslang/glslang/MachineIndependent/Versions.h | 33 external/glslang/glslang/MachineIndependent/intermOut.cpp | 2 external/glslang/glslang/MachineIndependent/iomapper.cpp | 10 external/glslang/glslang/MachineIndependent/linkValidate.cpp | 12 external/glslang/glslang/MachineIndependent/localintermediate.h | 7 external/glslang/glslang/MachineIndependent/reflection.cpp | 4 external/glslang/glslang/OSDependent/Unix/CMakeLists.txt | 9 external/glslang/glslang/OSDependent/Windows/CMakeLists.txt | 9 external/glslang/glslang/Public/ShaderLang.h | 68 external/glslang/gtests/CMakeLists.txt | 6 external/glslang/gtests/Hlsl.FromFile.cpp | 12 external/glslang/gtests/Spv.FromFile.cpp | 8 external/glslang/hlsl/CMakeLists.txt | 9 external/glslang/hlsl/hlslGrammar.cpp | 165 external/glslang/hlsl/hlslGrammar.h | 5 external/glslang/hlsl/hlslParseHelper.cpp | 522 external/glslang/hlsl/hlslParseHelper.h | 21 external/glslang/hlsl/hlslScanContext.cpp | 2 external/spirv-tools/.travis.yml | 21 external/spirv-tools/CHANGES | 22 external/spirv-tools/CMakeLists.txt | 23 external/spirv-tools/external/spirv-headers/include/spirv/1.0/spirv.core.grammar.json | 149 external/spirv-tools/external/spirv-headers/include/spirv/1.0/spirv.h | 20 external/spirv-tools/external/spirv-headers/include/spirv/1.0/spirv.hpp | 20 external/spirv-tools/external/spirv-headers/include/spirv/1.0/spirv.hpp11 | 20 external/spirv-tools/external/spirv-headers/include/spirv/1.0/spirv.json | 24 external/spirv-tools/external/spirv-headers/include/spirv/1.0/spirv.lua | 20 external/spirv-tools/external/spirv-headers/include/spirv/1.0/spirv.py | 20 external/spirv-tools/external/spirv-headers/include/spirv/1.1/spirv.core.grammar.json | 149 external/spirv-tools/external/spirv-headers/include/spirv/1.1/spirv.h | 20 external/spirv-tools/external/spirv-headers/include/spirv/1.1/spirv.hpp | 20 external/spirv-tools/external/spirv-headers/include/spirv/1.1/spirv.hpp11 | 20 external/spirv-tools/external/spirv-headers/include/spirv/1.1/spirv.json | 24 external/spirv-tools/external/spirv-headers/include/spirv/1.1/spirv.lua | 20 external/spirv-tools/external/spirv-headers/include/spirv/1.1/spirv.py | 20 external/spirv-tools/external/spirv-headers/include/spirv/1.2/spirv.core.grammar.json | 149 external/spirv-tools/external/spirv-headers/include/spirv/1.2/spirv.h | 20 external/spirv-tools/external/spirv-headers/include/spirv/1.2/spirv.hpp | 20 external/spirv-tools/external/spirv-headers/include/spirv/1.2/spirv.hpp11 | 20 external/spirv-tools/external/spirv-headers/include/spirv/1.2/spirv.json | 24 external/spirv-tools/external/spirv-headers/include/spirv/1.2/spirv.lua | 20 external/spirv-tools/external/spirv-headers/include/spirv/1.2/spirv.py | 20 external/spirv-tools/external/spirv-headers/include/spirv/spir-v.xml | 5 external/spirv-tools/include/spirv-tools/libspirv.h | 3 external/spirv-tools/include/spirv-tools/markv.h | 91 external/spirv-tools/include/spirv-tools/optimizer.hpp | 46 external/spirv-tools/source/CMakeLists.txt | 14 external/spirv-tools/source/assembly_grammar.cpp | 4 external/spirv-tools/source/assembly_grammar.h | 16 external/spirv-tools/source/binary.cpp | 67 external/spirv-tools/source/comp/CMakeLists.txt | 34 external/spirv-tools/source/comp/markv_codec.cpp | 1556 + external/spirv-tools/source/ext_inst.cpp | 27 external/spirv-tools/source/extinst.spv-amd-shader-ballot.grammar.json | 41 external/spirv-tools/source/extinst.spv-amd-shader-explicit-vertex-parameter.grammar.json | 14 external/spirv-tools/source/extinst.spv-amd-shader-trinary-minmax.grammar.json | 95 external/spirv-tools/source/operand.cpp | 63 external/spirv-tools/source/operand.h | 31 external/spirv-tools/source/opt/CMakeLists.txt | 17 external/spirv-tools/source/opt/basic_block.h | 17 external/spirv-tools/source/opt/block_merge_pass.cpp | 143 external/spirv-tools/source/opt/block_merge_pass.h | 73 external/spirv-tools/source/opt/inline_pass.cpp | 2 external/spirv-tools/source/opt/insert_extract_elim.cpp | 125 external/spirv-tools/source/opt/insert_extract_elim.h | 77 external/spirv-tools/source/opt/local_access_chain_convert_pass.cpp | 2 external/spirv-tools/source/opt/local_single_block_elim_pass.cpp | 2 external/spirv-tools/source/opt/local_single_store_elim_pass.cpp | 469 external/spirv-tools/source/opt/local_single_store_elim_pass.h | 220 external/spirv-tools/source/opt/optimizer.cpp | 15 external/spirv-tools/source/opt/passes.h | 3 external/spirv-tools/source/text.cpp | 19 external/spirv-tools/source/util/bit_stream.cpp | 72 external/spirv-tools/source/util/bit_stream.h | 68 external/spirv-tools/source/util/huffman_codec.h | 299 external/spirv-tools/source/util/move_to_front.h | 649 external/spirv-tools/source/val/validation_state.cpp | 20 external/spirv-tools/source/val/validation_state.h | 2 external/spirv-tools/source/validate.cpp | 4 external/spirv-tools/test/CMakeLists.txt | 13 external/spirv-tools/test/bit_stream.cpp | 148 external/spirv-tools/test/comp/CMakeLists.txt | 23 external/spirv-tools/test/comp/markv_codec_test.cpp | 433 external/spirv-tools/test/huffman_codec.cpp | 220 external/spirv-tools/test/move_to_front_test.cpp | 785 external/spirv-tools/test/operand_pattern_test.cpp | 90 external/spirv-tools/test/opt/CMakeLists.txt | 15 external/spirv-tools/test/opt/block_merge_test.cpp | 337 external/spirv-tools/test/opt/insert_extract_elim_test.cpp | 334 external/spirv-tools/test/opt/local_single_store_elim_test.cpp | 521 external/spirv-tools/test/text_to_binary.extension_test.cpp | 106 external/spirv-tools/test/val/val_extensions_test.cpp | 6 external/spirv-tools/tools/CMakeLists.txt | 17 external/spirv-tools/tools/comp/markv.cpp | 247 external/spirv-tools/tools/emacs/CMakeLists.txt | 4 external/spirv-tools/tools/lesspipe/CMakeLists.txt | 4 external/spirv-tools/tools/opt/opt.cpp | 6 external/spirv-tools/utils/generate_grammar_tables.py | 9 external_revisions/glslang_revision | 2 external_revisions/spirv-headers_revision | 2 external_revisions/spirv-tools_revision | 2 include/vulkan/vk_icd.h | 8 include/vulkan/vulkan.h | 1212 include/vulkan/vulkan.hpp |12620 +++++----- layers/CMakeLists.txt | 14 layers/buffer_validation.cpp | 354 layers/buffer_validation.h | 5 layers/core_validation.cpp | 540 layers/core_validation_types.h | 10 layers/descriptor_sets.cpp | 77 layers/descriptor_sets.h | 47 layers/linux/VkLayer_core_validation.json | 14 layers/linux/VkLayer_object_tracker.json | 14 layers/linux/VkLayer_parameter_validation.json | 14 layers/linux/VkLayer_standard_validation.json | 2 layers/linux/VkLayer_threading.json | 2 layers/linux/VkLayer_unique_objects.json | 2 layers/object_tracker.cpp | 455 layers/parameter_validation.cpp | 739 layers/parameter_validation_utils.h | 103 layers/shader_validation.cpp | 37 layers/spec.py | 357 layers/vk_layer_logging.h | 20 layers/vk_layer_table.cpp | 59 layers/vk_validation_error_database.txt | 1751 - layers/vk_validation_error_messages.h | 828 layers/vk_validation_stats.py | 414 layers/vuid_mapping.py | 941 layers/windows/VkLayer_core_validation.json | 14 layers/windows/VkLayer_object_tracker.json | 14 layers/windows/VkLayer_parameter_validation.json | 14 layers/windows/VkLayer_standard_validation.json | 2 layers/windows/VkLayer_threading.json | 2 layers/windows/VkLayer_unique_objects.json | 2 loader/CMakeLists.txt | 49 loader/LoaderAndLayerInterface.md | 31 loader/asm_offset.c | 117 loader/dev_ext_trampoline.c | 509 loader/extension_manual.c | 148 loader/extension_manual.h | 24 loader/loader.c | 64 loader/loader.h | 3 loader/phys_dev_ext.c | 779 loader/trampoline.c | 16 loader/unknown_ext_chain.c | 819 loader/unknown_ext_chain_gas.asm | 869 loader/unknown_ext_chain_masm.asm | 883 scripts/helper_file_generator.py | 8 scripts/loader_extension_generator.py | 71 scripts/parameter_validation_generator.py | 146 scripts/reg.py | 4 scripts/spec.py | 357 scripts/unique_objects_generator.py | 3 scripts/vk.xml | 1142 scripts/vk_validation_stats.py | 450 scripts/vuid_mapping.py | 1086 tests/_run_all_tests.ps1 | 2 tests/_vkvalidatelayerdoc.ps1 | 18 tests/layer_validation_tests.cpp | 1838 - tests/layers/CMakeLists.txt | 4 tests/layers/device_profile_api.cpp | 7 tests/layers/linux/VkLayer_device_profile_api.json | 2 tests/layers/linux/VkLayer_test.json | 2 tests/layers/linux/VkLayer_wrap_objects.json | 2 tests/layers/vk_lunarg_device_profile_api_layer.h | 17 tests/layers/windows/VkLayer_device_profile_api.json | 2 tests/layers/windows/VkLayer_test.json | 2 tests/layers/windows/VkLayer_wrap_objects.json | 2 tests/run_all_tests.sh | 2 tests/vkrenderframework.cpp | 23 tests/vkrenderframework.h | 2 tests/vkvalidatelayerdoc.sh | 14 update_external_sources.bat | 5 292 files changed, 38660 insertions(+), 16951 deletions(-)
New commits: commit f5225086d255ae1573e9988e6193e87e83f4b752 Author: Timo Aaltonen <tjaal...@debian.org> Date: Tue Aug 1 13:31:15 2017 +0300 release to artful diff --git a/debian/changelog b/debian/changelog index fb31584..76e30ac 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +vulkan (1.0.54.0+dfsg1-1ubuntu1) artful; urgency=medium + + * Merge from Debian. + * patches: Refreshed. + + -- Timo Aaltonen <tjaal...@debian.org> Mon, 31 Jul 2017 16:57:18 +0300 + vulkan (1.0.54.0+dfsg1-1) unstable; urgency=medium * New upstream release. diff --git a/debian/patches/demos-mir.diff b/debian/patches/demos-mir.diff index 5add113..ba6228c 100644 --- a/debian/patches/demos-mir.diff +++ b/debian/patches/demos-mir.diff @@ -28,7 +28,7 @@ #endif #ifdef ANDROID -@@ -337,6 +338,9 @@ struct demo { +@@ -336,6 +337,9 @@ struct demo { struct wl_shell *shell; struct wl_shell_surface *shell_surface; #elif defined(VK_USE_PLATFORM_MIR_KHR) @@ -38,7 +38,7 @@ #elif defined(VK_USE_PLATFORM_ANDROID_KHR) ANativeWindow *window; #elif (defined(VK_USE_PLATFORM_IOS_MVK) || defined(VK_USE_PLATFORM_MACOS_MVK)) -@@ -2431,6 +2435,9 @@ static void demo_cleanup(struct demo *de +@@ -2410,6 +2414,9 @@ static void demo_cleanup(struct demo *de wl_registry_destroy(demo->registry); wl_display_disconnect(demo->display); #elif defined(VK_USE_PLATFORM_MIR_KHR) @@ -46,9 +46,9 @@ + mir_window_release_sync(demo->mir_window); + mir_connection_release(demo->mir_connection); #endif - } -@@ -2843,6 +2850,66 @@ static void demo_run(struct demo *demo) + vkDestroyInstance(demo->inst, NULL); +@@ -2823,6 +2830,66 @@ static void demo_run(struct demo *demo) demo->curFrame++; } #elif defined(VK_USE_PLATFORM_MIR_KHR) @@ -115,7 +115,7 @@ #elif defined(VK_USE_PLATFORM_DISPLAY_KHR) static VkResult demo_create_display_surface(struct demo *demo) { VkResult U_ASSERT_ONLY err; -@@ -3139,6 +3206,12 @@ static void demo_init_vk(struct demo *de +@@ -3119,6 +3186,12 @@ static void demo_init_vk(struct demo *de VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME; } #elif defined(VK_USE_PLATFORM_MIR_KHR) @@ -128,7 +128,7 @@ #elif defined(VK_USE_PLATFORM_DISPLAY_KHR) if (!strcmp(VK_KHR_DISPLAY_EXTENSION_NAME, instance_extensions[i].extensionName)) { -@@ -3226,6 +3299,13 @@ static void demo_init_vk(struct demo *de +@@ -3206,6 +3279,13 @@ static void demo_init_vk(struct demo *de "information.\n", "vkCreateInstance Failure"); #elif defined(VK_USE_PLATFORM_MIR_KHR) @@ -142,7 +142,7 @@ #elif defined(VK_USE_PLATFORM_DISPLAY_KHR) ERR_EXIT("vkEnumerateInstanceExtensionProperties failed to find " "the " VK_KHR_DISPLAY_EXTENSION_NAME -@@ -3551,6 +3631,15 @@ static void demo_init_vk_swapchain(struc +@@ -3531,6 +3611,15 @@ static void demo_init_vk_swapchain(struc err = vkCreateWaylandSurfaceKHR(demo->inst, &createInfo, NULL, &demo->surface); #elif defined(VK_USE_PLATFORM_MIR_KHR) @@ -158,7 +158,7 @@ #elif defined(VK_USE_PLATFORM_ANDROID_KHR) VkAndroidSurfaceCreateInfoKHR createInfo; createInfo.sType = VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR; -@@ -3755,7 +3844,6 @@ static void registry_handle_global_remov +@@ -3735,7 +3824,6 @@ static void registry_handle_global_remov static const struct wl_registry_listener registry_listener = { registry_handle_global, registry_handle_global_remove}; @@ -166,7 +166,7 @@ #endif static void demo_init_connection(struct demo *demo) { -@@ -3792,6 +3880,9 @@ static void demo_init_connection(struct +@@ -3772,6 +3860,9 @@ static void demo_init_connection(struct wl_registry_add_listener(demo->registry, ®istry_listener, demo); wl_display_dispatch(demo->display); #elif defined(VK_USE_PLATFORM_MIR_KHR) @@ -176,7 +176,7 @@ #endif } -@@ -4104,6 +4195,7 @@ int main(int argc, char **argv) { +@@ -4084,6 +4175,7 @@ int main(int argc, char **argv) { #elif defined(VK_USE_PLATFORM_WAYLAND_KHR) demo_create_window(&demo); #elif defined(VK_USE_PLATFORM_MIR_KHR) @@ -184,7 +184,7 @@ #endif demo_init_vk_swapchain(&demo); -@@ -4117,6 +4209,7 @@ int main(int argc, char **argv) { +@@ -4097,6 +4189,7 @@ int main(int argc, char **argv) { #elif defined(VK_USE_PLATFORM_WAYLAND_KHR) demo_run(&demo); #elif defined(VK_USE_PLATFORM_MIR_KHR) diff --git a/debian/patches/loader-mir.diff b/debian/patches/loader-mir.diff index 919bf7b..36c88fa 100644 --- a/debian/patches/loader-mir.diff +++ b/debian/patches/loader-mir.diff @@ -31,7 +31,7 @@ #endif }; -@@ -419,7 +423,7 @@ static const char *VkFormatString(VkForm +@@ -420,7 +424,7 @@ static const char *VkFormatString(VkForm return "UNKNOWN_FORMAT"; } } @@ -40,7 +40,7 @@ static const char *VkPresentModeString(VkPresentModeKHR mode) { switch (mode) { #define STR(r) \ -@@ -603,7 +607,7 @@ static void AppCreateInstance(struct App +@@ -604,7 +608,7 @@ static void AppCreateInstance(struct App } #if defined(VK_USE_PLATFORM_XCB_KHR) || defined(VK_USE_PLATFORM_XLIB_KHR) || defined(VK_USE_PLATFORM_WAYLAND_KHR) || \ @@ -49,7 +49,7 @@ if (ext_count) for (i = 0; ((i < inst->global_extension_count) && (ext_count < MAX_EXTENSIONS)); i++) { const char *found_name = inst->global_extensions[i].extensionName; -@@ -627,6 +631,10 @@ static void AppCreateInstance(struct App +@@ -628,6 +632,10 @@ static void AppCreateInstance(struct App if (!strcmp(VK_KHR_ANDROID_SURFACE_EXTENSION_NAME, found_name)) { ext_names[ext_count++] = VK_KHR_ANDROID_SURFACE_EXTENSION_NAME; } @@ -60,7 +60,7 @@ #endif } #endif -@@ -824,7 +832,8 @@ static void AppDestroyWin32Window(struct +@@ -825,7 +833,8 @@ static void AppDestroyWin32Window(struct #if defined(VK_USE_PLATFORM_XCB_KHR) || \ defined(VK_USE_PLATFORM_XLIB_KHR) || \ @@ -70,7 +70,7 @@ static void AppDestroySurface(struct AppInstance *inst) { //same for all platforms vkDestroySurfaceKHR(inst->instance, inst->surface, NULL); } -@@ -933,12 +942,65 @@ static void AppDestroyXlibWindow(struct +@@ -934,12 +943,65 @@ static void AppDestroyXlibWindow(struct XDestroyWindow(inst->xlib_display, inst->xlib_window); XCloseDisplay(inst->xlib_display); } @@ -138,7 +138,7 @@ static int AppDumpSurfaceFormats(struct AppInstance *inst, struct AppGpu *gpu){ // Get the list of VkFormat's that are supported: VkResult U_ASSERT_ONLY err; -@@ -1280,7 +1342,7 @@ static void AppDumpExtensions(const char +@@ -1283,7 +1345,7 @@ static void AppDumpExtensions(const char fflush(stdout); } @@ -147,7 +147,7 @@ // Returns true if the named extension is in the list of extensions. static bool HasExtension(const char *extension_name, const uint32_t extension_count, const VkExtensionProperties *extension_properties) { -@@ -1558,8 +1620,22 @@ int main(int argc, char **argv) { +@@ -1561,8 +1623,22 @@ int main(int argc, char **argv) { } AppDestroyXlibWindow(&inst); } commit 50203dbc808f1138b20e0cc8af5090ea3406384d Author: Timo Aaltonen <tjaal...@debian.org> Date: Mon Jul 24 12:38:24 2017 +0300 release to sid diff --git a/debian/changelog b/debian/changelog index 93d3619..097b46a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,8 @@ -vulkan (1.0.54.0+dfsg1-1) UNRELEASED; urgency=medium +vulkan (1.0.54.0+dfsg1-1) unstable; urgency=medium * New upstream release. - -- Timo Aaltonen <tjaal...@debian.org> Mon, 24 Jul 2017 12:27:29 +0300 + -- Timo Aaltonen <tjaal...@debian.org> Mon, 24 Jul 2017 12:38:14 +0300 vulkan (1.0.51.0+dfsg1-1) unstable; urgency=medium commit f3146b9424f16cd53132b9b1fa28575e78d8de67 Author: Timo Aaltonen <tjaal...@debian.org> Date: Mon Jul 24 12:38:12 2017 +0300 update the changelog diff --git a/debian/changelog b/debian/changelog index 08b8aed..93d3619 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +vulkan (1.0.54.0+dfsg1-1) UNRELEASED; urgency=medium + + * New upstream release. + + -- Timo Aaltonen <tjaal...@debian.org> Mon, 24 Jul 2017 12:27:29 +0300 + vulkan (1.0.51.0+dfsg1-1) unstable; urgency=medium * New upstream release. commit f7825272e341a108b4ad9f0e85d80eaf6d3f26ef Author: Timo Aaltonen <tjaal...@debian.org> Date: Mon Jul 24 12:27:00 2017 +0300 Refresh external/ diff --git a/external/glslang/CMakeLists.txt b/external/glslang/CMakeLists.txt index 1d98c9f..9bc94b0 100644 --- a/external/glslang/CMakeLists.txt +++ b/external/glslang/CMakeLists.txt @@ -6,6 +6,11 @@ set_property(GLOBAL PROPERTY USE_FOLDERS ON) # Adhere to GNU filesystem layout conventions include(GNUInstallDirs) +option(SKIP_GLSLANG_INSTALL "Skip installation" ${SKIP_GLSLANG_INSTALL}) +if(NOT ${SKIP_GLSLANG_INSTALL}) + set(ENABLE_GLSLANG_INSTALL ON) +endif() + option(ENABLE_AMD_EXTENSIONS "Enables support of AMD-specific extensions" ON) option(ENABLE_GLSLANG_BINARIES "Builds glslangValidator and spirv-remap" ON) diff --git a/external/glslang/OGLCompilersDLL/CMakeLists.txt b/external/glslang/OGLCompilersDLL/CMakeLists.txt index 8edd143..5bb3f0e 100644 --- a/external/glslang/OGLCompilersDLL/CMakeLists.txt +++ b/external/glslang/OGLCompilersDLL/CMakeLists.txt @@ -1,11 +1,14 @@ set(SOURCES InitializeDll.cpp InitializeDll.h) add_library(OGLCompiler STATIC ${SOURCES}) -set_property(TARGET OGLCompiler PROPERTY FOLDER glslang POSITION_INDEPENDENT_CODE ON) +set_property(TARGET OGLCompiler PROPERTY FOLDER glslang) +set_property(TARGET OGLCompiler PROPERTY POSITION_INDEPENDENT_CODE ON) if(WIN32) source_group("Source" FILES ${SOURCES}) endif(WIN32) -install(TARGETS OGLCompiler - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) +if(ENABLE_GLSLANG_INSTALL) + install(TARGETS OGLCompiler + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) +endif(ENABLE_GLSLANG_INSTALL) diff --git a/external/glslang/SPIRV/CMakeLists.txt b/external/glslang/SPIRV/CMakeLists.txt index 2ad86d6..3c5ebab 100755 --- a/external/glslang/SPIRV/CMakeLists.txt +++ b/external/glslang/SPIRV/CMakeLists.txt @@ -40,18 +40,22 @@ if(ENABLE_NV_EXTENSIONS) endif(ENABLE_NV_EXTENSIONS) add_library(SPIRV STATIC ${SOURCES} ${HEADERS}) -set_property(TARGET SPIRV PROPERTY FOLDER glslang POSITION_INDEPENDENT_CODE ON) +set_property(TARGET SPIRV PROPERTY FOLDER glslang) +set_property(TARGET SPIRV PROPERTY POSITION_INDEPENDENT_CODE ON) target_link_libraries(SPIRV glslang) add_library(SPVRemapper STATIC ${SPVREMAP_SOURCES} ${SPVREMAP_HEADERS}) -set_property(TARGET SPVRemapper PROPERTY FOLDER glslang POSITION_INDEPENDENT_CODE ON) +set_property(TARGET SPVRemapper PROPERTY FOLDER glslang) +set_property(TARGET SPVRemapper PROPERTY POSITION_INDEPENDENT_CODE ON) if(WIN32) source_group("Source" FILES ${SOURCES} ${HEADERS}) source_group("Source" FILES ${SPVREMAP_SOURCES} ${SPVREMAP_HEADERS}) endif(WIN32) -install(TARGETS SPIRV SPVRemapper - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) +if(ENABLE_GLSLANG_INSTALL) + install(TARGETS SPIRV SPVRemapper + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) -install(FILES ${HEADERS} ${SPVREMAP_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/SPIRV/) + install(FILES ${HEADERS} ${SPVREMAP_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/SPIRV/) +endif(ENABLE_GLSLANG_INSTALL) diff --git a/external/glslang/SPIRV/GLSL.ext.AMD.h b/external/glslang/SPIRV/GLSL.ext.AMD.h index a1b9ef9..4fff8c8 100644 --- a/external/glslang/SPIRV/GLSL.ext.AMD.h +++ b/external/glslang/SPIRV/GLSL.ext.AMD.h @@ -117,7 +117,7 @@ static const char* const E_SPV_AMD_gpu_shader_half_float = "SPV_AMD_gpu_shader_h // SPV_AMD_texture_gather_bias_lod static const char* const E_SPV_AMD_texture_gather_bias_lod = "SPV_AMD_texture_gather_bias_lod"; -static const Capability OpCapabilityImageGatherBiasLodAMD = static_cast<Capability>(5009); +static const Capability CapabilityImageGatherBiasLodAMD = static_cast<Capability>(5009); // SPV_AMD_gpu_shader_int16 static const char* const E_SPV_AMD_gpu_shader_int16 = "SPV_AMD_gpu_shader_int16"; diff --git a/external/glslang/SPIRV/GLSL.ext.KHR.h b/external/glslang/SPIRV/GLSL.ext.KHR.h index c9e31a6..6e02529 100644 --- a/external/glslang/SPIRV/GLSL.ext.KHR.h +++ b/external/glslang/SPIRV/GLSL.ext.KHR.h @@ -32,7 +32,7 @@ enum Op; enum Capability; static const int GLSLextKHRVersion = 100; -static const int GLSLextKHRRevision = 1; +static const int GLSLextKHRRevision = 2; static const char* const E_SPV_KHR_shader_ballot = "SPV_KHR_shader_ballot"; static const char* const E_SPV_KHR_subgroup_vote = "SPV_KHR_subgroup_vote"; @@ -41,5 +41,6 @@ static const char* const E_SPV_KHR_multiview = "SPV_KHR_multi static const char* const E_SPV_KHR_shader_draw_parameters = "SPV_KHR_shader_draw_parameters"; static const char* const E_SPV_KHR_16bit_storage = "SPV_KHR_16bit_storage"; static const char* const E_SPV_KHR_storage_buffer_storage_class = "SPV_KHR_storage_buffer_storage_class"; +static const char* const E_SPV_KHR_post_depth_coverage = "SPV_KHR_post_depth_coverage"; #endif // #ifndef GLSLextKHR_H diff --git a/external/glslang/SPIRV/GlslangToSpv.cpp b/external/glslang/SPIRV/GlslangToSpv.cpp index 9a29b2e..50806d0 100755 --- a/external/glslang/SPIRV/GlslangToSpv.cpp +++ b/external/glslang/SPIRV/GlslangToSpv.cpp @@ -520,6 +520,10 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI builder.addCapability(spv::CapabilityGeometry); return spv::BuiltInPrimitiveId; + case glslang::EbvFragStencilRef: + logger->missingFunctionality("shader stencil export"); + return spv::BuiltInMax; + case glslang::EbvInvocationId: return spv::BuiltInInvocationId; case glslang::EbvTessLevelInner: return spv::BuiltInTessLevelInner; case glslang::EbvTessLevelOuter: return spv::BuiltInTessLevelOuter; @@ -976,6 +980,12 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(const glslang::TIntermediate* gls if (glslangIntermediate->getEarlyFragmentTests()) builder.addExecutionMode(shaderEntry, spv::ExecutionModeEarlyFragmentTests); + if (glslangIntermediate->getPostDepthCoverage()) { + builder.addCapability(spv::CapabilitySampleMaskPostDepthCoverage); + builder.addExecutionMode(shaderEntry, spv::ExecutionModePostDepthCoverage); + builder.addExtension(spv::E_SPV_KHR_post_depth_coverage); + } + switch(glslangIntermediate->getDepth()) { case glslang::EldGreater: mode = spv::ExecutionModeDepthGreater; break; case glslang::EldLess: mode = spv::ExecutionModeDepthLess; break; @@ -2431,7 +2441,6 @@ spv::Id TGlslangToSpvTraverser::convertGlslangStructToSpvType(const glslang::TTy // Create a vector of struct types for SPIR-V to consume std::vector<spv::Id> spvMembers; int memberDelta = 0; // how much the member's index changes from glslang to SPIR-V, normally 0, except sometimes for blocks - int locationOffset = 0; // for use across struct members, when they are called recursively for (int i = 0; i < (int)glslangMembers->size(); i++) { glslang::TType& glslangMember = *(*glslangMembers)[i].type; if (glslangMember.hiddenMember()) { @@ -2448,11 +2457,9 @@ spv::Id TGlslangToSpvTraverser::convertGlslangStructToSpvType(const glslang::TTy glslang::TQualifier memberQualifier = glslangMember.getQualifier(); InheritQualifiers(memberQualifier, qualifier); - // manually inherit location; it's more complex + // manually inherit location if (! memberQualifier.hasLocation() && qualifier.hasLocation()) - memberQualifier.layoutLocation = qualifier.layoutLocation + locationOffset; - if (qualifier.hasLocation()) - locationOffset += glslangIntermediate->computeTypeLocationSize(glslangMember); + memberQualifier.layoutLocation = qualifier.layoutLocation; // recurse spvMembers.push_back(convertGlslangToSpvType(glslangMember, explicitLayout, memberQualifier)); @@ -2515,29 +2522,12 @@ void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type, addMemberDecoration(spvType, member, memory[i]); } - // Compute location decoration; tricky based on whether inheritance is at play and - // what kind of container we have, etc. - // TODO: This algorithm (and it's cousin above doing almost the same thing) should - // probably move to the linker stage of the front end proper, and just have the - // answer sitting already distributed throughout the individual member locations. - int location = -1; // will only decorate if present or inherited + // Location assignment was already completed correctly by the front end, + // just track whether a member needs to be decorated. // Ignore member locations if the container is an array, as that's - // ill-specified and decisions have been made to not allow this anyway. - // The object itself must have a location, and that comes out from decorating the object, - // not the type (this code decorates types). - if (! type.isArray()) { - if (memberQualifier.hasLocation()) { // no inheritance, or override of inheritance - // struct members should not have explicit locations - assert(type.getBasicType() != glslang::EbtStruct); - location = memberQualifier.layoutLocation; - } else if (type.getBasicType() != glslang::EbtBlock) { - // If it is a not a Block, (...) Its members are assigned consecutive locations (...) - // The members, and their nested types, must not themselves have Location decorations. - } else if (qualifier.hasLocation()) // inheritance - location = qualifier.layoutLocation + locationOffset; - } - if (location >= 0) - builder.addMemberDecoration(spvType, member, spv::DecorationLocation, location); + // ill-specified and decisions have been made to not allow this. + if (! type.isArray() && memberQualifier.hasLocation()) + builder.addMemberDecoration(spvType, member, spv::DecorationLocation, memberQualifier.layoutLocation); if (qualifier.hasLocation()) // track for upcoming inheritance locationOffset += glslangIntermediate->computeTypeLocationSize(glslangMember); @@ -3294,7 +3284,7 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO if (bias || cracked.lod || sourceExtensions.find(glslang::E_GL_AMD_texture_gather_bias_lod) != sourceExtensions.end()) { builder.addExtension(spv::E_SPV_AMD_texture_gather_bias_lod); - builder.addCapability(spv::OpCapabilityImageGatherBiasLodAMD); + builder.addCapability(spv::CapabilityImageGatherBiasLodAMD); } } #endif diff --git a/external/glslang/SPIRV/doc.cpp b/external/glslang/SPIRV/doc.cpp index bae43bd..03097d0 100755 --- a/external/glslang/SPIRV/doc.cpp +++ b/external/glslang/SPIRV/doc.cpp @@ -175,6 +175,7 @@ const char* ExecutionModeString(int mode) case 31: return "ContractionOff"; case 32: return "Bad"; + case 4446: return "PostDepthCoverage"; case ExecutionModeCeiling: default: return "Bad"; } @@ -843,6 +844,7 @@ const char* CapabilityString(int info) case 5009: return "ImageGatherBiasLodAMD"; #endif + case 4447: return "SampleMaskPostDepthCoverage"; #ifdef NV_EXTENSIONS case 5251: return "GeometryShaderPassthroughNV"; case 5254: return "ShaderViewportIndexLayerNV"; diff --git a/external/glslang/SPIRV/spirv.hpp b/external/glslang/SPIRV/spirv.hpp index 91cb59e..c9f6f71 100755 --- a/external/glslang/SPIRV/spirv.hpp +++ b/external/glslang/SPIRV/spirv.hpp @@ -47,11 +47,11 @@ namespace spv { typedef unsigned int Id; #define SPV_VERSION 0x10000 -#define SPV_REVISION 10 +#define SPV_REVISION 11 static const unsigned int MagicNumber = 0x07230203; static const unsigned int Version = 0x00010000; -static const unsigned int Revision = 10; +static const unsigned int Revision = 11; static const unsigned int OpCodeMask = 0xffff; static const unsigned int WordCountShift = 16; @@ -122,6 +122,7 @@ enum ExecutionMode { ExecutionModeOutputTriangleStrip = 29, ExecutionModeVecTypeHint = 30, ExecutionModeContractionOff = 31, + ExecutionModePostDepthCoverage = 4446, ExecutionModeMax = 0x7fffffff, }; @@ -628,6 +629,7 @@ enum Capability { CapabilityMultiView = 4439, CapabilityVariablePointersStorageBuffer = 4441, CapabilityVariablePointers = 4442, + CapabilitySampleMaskPostDepthCoverage = 4447, CapabilitySampleMaskOverrideCoverageNV = 5249, CapabilityGeometryShaderPassthroughNV = 5251, CapabilityShaderViewportIndexLayerNV = 5254, diff --git a/external/glslang/StandAlone/CMakeLists.txt b/external/glslang/StandAlone/CMakeLists.txt index c61667c..b0d863d 100644 --- a/external/glslang/StandAlone/CMakeLists.txt +++ b/external/glslang/StandAlone/CMakeLists.txt @@ -1,6 +1,7 @@ add_library(glslang-default-resource-limits ${CMAKE_CURRENT_SOURCE_DIR}/ResourceLimits.cpp) -set_property(TARGET glslang-default-resource-limits PROPERTY FOLDER glslang POSITION_INDEPENDENT_CODE ON) +set_property(TARGET glslang-default-resource-limits PROPERTY FOLDER glslang) +set_property(TARGET glslang-default-resource-limits PROPERTY POSITION_INDEPENDENT_CODE ON) target_include_directories(glslang-default-resource-limits PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} @@ -37,8 +38,10 @@ if(WIN32) source_group("Source" FILES ${SOURCES}) endif(WIN32) -install(TARGETS glslangValidator - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) +if(ENABLE_GLSLANG_INSTALL) + install(TARGETS glslangValidator + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) -install(TARGETS spirv-remap - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) + install(TARGETS spirv-remap + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) +endif(ENABLE_GLSLANG_INSTALL) diff --git a/external/glslang/StandAlone/StandAlone.cpp b/external/glslang/StandAlone/StandAlone.cpp index 0b8b8f4..1e2c8f7 100644 --- a/external/glslang/StandAlone/StandAlone.cpp +++ b/external/glslang/StandAlone/StandAlone.cpp @@ -115,18 +115,14 @@ enum TFailCode { EShLanguage FindLanguage(const std::string& name, bool parseSuffix=true); void CompileFile(const char* fileName, ShHandle); void usage(); -void FreeFileData(char** data); -char** ReadFileData(const char* fileName); +char* ReadFileData(const char* fileName); +void FreeFileData(char* data); void InfoLogMsg(const char* msg, const char* name, const int num); // Globally track if any compile or link failure. bool CompileFailed = false; bool LinkFailed = false; -// Use to test breaking up a single shader file into multiple strings. -// Set in ReadFileData(). -int NumShaderStrings; - TBuiltInResource Resources; std::string ConfigFile; @@ -135,29 +131,13 @@ std::string ConfigFile; // void ProcessConfigFile() { - char** configStrings = 0; - char* config = 0; - if (ConfigFile.size() > 0) { - configStrings = ReadFileData(ConfigFile.c_str()); - if (configStrings) - config = *configStrings; - else { - printf("Error opening configuration file; will instead use the default configuration\n"); - usage(); - } - } - - if (config == 0) { + if (ConfigFile.size() == 0) Resources = glslang::DefaultTBuiltInResource; - return; + else { + char* configString = ReadFileData(ConfigFile.c_str()); + glslang::DecodeResourceLimits(&Resources, configString); + FreeFileData(configString); } - - glslang::DecodeResourceLimits(&Resources, config); - - if (configStrings) - FreeFileData(configStrings); - else - delete[] config; } int Options = 0; @@ -168,6 +148,10 @@ const char* sourceEntryPointName = nullptr; const char* shaderStageName = nullptr; const char* variableName = nullptr; std::vector<std::string> IncludeDirectoryList; +int ClientInputSemanticsVersion = 100; // maps to, say, #define VULKAN 100 +int VulkanClientVersion = 100; // would map to, say, Vulkan 1.0 +int OpenGLClientVersion = 450; // doesn't influence anything yet, but maps to OpenGL 4.50 +unsigned int TargetVersion = 0x00001000; // maps to, say, SPIR-V 1.0 std::array<unsigned int, EShLangCount> baseSamplerBinding; std::array<unsigned int, EShLangCount> baseTextureBinding; @@ -177,6 +161,52 @@ std::array<unsigned int, EShLangCount> baseSsboBinding; std::array<unsigned int, EShLangCount> baseUavBinding; std::array<std::vector<std::string>, EShLangCount> baseResourceSetBinding; +// Add things like "#define ..." to a preamble to use in the beginning of the shader. +class TPreamble { +public: + TPreamble() { } + + bool isSet() const { return text.size() > 0; } + const char* get() const { return text.c_str(); } + + // #define... + void addDef(std::string def) + { + text.append("#define "); + fixLine(def); + + // The first "=" needs to turn into a space + int equal = def.find_first_of("="); + if (equal != def.npos) + def[equal] = ' '; + + text.append(def); + text.append("\n"); + } + + // #undef... + void addUndef(std::string undef) + { + text.append("#undef "); + fixLine(undef); + text.append(undef); + text.append("\n"); + } + +protected: + void fixLine(std::string& line) + { + // Can't go past a newline in the line + int end = line.find_first_of("\n"); + if (end != line.npos) + line = line.substr(0, end); + } + + std::string text; // contents of preamble +}; + +TPreamble UserPreamble; + // // Create the default name for saving a binary if -o is not provided. // @@ -268,15 +298,15 @@ void ProcessResourceSetBindingBase(int& argc, char**& argv, std::array<std::vect base[lang].push_back(argv[2]); base[lang].push_back(argv[3]); base[lang].push_back(argv[4]); - argc-= 4; - argv+= 4; + argc -= 4; + argv += 4; while(argv[1] != NULL) { if(argv[1][0] != '-') { base[lang].push_back(argv[1]); base[lang].push_back(argv[2]); base[lang].push_back(argv[3]); - argc-= 3; - argv+= 3; + argc -= 3; + argv += 3; } else { break; @@ -310,9 +340,48 @@ void ProcessArguments(std::vector<std::unique_ptr<glslang::TWorkItem>>& workItem ExecutableName = argv[0]; workItems.reserve(argc); - argc--; - argv++; - for (; argc >= 1; argc--, argv++) { + const auto bumpArg = [&]() { + if (argc > 0) { + argc--; + argv++; + } + }; + + // read a string directly attached to a single-letter option + const auto getStringOperand = [&](const char* desc) { + if (argv[0][2] == 0) { + printf("%s must immediately follow option (no spaces)\n", desc); + exit(EFailUsage); + } + return argv[0] + 2; + }; + + // read a number attached to a single-letter option + const auto getAttachedNumber = [&](const char* desc) { + int num = atoi(argv[0] + 2); + if (num == 0) { + printf("%s: expected attached non-0 number\n", desc); + exit(EFailUsage); + } + return num; + }; + + // minimum needed (without overriding something else) to target Vulkan SPIR-V + const auto setVulkanSpv = []() { + Options |= EOptionSpv; + Options |= EOptionVulkanRules; + Options |= EOptionLinkProgram; + }; + + // minimum needed (without overriding something else) to target OpenGL SPIR-V + const auto setOpenGlSpv = []() { + Options |= EOptionSpv; + Options |= EOptionLinkProgram; + // undo a -H default to Vulkan + Options &= ~EOptionVulkanRules; + };